Architecture modulaire Software

——————–

CLASSPATH : Notre solution SOFTWARE “Prête à customiser”

Nexvision propose un panel de briques logicielles régulièrement mises à jour en fonction de l’avancée de notre R&D à travers son ClassPath.

Description des fonctions ClassPath

1. Modules de base

(Toutes les autres fonctions dépendent de ces modules de base)

  • Tampons circulaires : Un tampon simple à deux têtes et de taille limitée AKA tampon circulaire/anneau
  • HashTable : Une table de hachage basée sur une politique et hautement optimisée qui supporte également une interface itérative.
  • SizeLimitedQueue : Une file d’attente spécialisée multithread avec des événements vides et pleins.
  • Queue : Une file d’attente spécialisée multithread de taille illimitée avec des événements vides
  • Array : Un tableau de maintien de l’ordre simple et hautement optimisé pour le stockage d’objets de données simples et constructibles par copie.
  • IndexList : Un tableau de maintien de l’ordre basé sur des pointeurs, hautement optimisé, pour stocker n’importe quel objet.
  • ChainedList : Une liste à double lien hautement optimisée
  • Algorithmes : Recherche et tri des conteneurs ci-dessus avec l’implémentation la plus efficace possible.
  • FIFO/LIFO : Une classe de pile efficace avec un composant FIFO ou LIFO.
  • Bitstream : Une pile spécialisée dans le bitstream qui met en mémoire tampon un bitstream et fournit une interface pratique pour en extraire des bits, en appliquant éventuellement un traitement (décryptage).
  • UTF-8 String : Une classe de chaîne spécialisée UTF-8 très performante (avec RegEx, interface Fluent, conversion de type, conversion sémantique, etc.)
  • Unicode String : Une classe de chaîne simple basée sur wchar_t qui peut convertir vers/depuis la classe de chaîne UTF-8.
  • ReadOnly String : Une classe en lecture seule très efficace pour l’analyse syntaxique avec une interface fluide.
  • StringArrays : Une interface de type tableau pour les chaînes de caractères, avec division et jonction à la Python.
  • BoyerMoore : Une classe de recherche de texte utilisant BoyerMoore/TurboBoyerMoore pour les textes inconnus.
  • TernarySearchTree : Un arbre de recherche de chaînes très efficace O(log N) pour les dictionnaires avec des fonctions de recherche approximatives (Levenshtein, Hamming, etc.)
  • AVL : Un arbre binaire auto-équilibré où les opérations sont toutes O(log N)
  • NTree : Un arbre hiérarchique avec un nombre quelconque d’enfants par nœud. Utilisé dans l’implémentation de DOM
  • Rtree : Une base d’arbre structurelle pour le stockage de systèmes d’information géographique.
  • Zlib : Compresseur et décompresseur basé sur Zlib
  • Gzip : compresseur et décompresseur basé sur Gzip
  • EBSC : compresseur et décompresseur basé sur BSC (BSC se comporte plus rapidement et mieux que LZMA)
1.6.1 Algorithmes asymétriques
  • RSA : Une implémentation RSA mathématiquement correcte (pas d’optimisations)
  • DSA : Une implémentation DSA mathématiquement correcte (pas d’optimisations)
  • OAEP PKCS : Implémentation OAEP pour les messages de remplissage
  • OSSL_RSA : Implémentation RSA qui utilise la bibliothèque OpenSSL du système
  • OSSL_DSA : Implémentation DSA qui utilise la bibliothèque OpenSSL du système
  • OSSL_RSASign : Implémentation de la signature RSA qui utilise la bibliothèque OpenSSL du système
  • OSSL_ECIES : Cryptographie asymétrique basée sur les courbes elliptiques utilisant la bibliothèque OpenSSL du système
  • OSSL_ECDSA : Implémentation de la courbe elliptique DSA utilisant la bibliothèque OpenSSL du système
  • OSSL_ECDH : Implémentation de la courbe elliptique Diffie Hellman pour l’échange de secret qui utilise la bibliothèque OpenSSL du système.
1.6.2 Algorithmes symétriques
  • AES : Une implémentation mathématiquement correcte d’AES (implémentation du code officiel)
  • OSSL_AES : Une primitive AES utilisant la bibliothèque OpenSSL du système
1.6.3 Hachage
  • Adler32 : Somme de contrôle Adler32 qui supporte également l’interface de somme de contrôle roulante
  • CRC16/CRC32 : algorithme CRC classique
  • MD5 : algorithme classique de hachage MD5
  • SHA1/SHA256 : fonctions de hachage SHA (160 bits pour SHA1, 256 pour SHA256)
  • HMAC : Une classe HMAC basée sur un modèle qui peut HMAC avec n’importe quelle primitive de hachage.
  • KDF/PBKDF1/PBKDF2 : fonctions de dérivation de clés (basées sur des mots de passe) qui peuvent utiliser n’importe quelle primitive de hachage.
