This is a family of amalgamated products from SACK.
Tried to host this as a gist; but that didn't work out so well.
https://gist.github.com/d3x0r/3ce9cced42446b8f39c081e7425ea6d8
This is the smallest subset. It includes most things
This is a C file, but if the .h is included as C++ then namespaces will be used, and the .c file should be renamed as .cc/.cpp/... or compiler option otherwise forced to C++.
@set SRCS= %SRCS% ../../src/typelib/typecode.c
@set SRCS= %SRCS% ../../src/typelib/text.c
@set SRCS= %SRCS% ../../src/typelib/input.c
@set SRCS= %SRCS% ../../src/typelib/sets.c
@set SRCS= %SRCS% ../../src/typelib/binarylist.c
@set SRCS= %SRCS% ../../src/typelib/url.c
@set SRCS= %SRCS% ../../src/fractionlib/fractions.c
@set SRCS= %SRCS% ../../src/memlib/sharemem.c
@set SRCS= %SRCS% ../../src/memlib/memory_operations.c
@set SRCS= %SRCS% ../../src/deadstart/deadstart_core.c
// this requires file system fixes
@set SRCS= %SRCS% ../../src/vectlib/vectlib.c
: These only required core containers and memory.
: JSON Parser (no extensions)
@set SRCS= %SRCS% ../../src/netlib/html5.websocket/json/json.c
: JSON6 Parser (JSON compatible parser plus additional keywords, quoting options, comments,... )
@set SRCS= %SRCS% ../../src/netlib/html5.websocket/json/json6.c
: JSOX Parser (JSON/JSON6 compatible parser plus better typed data transport and revive with a class constructor)
@set SRCS= %SRCS% ../../src/netlib/html5.websocket/json/jsox.c
An old build of the documentation (there haven't been a LOT of updates) http://sack.sf.net containers
-
containers - threadsafe
- list - items tracked by dynamic sized array of pointers to userdata
- data list - Items are tracked by a dynamic sized array of structs
- Queue - tracks a queue of pointers to userdata.
- Data QUeue - Tracks a queue with a dynamic array of structures.
- Link Stack - stack using a dynamic array of pointers to userdata
- Data Stack - Stack using dynamic array of structs.
- sets - A fixed length slab of data structure which are tracked by a bit field of allocated/free members in the set.
- Binary tree - binary tree using 'set's of nodes that contain pointers to userdata and userkey information.
- Text - a type abstraction for tracking strings as linked list of segments... include language text parser for getting phrases and words from other text.
- JSON/JSON6 Parsers
- JSOX
- Sample Code
- json_ and json6_ libraries work similarly to jsox_, only the prefixes are changed; and the enum used for the value_container type.
- Url parsing and building (something like github.com/d3x0r/sack/include/url.h)
Some platforms/permutations need flags defined to compile 'correctly'. The CMake build system for SACK takes care of these typically...
Flag | Usage |
---|---|
__LINUX__ | compile for posix type system. This should be defaulted if not _WIN32 |
_WIN32 | compile for windows platform |
__ARM__ | compile targeting arm (some assembly otherwise available is replaced |
__MAC__ | comppile targeting Mac; minor differences in SockAddr structure |
__NO_LOGGING__ | Disable any internal logging; compiles to (0); |
__64__ | This should have a good default set; but this sets 64 bit platform target |
__ANDROID__ | certain changes for android system |
The default allocator is malloc/free. There is, additionally, an option added to disable mmap. There is a custom allocator which offers additonal protection on blocks, including scanning all blocks for over/underflow. A list of all blocks may be dumped (see memory document above), options can be enabled either way to allow memory allocation logging. This tracks back to the original sources' (if _DEBUG or _DEBUG_INFO are defined) file and line number.
This uses a single locking primitive that's a lock: xchg
; if compiled with GCC prefers the comipler intrinsics for these
operations. Uses windows InterlockedExchanged()
function.
PLIST, PLINKQUEUE are strongly threadsafe by default. All other containers are also thread safe, but are not worthy of comment. The actual point is that PLIST and PLINKQUEUE types are optimally thread safe even when interacting on the same list or queue.
To Be Documented.
The default options for the above are conservative, but there may be more suitable options available at the low levels.