
Usine de pointeurs persistants
Remplacez tous les pointeurs par ce pointeur, vos données deviennent instantanément persistantes (C++ Persistence). La source totale est inférieure à 100 Ko, la version binaire 35 Ko.
L’usine de pointeurs persistants est un pointeur intelligent de classe unique qui rend les objets persistants automatiquement. Il convient à la construction de bases de données de toute taille avec pagination des données en mémoire (transactions) contrôlées individuellement par classe.
Les fonctionnalités incluent:
- Stockage des données sur disque et pagination des transactions en mémoire
- Pointeur intelligent qui rend les structures de données persistantes
- Stockage primaire sur disque paginé en mémoire à la demande
- Modèles C++ purs avec un fichier disque par classe
- Stockage avec un binaire de 35 Ko.
Usine de pointeurs persistants – Fonctionnalités
Ce produit vous offre une classe de pointeur intelligent, PersistPtr
Si vous remplacez tous les pointeurs par ce pointeur, vos données deviennent instantanément persistantes. C’est une implémentation simple, rapide et élégante. La source totale est inférieure à 100 Ko, la version binaire 35 Ko. Il est également simple à utiliser, toute la documentation se compose uniquement de 10 pages.
Les objets et tableaux de chaque classe sont stockés dans un fichier disque, et paginés en mémoire à la demande. Il n’y a pas de limite sur la taille de vos données, sauf pour l’espace disponible sur votre disque dur. Vous contrôlez la taille d’une page et le nombre de pages que vous souhaitez en mémoire, comme vous pouvez le voir dans l’exemple de code suivant :
#include « factory.h » // définition du pointeur intelligent class A { PersistClass(A); // enregistre la classe A comme persistante int a; public: void prt(){cout << a << "
« ;} // … }; class B { PersistClass(B); // enregistre la classe B comme persistante PersistPtr p; // équivalent de A *p; public: void prt(){if(p==NULL)return; else p->prt()
Notez que lors du démarrage du Pager (stockage sur disque), vous devez spécifier la taille d’une page et combien de pages seront en mémoire. Vous pouvez également fournir une estimation de l’espace total requis pour cette classe. Fournir une bonne estimation n’est pas nécessaire, mais cela aide à éviter une croissance progressive et des réallocations répétées des structures de données internes. Notez également que la suppression des objets doit être effectuée différemment de ce qui est attendu ; l’opérateur delete() ne peut pas être utilisé, car pa et pb sont des objets, pas des pointeurs. De plus, vous ne pouvez pas utiliser delete &pb pour supprimer l’objet de type B, car il n’y aurait alors aucune distinction entre la destruction de B et la destruction de PersistPtr lui-même.
L’appel pa.freeObj() fournit essentiellement le même service que vous attendriez de l’appel (syntaxiquement incorrect) : delete pa; Voici ce qui se passe en arrière-plan : chaque classe conserve une liste des objets libres, et si le fichier de données peut être tronqué, ces objets sont libérés.
Les données sont conservées dans les fichiers *.ppf, donc après l’exécution du fragment de code ci-dessus, vous aurez sur votre disque les fichiers A.ppf et B.ppf. Lors de l’exécution du même programme à nouveau, startPager() ouvre à nouveau le même fichier. Vous pouvez choisir les mêmes paramètres de pagination ou complètement différents.