1.6.4 Aléatoire
  • MersenneTwister : Un générateur pseudo-aléatoire basé sur MersenneTwister, collectant l’entropie réelle de l’analyseur de matériel.
1.7.1 InputStream
  • Les flux d’entrée fournissent une interface abstraite et commune pour gérer tous les types de données sources.
  • ForwardInputStream : utilisé pour la classe de flux enveloppante
  • RangeInputStream : un flux d’entrée avec limiteur de portée
  • StdInStream : flux basé sur le descripteur de fichier d’entrée standard (STDIN)
  • LineBasedInputStream : Un wrapper qui permet de lire un flux d’entrée ligne par ligne
  • InputFileStream : Un flux d’entrée dont la source est un fichier
  • InputStringStream : Un flux d’entrée dont la source est une chaîne de caractères
  • MemoryBlockStream : Un flux d’entrée réalisé à partir d’un tampon mémoire pré-alloué
  • MemoryBufferedInputStream : Un wrapper de flux d’entrée qui lit complètement le flux d’entrée donné dans un tampon de mémoire pour la mise en cache.
    SuccessiveStream : Un flux d’entrée qui lit successivement deux flux d’entrée.
  • Base64InputStream : Un flux d’entrée qui décode les données Base64 à la volée
  • AESInputStream : Un flux d’entrée qui décode à la volée des données cryptées AES
  • SocketInputStream : Un flux d’entrée qui lit à partir d’une socket
  • BufferedInputStream : Un flux d’entrée qui lit le flux d’entrée donné bloc par bloc
  • DecompressInputStream : Un flux d’entrée qui décompresse les données à la volée.
1.7.2 OutputStream
  • Les flux de sortie fournissent une interface abstraite et commune pour gérer tous les types de données sources.
  • OutputFileStream : Un flux de sortie qui écrit dans un fichier
  • OutputStringStream : Un flux de sortie qui remplit une chaîne de caractères
  • OutputMemStream : Un flux de sortie qui remplit un MemoryBlock
  • MemoryBlockOutStream : Un flux de sortie qui remplit un tampon mémoire pré-alloué
  • MemoryBufferedOutputStream : Un flux de sortie qui remplit un tampon mémoire et écrit ensuite dans le flux de sortie donné.
  • NullOutputStream : Un flux de sortie qui garde la trace de la quantité écrite, mais n’écrit rien.
    TeeStream : Un flux de sortie qui duplique son action sur deux flux de sortie.
  • Base64OutputStream : Un flux de sortie qui encode en Base64 à la volée
  • AESOutputStream : Un flux de sortie qui encode à la volée des données cryptées en AES
  • HashStream : Un flux de sortie qui calcule un Hash à la volée tout en écrivant dans un flux de sortie.
    SocketOutputStream : Un flux de sortie qui écrit sur une socket.
  • CompressOutputStream : Un flux de sortie qui compresse des données à la volée
  • HeaderBodyStream : Un flux de sortie basé sur une mémoire tampon pour un en-tête de taille fixe et un flux de sortie pour les données, qui permet d’écrire hors temps dans l’en-tête après que les données aient été écrites.

1.8.1 Cartes de Hilbert : une zone 2D à une seule coordonnée 1D de longueur variable
1.8.2 BoundingBox/FlatRectangles/Point : primitives de base à N dimensions
1.8.3 Rtree : structure de stockage géographique spécialisée efficace
1.8.4 LongNumber : Nombre de précision illimitée

1.9.1 Config : Un objet de valeur de configuration automatique persistant avec une interface transparente

1.10.1 Abstraction de la base de données : L’implémentation de la base de données est un système très innovant où des objets C++ standard sont utilisés et synchronisés automatiquement dans la base de données.
1.10.2 SQLite : Un pilote de base de données pour SQLite3
1.10.3 MySQL : Un pilote de base de données pour MySQL
1.10.4 Interface basée sur les requêtes : une construction d’instructions basée sur la compilation avec des instructions préparées automatiques pour une utilisation sûre de la base de données.
1.10.5 Contraintes : Une vue basée sur les contraintes de la base de données qui se synchronise automatiquement.

1.11.1 Date/InternationalData : Une interface commune pour l’analyse de la date, la conversion dans différents calendriers et l’émission.
1.11.2 Time/Duration : Une interface commune pour l’analyse du temps, la conversion à partir de différents fuseaux horaires (heure locale, y compris la cohérence de l’heure d’été et de l’heure d’hiver).
1.11.3 Chrono : Un Chrono très précis.
1.11.4 ScopeProfiler : Un profileur basé sur le scope qui permet de profiler le code par fonction / par scope avec et sans accumulation.

