Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/ tbox Public
forked from LiveMirror/tbox

跨平台的c开发库,提供asio、stream、容器、算法、xml/json/plist解析、数据库等常用模块 http://www.tboox.org

License

Notifications You must be signed in to change notification settings

Fdmiao/tbox

Repository files navigation

The Treasure Box Library

Build Status Build status codecov Join the chat at https://gitter.im/waruqi/tboox donate

Introduction (中文)

TBOX is a glib-like cross-platform C library that is simple to use yet powerful in nature.

The project focuses on making C development easier and provides many modules (.e.g stream, asio, regex, container, algorithm ...), so that any developer can quickly pick it up and enjoy the productivity boost when developing in C language.

It supports the following platforms:

  • Windows
  • Macosx
  • Linux
  • Android
  • iOS

And it provides many compiling options using xmake:

  • Release: Disable debug information, assertion, memory checking and enable optimization.
  • Debug: Enable debug information, assertion, memory checking and disable optimization.
  • Smallest: Disable all extensional modules and enable space optimization.
  • Micro: compiling micro library (~64K) for the embed system.

If you want to know more, please refer to:

Features

The stream library

  • Supports file, data, http and socket source
  • Supports the stream filter for gzip, charset and...
  • Implements stream transfer
  • Implements the static buffer stream for parsing data
  • Supports coroutine and implements asynchronous operation

The coroutine library

  • Provides high-performance coroutine switch(refer to reports)
  • Supports arm, arm64, x86, x86_64 ..
  • Provides channel interfaces
  • Provides semaphore and lock interfaces
  • Supports io socket and stream operation in coroutine
  • Provides some io servers (http ..) using coroutine
  • Provides stackfull and stackless coroutines

The database library

  • Supports mysql and sqlite3 database and enumerates data using the iterator mode

The xml parser library

  • Supports DOM and SAX mode and Supports xpath

The serialization and deserialization library

  • Supports xml, json, bplist, xplist, binary formats

The memory library

  • Implements some memory pools for optimizing memory
  • Supports fast memory error detecting. it can detect the following types of bugs for the debug mode:
    • out-of-bounds accesses to heap and globals
    • use-after-free
    • double-free, invalid free
    • memory leaks

The container library

  • Implements hash table, single list, double list, vector, stack, queue and min/max heap. Supports iterator mode for algorithm

The algorithm library

  • Uses the iterator mode
  • Implements find, binary find and reverse find algorithm
  • Implements sort, bubble sort, quick sort, heap sort and insert sort algorithm
  • Implements count, walk items, reverse walk items, for_all and rfor_all

The network library

  • Implements dns(cached)
  • Implements ssl(openssl, polarssl, mbedtls)
  • Implements http
  • Implements cookies
  • Supports ipv4, ipv6
  • Supports coroutine

The platform library

  • Implements timer, fast and low precision timer
  • Implements atomic and atomic64 operation
  • Implements spinlock, mutex, event, semaphore, thread and thread pool
  • Implements file, socket operation
  • Implements poller using epoll, poll, select, kqueue ...
  • Implements switch context interfaces for coroutine

The charset library

  • Supports utf8, utf16, gbk, gb2312, uc2 and uc4
  • Supports big endian and little endian mode

The zip library

  • Supports gzip, zlibraw, zlib formats using the zlib library if exists
  • Implements lzsw, lz77 and rlc algorithm

The utils library

  • Implements base32, base64 encoder and decoder
  • Implements assert and trace output for the debug mode
  • Implements bits operation for parsing u8, u16, u32, u64 data

The math library

  • Implements random generator
  • Implements fast fixed-point calculation, Supports 6-bits, 16-bits, 30-bits fixed-point number

The libc library

  • Implements lightweight libc library interfaces, the interface name contains tb_xxx prefix for avoiding conflict
  • Implements strixxx strrxxx wcsixxx wcsrxxx interface extension
  • Optimizes some frequently-used interface, .e.g. memset, memcpy, strcpy ...
  • Implements memset_u16, memset_u32, memset_u64 extension interfaces

The libm library

  • Implements lightweight libm library interfaces, the interface name contains tb_xxx prefix for avoiding conflict
  • Supports float and double type

The regex library

  • Supports match and replace
  • Supports global/multiline/caseless mode
  • Uses pcre, pcre2 and posix regex modules

The hash library

  • Implements crc32, adler32, md5 and sha1 hash algorithm
  • Implements some string hash algorithms (.e.g bkdr, fnv32, fnv64, sdbm, djb2, rshash, aphash ...)
  • Implements uuid generator

The asynchronous io library (deprecated)

  • Please uses coroutine to implement asio programming

Todolist

  • Add server module
  • Reconstruction xml module
  • Add more algorithms and container
  • Optimizes more libc interfaces
  • Implements more libm interfaces and not wrap it only

Projects

Some projects using tbox:

Build

Please install xmake first: xmake

# build for the host platform
cd ./tbox
xmake
# build for the mingw platform
cd ./tbox
xmake f -p mingw --sdk=/home/mingwsdk 
xmake
# build for the iphoneos platform
cd ./tbox
xmake f -p iphoneos 
xmake
# build for the android platform
cd ./tbox
xmake f -p android --ndk=xxxxx
xmake
# build for the linux cross-platform
cd ./tbox
xmake f -p linux --sdk=/home/sdk # --toolchains=/home/sdk/bin
xmake

Example

#include "tbox/tbox.h"
int main(int argc, char** argv)
{
 // init tbox
 if (!tb_init(tb_null, tb_null)) return 0;
 // trace
 tb_trace_i("hello tbox");
 // init vector
 tb_vector_ref_t vector = tb_vector_init(0, tb_element_cstr(tb_true));
 if (vector)
 {
 // insert item
 tb_vector_insert_tail(vector, "hello");
 tb_vector_insert_tail(vector, "tbox");
 // dump all items
 tb_for_all (tb_char_t const*, cstr, vector)
 {
 // trace
 tb_trace_i("%s", cstr);
 }
 // exit vector
 tb_vector_exit(vector);
 }
 // init stream
 tb_stream_ref_t stream = tb_stream_init_from_url("http://www.xxx.com/file.txt");
 if (stream)
 {
 // open stream
 if (tb_stream_open(stream))
 {
 // read line
 tb_long_t size = 0;
 tb_char_t line[TB_STREAM_BLOCK_MAXN];
 while ((size = tb_stream_bread_line(stream, line, sizeof(line))) >= 0)
 {
 // trace
 tb_trace_i("line: %s", line);
 }
 }
 // exit stream
 tb_stream_exit(stream);
 }
 // wait some time
 getchar();
 // exit tbox
 tb_exit();
 return 0;
}

Contacts

About

跨平台的c开发库,提供asio、stream、容器、算法、xml/json/plist解析、数据库等常用模块 http://www.tboox.org

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 83.7%
  • C++ 7.4%
  • GAP 6.7%
  • Assembly 1.0%
  • Objective-C 0.8%
  • Lua 0.4%

AltStyle によって変換されたページ (->オリジナル) /