begin process at 2012 02 09 07:37:50
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > CLASSE TEMPLATE TABLEAUX SÉCURISÉS À ALLOCATIONS AUTOMATIQUES

CLASSE TEMPLATE TABLEAUX SÉCURISÉS À ALLOCATIONS AUTOMATIQUES


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Classé sous :tableau, template, vector Niveau :Expert Date de création :30/06/2002 Date de mise à jour :05/08/2006 11:59:25 Vu / téléchargé :3 969 / 427

Auteur : Lightness1024!

Ecrire un message privé
Site perso
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

(Ce code est uniquement C++ et sous licence CeCILL)
SecureArray est une classe template qui remplace std::vector pour ceux qui ne peuvent pas voir la STL en peinture :)
Son code à été largement testée, sa force est d'être stable et d'éviter les fuites mémoires grace aux mécanismes de destruction du C++.

La gestion des erreurs se fait grâce aux exceptions.

L'avantage est d'éviter tout seg fault, et d'éviter les allocations manuelles.
La classe est basée sur new[] / new(placement) et delete[]

Source

  • // le ZIP contient la documentation
  • // toutes les fonctions sont documentées, vous devez copier le module de la classe dans
  • // votre projet pour l'utiliser.
  • // cette classe peut même être utile au debuging de programmes importés du C.
  • // si par exemple vous avez:
  • int main(void)
  • {
  • int* p;
  • p = malloc(sizeof(int) * 40);
  • ...
  • p[var] = valeur; // var peut prendre une valeur causant un seg fault si < 0 ou > 39
  • ...
  • free(p);
  • return 0;
  • }
  • // remplacez les lignes de déclaration et d'allocation par:
  • int main(void)
  • {
  • SecureArray< int > p;
  • ...
  • p[var] = valeur; // si var prend une mauvaise valeur, une exception est lancée
  • ...
  • //free(p); inutile, car l'objet p est automatiquement détruit avec le return
  • return 0;
  • }
// le ZIP contient la documentation
// toutes les fonctions sont documentées, vous devez copier le module de la classe dans
// votre projet pour l'utiliser.
// cette classe peut même être utile au debuging de programmes importés du C.
// si par exemple vous avez:
int main(void)
{
	int* p;
	p = malloc(sizeof(int) * 40);
	...
	p[var] = valeur;   // var peut prendre une valeur causant un seg fault si < 0 ou > 39
	...
	free(p);
	return 0;
}
// remplacez les lignes de déclaration et d'allocation par:
int main(void)
{
	SecureArray< int > p;
	...
	p[var] = valeur;   // si var prend une mauvaise valeur, une exception est lancée
	...
	//free(p);  inutile, car l'objet p est automatiquement détruit avec le return
	return 0;
}

 Conclusion

J'ai récemment refait toute la documentation en HTML :)
j'y ai passé du temps donc lisez la ca vous éviteras de vous perdre dans le .h

le zip contient un répertoire avec un exemple de projet MS Visual Studio 2003.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