1.12.1 Thread : une classe de threads commune à toutes les plates-formes, avec son propre support de variables locales, le vidage de pile, et bien d’autres fonctionnalités.
1.12.2 Lock/Event/RWLock : primitive de synchronisation de base (verrouillage de section de code partagé, mécanisme d’événement, verrous de lecture/écriture).
1.12.3 Classes atomiques : classes atomiques qui utilisent les fonctions du compilateur C++ si elles sont disponibles, sinon elles utilisent par défaut les fonctions intrinsèques du compilateur, et enfin les fonctions du système d’exploitation.
1.12.4 Jobs : Un planificateur basé sur les jobs qui s’exécute dans son propre thread.
1.12.5 AsyncThread : primitive asynchrone  » call me later  » facile à utiliser
1.12.6 TimerThread : Un thread d’ordonnancement basé sur le temps avec des callbacks

1.13.1 XML Parser : L’un des analyseurs XML les plus rapides du marché
1.13.2 Xpath : Un moteur de traitement Xpath complet
1.13.3 FastExtract : Extraction d’informations à partir de XML par une recherche de base à la compilation dans un arbre XML

1.14.1 Primitives communes
  • BaseAddress/IPV4/IPV6/URL/UDT : fournit une interface commune et spécifique à une classe pour la manipulation des adresses de réseau avec un support complet pour l’interrogation des tables de routage, ARP, DNS, etc.
  • BaseSocket/BerkeleySocket/SSLSocket : fournit une interface commune pour les fonctions de socket réseau avec une interface sûre et facile à utiliser.
  • BaseConnection/Stream/PseudoStream/Datagrame : Supprime les différences entre les sockets sous-jacents pour se concentrer sur les solutions applicatives.
  • Détection : Détecter les appareils sur le réseau en utilisant UPNP, NATPMP, MulticastDNS, Multicast broadcasting.
  • NAT : techniques de passage NAT
  • Pools Cross platform : pool de sockets polling system qui utilise les meilleures primitives du système d’exploitation.
1.14.2 Clients
  • HTTP : Un client compatible HTTP1.0/1.1 avec une prise en charge complète des fonctionnalités, y compris la gestion manuelle et automatique des sessions.
  • AsMuchAsYouCan : Un client de preuve de concept qui lit autant que possible.
  • Authentification : Un client basé sur l’authentification
  • FTP : Un client FTP
  • PTZ : Un client d’interface abstraite pan tilt zoom pour caméra IP avec fonctionnalité PTZ
  • RTSP/RTP : Un client compatible avec le serveur de streaming en temps réel avec une interface propre et facile à comprendre.
  • SMTP : Un client SMTP pour l’envoi de courriels
    SDP : Un client compatible avec le protocole de description de session
  • MIME : Un client compatible avec l’analyse MIME
  • SOAP : Un client compatible SOAP pour se connecter aux services SOAP
  • Websocket : Un client compatible avec websocket
  • OnVIF : Un client compatible avec OnVIF
  • Fetcher : Une abstraction sur le client de récupération de flux (peut être via HTTP/Multipart, RTSP/RTP, RTPoverRTSP, File, etc…)
  • Enregistreur : Une abstraction sur les capacités d’enregistrement de flux (vers des fichiers .MP4/.MJPG/.NVF)
1.14.3 Serveurs

Tous les serveurs supportent les interfaces monothread (via polling) et multithread.

  • HTTP : un serveur HTTP compliant complet
    EventHTTP : un serveur HTTP basé sur les événements
  • Websocket : Un serveur compatible avec Websocket qui peut réutiliser le client d’un serveur EventHTTP.
    WSDiscovery : Un serveur WS-Discovery qui diffuse le service sur le réseau.
  • RTSP/RTP : Un serveur compatible RTSP
  • SDP : Un service compatible avec le protocole de description de session pour le serveur RTSP.

1.15.1 HTMLParser : Un parseur très rapide compatible avec HTML4 qui convertit et corrige les mauvais documents HTML en documents XML valides ou en arbres DOM.
1.15.2 DOM : Une interface compatible avec DOM 2.0
1.15.3 XMLSession : Un moteur de traitement XML qui peut simuler la navigation d’un utilisateur sur un site web donné, l’affichage de formulaires et l’extraction de données.

1.16.1 H264/MPEG4/MJPEG : Démultiplicateur pour ces codecs utilisés dans les clients et serveurs de streaming.
1.16.2 AAC/MP3 : Démultiplicateur pour ces codecs utilisés dans les clients et serveurs de streaming.
1.16.3 MPEG4 layer 2 (file parser) : Un analyseur d’archives MPEG4
1.16.4 Bitratestats : Statistiques de débit.

1.17.1 Scanner : Un scanner pour la configuration matérielle (extraction de nombreuses informations, comme l’EDID du moniteur, le numéro de série du disque dur, etc.)
1.17.2 Plate-forme : Une implémentation multiplateforme de fonctionnalités spécifiques à la plateforme (comme le chargement dynamique de bibliothèques, etc…)

