Flots en mémoire

Les flots d’entrées-sorties ne concernent pas que les périphériques. Parfois, il peut être utile de les utiliser en mémoire. Ainsi, si l’on souhaite avoir une chaîne de caractères représentant la valeur d’un entier, il suffit de l’écrire dans un flot en mémoire, puis de lire ce flot comme une chaîne.

Les classes strstreambase, istrstream, ostrstream et strstream sont les homologues en mémoire de ios, istream, ostream et iostream. Elles sont définies dans <strstrea.h> ; vous devez donc inclure ce fichier dans votre programme (cela inclut automatiquement <iostream.h>).

Ces classes utilisent le type de tampon spécial strstreambuf. La classe de base sert uniquement pour les dérivations des trois autres, qui ont l’allure suivante :

class istrstream : public strstreambase,  public istream {     public:     istrstream(char*;;     istrstream(char*, int);     ~istrstream();};class ostrstream : public strstreambase,  public ostream {     public:     ostrstream(char*, int, int = ios::out);     ostrstream();     ~ostrstream();     char* str();     int pcount();};class strstream : public strstreambase,  public iostream {     public:     strstream();     strstream(char*, int, int);     ~strstream();     char* str();};

Les constructeurs par défaut initialisent les instances sur des chaînes vides. Les autres constructeurs permettent de donner un tampon de mémoire et une taille maximale aux instances ; le troisième paramètre de celui de ostrstream et strstream est le mode d’ouverture.

Les méthodes str donnent simplement le début du tampon mémoire utilisé. La méthode pcount de ostrstream indique le nombre de caractères en attente dans le tampon.

Lorsque les tampons sont créés par les instances (appel des constructeurs par défaut), elles les gèrent entièrement et les augmentent à chaque écriture ; ils sont alors détruits par le destructeur.

Voici par exemple une fonction qui renvoie la chaîne de caractères correspondant à l’écriture d’un nombre à virgule flottante (avec un paramètre optionnel pour le nombre de décimales souhaitées), et une fonction inverse qui renvoie la valeur stockée dans une chaîne :

char *chainedouble(double d, int precis  = -1){     static char tampon[30];     ostrstream os(tampon, 30);     if (precis >= 0) os.precision(precis);     os << d;     return tampon;}double valeurdouble(char *s){     double d;     istrstream is(s);     is >> d;     return d;}

Les classes strstreambase, istrstream, ostrstream et strstream occupent respectivement 68, 74, 72 et 78 octets en mémoire.

Précédent Précédent Sommaire Sommaire Suivant Suivant