15 août 2005 17:46:53 :
J'avais certaines lenteurs à utiliser Add() et Remove() j'ai donc implémenter un système d'utilisation de mémoire de réserve en extra pour accélérer les opérations de redimensionnement et d'ajout/insertion d'élements. Mon programme s'executait 30 fois plus vite ensuite. Tout à été documenté :)
15 août 2005 17:49:16 :
J'avais certaines lenteurs à utiliser Add() et Remove() j'ai donc implémenter un système d'utilisation de mémoire de réserve en extra pour accélérer les opérations de redimensionnement et d'ajout/insertion d'élements. Mon programme s'executait 30 fois plus vite ensuite. Tout à été documenté :) J'ai rendu la classe compatible ANSI car auparavant elle utilisait des fonctions de la SDK Win32, ce qui n'est plus le cas.
15 août 2005 17:49:34 :
J'avais certaines lenteurs à utiliser Add() et Remove() j'ai donc implémenter un système d'utilisation de mémoire de réserve en extra pour accélérer les opérations de redimensionnement et d'ajout/insertion d'élements. Mon programme s'executait 30 fois plus vite ensuite. Tout à été documenté :) J'ai rendu la classe compatible ANSI car auparavant elle utilisait des fonctions de la SDK Win32, ce qui n'est plus le cas.
15 août 2005 17:49:53 :
J'avais certaines lenteurs à utiliser Add() et Remove() j'ai donc implémenter un système d'utilisation de mémoire de réserve en extra pour accélérer les opérations de redimensionnement et d'ajout/insertion d'élements. Mon programme s'executait 30 fois plus vite ensuite. Tout à été documenté :) J'ai rendu la classe compatible ANSI car auparavant elle utilisait des fonctions de la SDK Win32, ce qui n'est plus le cas.
15 août 2005 17:53:55 :
J'avais certaines lenteurs à utiliser Add() et Remove() j'ai donc implémenter un système d'utilisation de mémoire de réserve en extra pour accélérer les opérations de redimensionnement et d'ajout/insertion d'élements. Mon programme s'executait 30 fois plus vite ensuite. Tout à été documenté :) J'ai rendu la classe compatible ANSI car auparavant elle utilisait des fonctions de la SDK Win32, ce qui n'est plus le cas.
15 août 2005 17:55:01 :
J'avais certaines lenteurs à utiliser Add() et Remove() j'ai donc implémenter un système d'utilisation de mémoire de réserve en extra pour accélérer les opérations de redimensionnement et d'ajout/insertion d'élements. Mon programme s'executait 30 fois plus vite ensuite. Tout à été documenté :) J'ai rendu la classe compatible ANSI car auparavant elle utilisait des fonctions de la SDK Win32, ce qui n'est plus le cas.
15 août 2005 17:56:14 :
J'avais certaines lenteurs à utiliser Add() et Remove() j'ai donc implémenter un système d'utilisation de mémoire de réserve en extra pour accélérer les opérations de redimensionnement et d'ajout/insertion d'élements. Mon programme s'executait 30 fois plus vite ensuite. Tout à été documenté :) J'ai rendu la classe compatible ANSI car auparavant elle utilisait des fonctions de la SDK Win32, ce qui n'est plus le cas. j'ai passé le code sous licence CeCILL plutot que sous simple droit d'auteur.
15 août 2005 17:56:38 :
J'avais certaines lenteurs à utiliser Add() et Remove() j'ai donc implémenter un système d'utilisation de mémoire de réserve en extra pour accélérer les opérations de redimensionnement et d'ajout/insertion d'élements. Mon programme s'executait 30 fois plus vite ensuite. Tout à été documenté :) J'ai rendu la classe compatible ANSI car auparavant elle utilisait des fonctions de la SDK Win32, ce qui n'est plus le cas. j'ai passé le code sous licence CeCILL plutot que sous simple droit d'auteur.
15 août 2005 17:59:00 :
J'avais certaines lenteurs à utiliser Add() et Remove() j'ai donc implémenter un système d'utilisation de mémoire de réserve en extra pour accélérer les opérations de redimensionnement et d'ajout/insertion d'élements. (j'ai du utiliser des appels explicite aux destructeurs et faire des placement new). Mon programme s'executait 30 fois plus vite ensuite. Tout à été documenté :) J'ai rendu la classe compatible ANSI car auparavant elle utilisait des fonctions de la SDK Win32, ce qui n'est plus le cas. j'ai passé le code sous licence CeCILL plutot que sous simple droit d'auteur.
15 août 2005 18:06:38 :
J'avais certaines lenteurs à utiliser Add() et Remove() j'ai donc implémenter un système d'utilisation de mémoire de réserve en extra pour accélérer les opérations de redimensionnement et d'ajout/insertion d'élements. (j'ai du utiliser des appels explicite aux destructeurs et faire des placement new). Mon programme s'executait 30 fois plus vite ensuite. Tout à été documenté :) J'ai rendu la classe compatible ANSI car auparavant elle utilisait des fonctions de la SDK Win32, ce qui n'est plus le cas. j'ai passé le code sous licence CeCILL plutot que sous simple droit d'auteur.
05 août 2006 11:59:25 :
mots cles

 Sources du même auteur

Source avec Zip CRYPTAGE DE TEXTE
Source avec Zip PLEIN ECRAN + AFFICHAGE DE TEXTE
Source avec Zip CHANGEMENT BASE 10 -&GT; 2
Source avec une capture SPRITES PALETISÉS EN 2D QUI SE DÉPLACENT

 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

UTILISATION DES TYPELIST EN C++ par wyden
Source avec Zip Source avec une capture RÉSOLUTION SUDOKU (9X9) PAR BACKTRACKING RÉCURSIF INTELLIGEN... par Gallien69
Source avec Zip POINTEUR INTELLIGENT par DrMckey
Source avec Zip TEMPLATES C/C++ POUR VS 2010 par BruNews
TABLEAU 3D GÉNÉRIQUE par xkamen

Commentaires et avis

Commentaire de pepet le 21/08/2002 12:02:46

Ce code est tres bien et c sur kil est bien plus lisible ke l'ete le mien mais est ce bien toi ki la ecrit? ca c moins sur!
En tout cas le fait d'utiliser des INT pour gerer le tableau n'est peut etre pas recommender car un int a une valeur max de 2^8 = 32768 c ki limite grandement la taille du tableau.

j'ai mis 9/10 pour le code!

@+

Commentaire de Lightness1024! le 24/08/2002 14:11:01

j'y crois pas, tu doutes que c'est moi qui ait écrit ca ? et ben dis donc j'aurais pas pensé qu'on puisse commencer un debut de quart d'imagination a ce sujet.
evidemment que c'est moi et même à 100% voyons et si il n'y avais qu'une ligne pas de moi j'aurais respecté la propriété intellectuelle et j'aurais cité l'auteur.