1.18.1 Base16/Base64/Base85 : Un encodeur et décodeur hexadécimal, base64 et base85 (non compatible avec le format base85 d’Adobe).

1.19.1 Info : Un extracteur d’informations sur les fichiers très facile à utiliser (comme les permissions, la date et l’heure, le contenu, le nombre de liens, etc.)
1.19.2 Scanner : Un scanner de répertoire très rapide, basé sur des callbacks, avec des capacités de filtrage.
1.19.3 DirectoryIteractor : Un itérateur pour énumérer les fichiers dans un répertoire
1.19.4 Async/Stream/Pool : Une classe de lecture et d’écriture de fichiers asynchrone et en bloc avec des capacités de pool
1.19.5 Metadata extractor : Un extracteur de métadonnées de fichiers qui peut être combiné avec FFMPEG pour obtenir des informations supplémentaires sur les fichiers.

1.20.1 Zip : Une classe de création et de décompression d’archives capable de gérer le format zip.
1.20.2 PDF : Un format de lecture d’objets PDF
1.20.3 EPUB : Une classe de lecture de fichiers EPUB

1.21.1 JPEG : Un décodeur JPEG de taille optimisée
1.21.2 PNG : Un décodeur et un encodeur PNG de taille optimisée
1.22.3 PPM/PBM/PGM : Un décodeur et encodeur Netpbm
1.22.4 Image : Une classe de traitement d’image très simple et rapide
1.22.5 Couleur : Une classe de traitement des couleurs capable de traiter plusieurs espaces colorimétriques

1.22.1 Console : Une implémentation de l’interface logger pour l’enregistrement en mode console.
1.22.2 File : journalisation basée sur les fichiers
1.22.3 Structure file : enregistrement basé sur un fichier avec une structure permettant de le rechercher facilement.
1.22.4 Debug : Un logging basé sur une console de débogage

1.23.1 Constant : Un système d’unités basé sur un modèle pour les équations mathématiques et physiques vérifiées en temps réel.
1.23.2 Unités : Un système d’unités basé sur un modèle pour les équations mathématiques et physiques vérifiées en temps réel.
1.23.3 Valeur : Un système d’unités basé sur un modèle pour les équations mathématiques et physiques vérifiées en temps réel.
1.23.4 Expression : Un analyseur d’expressions mathématiques avec des fonctions définissables par la portée.
1.23.5 Variant : Une classe de variante à sécurité de type réelle avec un stockage élégant du tas/de la pile basé sur le type stocké.
1.23.6 JSON : Un analyseur et un rédacteur compatibles avec JSON
1.23.7 DynObj : Une classe d’objet dynamique avec une interface élégante qui permet de modifier le code en cours d’exécution.
1.23.8 UUID : Une classe d’analyse syntaxique compatible avec UUID
1.23.9 UniversalTypeIdentifier : Un registre pour les types afin de permettre une conversion dynamique des types basée sur une implémentation pseudo XML

1.24.1 Licences / Gestion des droits numériques : Algorithme de mise en œuvre du DRM

1.25.1 MemoryBlock : Une classe de bloc mémoire qui gère l’encodage, la croissance, la réduction, etc.
1.25.2 ScopePtr : Une classe de pointeur basée sur le champ d’application.
1.25.3 OwnPtr : Une classe de pointeur modifiable par le propriétaire
1.25.4 RefPtr : Une classe de pointeur de compteur de référence (obsolète)
1.25.5 Dump : Un dumper hexadécimal pour le débogage

1.26.1 breakUnderDebugger : Une simple fonction d’interruption sous débogueur si le code est exécuté sous un débogueur.
1.26.2 Callstack dump : Une fonction de vidage de la pile d’appels
1.26.3 TypeOf : Retourne une représentation textuelle d’un type, disponible même lorsque le code est compilé sans RTTI
1.26.4 Assert / CompileTimeAssert : Vérification d’assertions basée sur le runtime et le compiletime

1.27.1 Calendriers : De nombreux calendriers différents sont pris en charge pour la conversion de la date et de l’heure.
1.27.2 Traduire : Une macro et une fonction de traduction très optimisées pour la conversion de chaînes de caractères basées sur des ressources de fichiers externes.

1.28.1 UnitTest : Un mécanisme de test très simple pour toutes les fonctionnalités décrites ci-dessus.
1.28.2 False : Une capture de fichier et de ligne basée sur la compilation pour l’échec des tests.
1.28.3 MakeUnitTest : Une macro pratique pour générer automatiquement des vecteurs de test basés sur les drapeaux de compilation

Vous pouvez également consulter notre Architecture modulaire HW et notre Librairie IP Core FPGA.