Une bibliothèque C multiplateforme de type glib
Accompagner le projet
Soutenez ce projet en devenant sponsor. Votre logo apparaîtra ici avec un lien vers votre site Web. [Devenez parrain]
Introduction (中文)
TBOX est une bibliothèque C multiplateforme de type simple à utiliser mais puissante par nature.
Le projet vise à faciliter le développement en C et fournit de nombreux modules (par exemple flux, coroutine, regex, conteneur, algorithme...), afin que tout développeur puisse rapidement le prendre en main et profiter de l'augmentation de productivité lors du développement en langage C.
Il prend en charge les plateformes suivantes : Windows, Macosx, Linux, Android, iOS, *BSD, etc.
Et il fournit de nombreuses options de compilation utilisant xmake :
- Release : désactivez les informations de débogage, l'assertion, la vérification de la mémoire et activez l'optimisation.
- Débogage : activez les informations de débogage, l'assertion, la vérification de la mémoire et désactivez l'optimisation.
- Petit : désactivez tous les modules d'extension et activez l'optimisation de l'espace.
- Micro : compilation d'une microbibliothèque (~ 64 Ko) pour le système intégré.
Si vous souhaitez en savoir plus, veuillez vous référer à : Documents, Github et Gitee
Caractéristiques
La bibliothèque de flux
- Prend en charge les sources de fichiers, de données, http et socket
- Prend en charge le filtre de flux pour gzip, charset et...
- Implémente le transfert de flux
- Implémente le flux de tampon statique pour analyser les données
- Prend en charge la coroutine et implémente un fonctionnement asynchrone
La bibliothèque de coroutines
- Fournit un commutateur de coroutine hautes performances
- Prend en charge arm, arm64, x86, x86_64 ..
- Fournit des interfaces de canal
- Fournit des interfaces de sémaphore et de verrouillage
- Prend en charge le fonctionnement du socket io et du flux dans la coroutine
- Fournit certains serveurs io (http ..) utilisant la coroutine
- Fournit des coroutines stackfull et stackless
- Prise en charge d'epoll, kqueue, poll, select et IOCP
- Prise en charge de l'attente du tuyau, du socket et du processus dans la coroutine et le poller en même temps
La bibliothèque de base de données
- Prend en charge les bases de données MySQL et SQLite3 et énumère les données en utilisant le mode itérateur
La bibliothèque d'analyseurs XML
- Prend en charge les modes DOM et SAX et prend en charge XPath
La bibliothèque de sérialisation et de désérialisation
- Prend en charge les formats xml, json, bplist, xplist et binaires
La bibliothèque de mémoire
- Implémente certains pools de mémoire pour optimiser la mémoire
- Prend en charge la détection rapide des erreurs de mémoire. il peut détecter les types de bugs suivants pour le mode débogage :
- accès hors limites au tas et aux globaux
- utilisation après libération
- double-gratuit, invalide gratuit
- fuites de mémoire
La bibliothèque de conteneurs
- Implémente une table de hachage, une liste simple, une liste double, un vecteur, une pile, une file d'attente et un tas min/max. Prend en charge le mode itérateur pour l'algorithme
La bibliothèque d'algorithmes
- Utilise le mode itérateur
- Implémente les algorithmes de recherche, de recherche binaire et de recherche inversée
- Implémente le tri, le tri à bulles, le tri rapide, le tri par tas et l'algorithme de tri par insertion
- Implémente le nombre, les éléments de marche, les éléments de marche inversés, for_all et rfor_all
La bibliothèque réseau
- Implémente DNS (mis en cache)
- Implémente SSL (openssl, polarssl, mbedtls)
- Implémente http
- Implémente des cookies
- Prend en charge IPv4, IPv6
- Prend en charge la coroutine
La bibliothèque de la plateforme
- Implémente une minuterie, une minuterie rapide et de faible précision
- Implémente les opérations atomiques et atomiques64
- Implémente spinlock, mutex, événement, sémaphore, thread et pool de threads
- Implémente un fichier, une opération de socket
- Implémente le poller en utilisant epoll, poll, select, kqueue...
- Implémente des interfaces de contexte de changement pour la coroutine
La bibliothèque de jeux de caractères
- Prend en charge utf8, utf16, gbk, gb2312, uc2 et uc4
- Prend en charge les modes big endian et little endian
La bibliothèque zip
- Prend en charge les formats gzip, zlibraw, zlib en utilisant la bibliothèque zlib si elle existe
- Implémente les algorithmes lzsw, lz77 et rlc
La bibliothèque d'utilitaires
- Implémente l'encodeur et le décodeur base32, base64
- Implémente la sortie d'assertion et de trace pour le mode débogage
- Implémente l'opération de bits pour analyser les données u8, u16, u32, u64
La bibliothèque mathématique
- Implémente un générateur aléatoire
- Implémente un calcul rapide à virgule fixe, prend en charge les nombres à virgule fixe 6 bits, 16 bits et 30 bits.
La bibliothèque libc
- Implémente des interfaces légères de la bibliothèque libc, le nom de l'interface contient le préfixe
tb_xxx
pour éviter les conflits - Implémente l'extension d'interface strixxx strrxxx wcsixxx wcsrxxx
- Optimise certaines interfaces fréquemment utilisées, .eg memset, memcpy, strcpy...
- Implémente les interfaces d'extension
memset_u16
, memset_u32
, memset_u64
La bibliothèque libm
- Implémente des interfaces de bibliothèque libm légères, le nom de l'interface contient le préfixe
tb_xxx
pour éviter les conflits - Prend en charge le type flottant et double
La bibliothèque d'expressions régulières
- Prend en charge la correspondance et le remplacement
- Prend en charge le mode global/multiligne/sans casse
- Utilise les modules regex pcre, pcre2 et posix
La bibliothèque de hachage
- Implémente les algorithmes de hachage crc32, adler32, md5 et sha1
- Implémente certains algorithmes de hachage de chaîne (.eg bkdr, fnv32, fnv64, sdbm, djb2, rshash, aphash ...)
- Implémente le générateur uuid
Projets
Quelques projets utilisant tbox :
- gbox
- vm86
- xmake
- itrace
- plus
Construire (xmake)
Veuillez d'abord installer xmake : 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 # --bin=/home/sdk/bin
$ xmake
Construire (xmake.sh)
Exemple
#include "tbox/tbox.h"
int main ( int argc , char * * argv ) {
if (! tb_init ( tb_null , tb_null )) return 0 ;
tb_vector_ref_t vector = tb_vector_init ( 0 , tb_element_str ( tb_true ));
if ( vector ) {
tb_vector_insert_tail ( vector , "hello" );
tb_vector_insert_tail ( vector , "tbox" );
tb_for_all ( tb_char_t const * , cstr , vector ) {
tb_trace_i ( "%s" , cstr );
}
tb_vector_exit ( vector );
}
tb_exit ();
return 0 ;
}
Assistance technique
Vous pouvez également envisager de nous parrainer pour bénéficier de services d'assistance technique, [Devenez sponsor]
Contacts
- Courriel : [email protected]
- Page d'accueil:tboox.org
- Communauté:/r/tboox sur reddit
- ChatRoom:Chattez sur télégramme, Chattez sur gitter
- Groupe QQ : 343118190 (complet), 662147501
- Public Wechat : tboox-os