forked from wc-duck/datalibrary
-
Notifications
You must be signed in to change notification settings - Fork 1
Open Source Data Library for data serialization.
License
matricks/datalibrary
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
# THE DATA LIBRARY. ## About: The data library, or DL for short, is a library for serialization of data. ## Goals: load = memcpy + with plus-menu guaratee complete data when built error-checks platform specific data ( convertion between platforms avaliable on all platforms ) ## Parts: generated headers: c/c# type library ( tlc ): file used by dl itself to load/store/pack/unpack types. c-library: heart of the library. dl_tlc: type-library-compiler dl_pack: tool to pack/unpack/convert instances. bindings: python / C# ## Suported types: int8, int16, int32, int64 - signed integer 8 - 64 bits uint8, uint16, uint32, uint64 - unsigned integer 8 - 64 bits bitfield - unsigned integer with specified amount of bits ( uint32 example : 2; in c ) fp32, fp64 - 32 bit and 64 bit floating point value ( float/double in c ) string - ascii string inline-array - fixed size array of any type ( defined by dl ( int/uint etc ) or userdefined ) array - variable size array of any type ( defined by dl ( int/uint etc ) or userdefined ) pointer - pointer to any user-defined type planned for the future (maybe) : utf8 - utf8 encoded unicode-string utf16 - utf16 encoded unicode-string utf32 - utf32 encoded unicode-string ## TLD ( Type Library Definition ) format: "module"-section "enums"-section "types"-section "type" "members"-array ## Text data format: "type"-section "data"-section "subdata"-section ## Examples: The easiest way to work with dl is through the util-functions exposed in dl_util.h. These functions will solve all things like file-read/write, endianness- and ptr-size conversions etc for you. ### Preparation structs are defined in a typelibrary like this: { "module" : "example", "types" : { "my_type" : { "members" : [ { "name" : "integer", "type" : "uint32" }, { "name" : "string", "type" : "string" }, { "name" : "array", "type" : "uint16[]" } ] } } } Save above code to example.tld and run this through dl_tlc.py to generate c-headers and a typelibrary-definition-file, we will call it example.bin. python dl_tlc -c example.h -o example.bin example.tld ### Create dl-context and load a type-library: #include <dl/dl.h> dl_ctx_t create_dl_ctx() { // create and load context dl_ctx_t dl_ctx; dl_create_params_t create_params; DL_CREATE_PARAMS_SET_DEFAULT( create_params ); dl_context_create( &dl_ctx, &create_params ); // load typelibrary unsigned char* lib_data = 0x0; unsigned int lib_data_size = 0; read_from_file( "example.bin", &lib_data, &lib_data_size ); dl_context_load_type_library( dl_ctx, lib_data, lib_data_size ); return dl_ctx; } ### Store instance to file #include <dl/dl_util.h> #include "example.h" void store_me( dl_ctx_t dl_ctx ) { example e; e.integer = 1337; e.string = "I like cowbells!"; uint16 arr[] = { 1, 2, 3, 4, 5, 6 }; e.array.data = arr; e.array.count = 6; dl_util_store_to_file( dl_ctx, example::TYPE_ID, // type identifier for example-type "path/to/store/to.file", // file to store to DL_UTIL_FILE_TYPE_BINARY, // store as binary file DL_ENDIAN_HOST, // store with endian of this system sizeof(void*), // store with pointer-size of this system &e ); // instance to store } ### Load instance from file #include <dl/dl_util.h> #include "example.h" void store_me( dl_ctx_t dl_ctx ) { example* e; dl_util_load_from_file( dl_ctx, example::TYPE_ID, // type identifier for example-type "path/to/read/from.file", // file to read DL_UTIL_FILE_TYPE_AUTO, // autodetect if file is binary or text (void**)&e, // instance will be returned here 0x0 ); printf( "e->integer = %u\n", e->integer ); printf( "e->string = %s\n", e->string ); for( unsigned int i = 0; i < e->array.count; ++i ) printf( "e->array[%u] = %u\n", i, e->array.data[i] ); } For more in deapth examples, see EXAMPLE-file
About
Open Source Data Library for data serialization.
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published