deuxièmement, int 32768 ?? non pas du tout ca c'est les variables de types 16 bits qui peuvent atteindre cette limite, et d'ailleur tu as ecris 2^8 ce qui fait 256 pas 32768. la variable int prend un registre processeur et sa taille dépend donc de la machine, et depuis les 386 ces registres font 32 bits donc un int fait 32 bits donc a une valeur maximum de 2 147 483 647 ce qui n'est pas si limité que ca pour une taille de tableau étant donné que la mémoire maximum allouable est de 4GO et le plus petit type etant BYTE on peut théoriquement allouer 50% de la mémoire au minimum si on utilise le maximum du type int (mais ca ne fonctionnera jamais dans la réalité il faut utiliser plusieurs tableaux pour remplir un espace aussi immense).

par contre etant donné que j'utilise new et delete peut etre que la rapidité d'allocation sera moins puissante que ta methode realloc.

et franchement je suis déçu que tu puisse croire que je n'ait pas édité de code moi même mais je te pardonne car tu ne me connais pas, et d'un coté c'est une sorte de compliment ! :)

Commentaire de Bki le 30/08/2002 08:41:30

C'est vrai que c'est vraiment nul d'insinuer que le code n'est pas de lui... si ce n'était pas de lui, pourquoi le poster ? Tu peux douter de la plupart des codes qui sont postés ici alors. C'est par parce que le code est plus lisible que le tien qu'il faut te venger en insinuant ce genre de chose...

Commentaire de Lightness1024! le 15/08/2005 18:10:30

merci Bki :)

bon, j'ai eu quelques problemes quand j'ai fait mon ZIP (bzip2 plutot que "Deflate" ca n'a pas plu au site).
je suis donc désolé pour les 500 tentatives manquées qui ont floodées le log des mises à jour lol. pardon encore.

Commentaire de cosmobob le 17/08/2005 10:50:54

salut,
un conseil:
fais dériver ta classe OutOfRange de std::exception qui contient déja une méthode what() a surchager qui renvoie un const char* et qui décrit l'erreur. comme ca y'aurait pas besoin d'utiliser ton GetErrorStringPtr qui est vraiment pas beau !!!!

sinon c'est pas mal, mais ya t'il un gain par rapport a l'utilisation de std::vector ??

Commentaire de Lightness1024! le 17/08/2005 13:01:25

oui tu as 100% raison, c'est pas beau ma récup de chaine..
et oui tu as raison il faudrait la faire dériver de std::exception mais le but de cette classe c'etait juste de faire un conteneur totalement indépendant de la STL.
par rapport à std::vector je suis encore loin de la qualité qu'il peut fournir et je ne garanti pas non plus la compatibilité de l'interface avec les conteneurs stl (iterateurs...).

c'est juste qu'en C++ les conteneurs c'est quelque chose de tres marrant a coder, et utiliser la STL c'est se priver totalement de cette expérience, c'est pour ca que je ne l'aime pas :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

template? [ par payen ] Salut a tous,je programme actuellement une bibli de traitement d'images en C++, et j'ai un p'tit souci. En fait, j'ai cree une classe image qui contie [C++ 7(.NET)]Création d'un vector ou tableau Object [ par sfouilloux ] bjr,comment créer un tableau d'objet ou un vecteur en c++ managé sous VS.NET 2003.Merci tableau [ par ToToL ] Bonjour,j'ai un tableau créé de cette maniere :std::vector &lt;int&gt; Pos;et a un moment j'ai besion d'en créé un autre qui doit etre une copie de Po STL vector et tableau [ par cybermax62 ] j'ai une petite question sur la classe template vector. je sais que c'est possible d'initiliser un vector avec un tableau point de vue C (char[]). j'a vector de tableau à deux élément : vector <int[2]> [ par Icarius44 ] Bonjours tout le mondealors je voudrais faire &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; vector &lt;int[2]&gt;mais ca héritage d'une template classe comme vector [ par Urukai1 ] bonjourje suis un newbie en cpp, et j'ai fait beaucoup de javaje souhaite faire une classe qui herite par exemple de la classe vector&lt;T&gt; avec te tableau multidimentionnel en C++ [ par paskouaouch ] Bonjour, je souhaiterais savoir s'il ya moyen de créer des tableau en C++ de dimention n (n= 3, 4, 5 ou plus...) sans utiliser double***** tab,vector& Vector de plusieurs types [ par nisaloncaje ] Bonjour, j'aimerais créer un tableau de type vector, mais que ce tableau puisse contenir plusieurs type d'objets mais qui héritent tous d'une meme cla Tableau, vector, list ou array???? [ par eupeup ] Bonjour à tous, j'ai une interrogation par rapport à l'utilisation d'un tableau... Je dois manipuler une matrice de double et de taille fixe... Sacha Un vector résultant du tri de plusieurs vector ?? [ par WolfSpirit2a ] Bonjour !  :) J'aimerai savoir si il est possible de trier plusieurs vector (qui auraient les mêmes membres) et de récupérer un tableau ou un autre ve


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 5,632 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales