IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

votre avis sur ce bout de code, merci [C++] [STREAM] [STD::MAP]


Sujet :

C++

  1. #1
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut votre avis sur ce bout de code, merci [C++] [STREAM] [STD::MAP]
    Bonjour, voilà, j'aimerai avoir votre avis sur un bout de code.
    l'objet est de construire une classe qui implemente un playlist (mais pas comme celle d'un lecteur multimedia, c'est pour un jeu, les pistes ont des numéro(index) et une correspondance entre le numero et le volume sonore ainsi que le son est réalisé dans un fichier texte)

    bref, la classe n'est pas complete, mais je voudrait votre avis sur le code de la fonction loadfile() qui doit lire le fichier des pistes sonore...

    au fait, ca compile bien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    // fichier playlist.h
    #if !defined(SNDPLAYLIST_FAB2009)
    #define SNDPLAYLIST_FAB2009
     
    #pragma warning (disable : 4786) //C4786 warnings VC6
     
    #include <string>
    #include <map>
    #include "sdlstuff.h"
     
    typedef struct 
    	{
    	bool loaded;
    	std::string file;
    	Uint8 vol;
    	} listitem;
     
    class playlist
    {
    public :
    	playlist(); // constructeur
    	virtual ~playlist(); // destructeur
    	bool loadfile(const std::string path,const std::string file);
    	std::string getFile(Uint8 n);
    	Uint8 getVol(Uint8 n);
    private :
    	Uint16 nb;
    	std::map<Uint8,listitem> tracklist;
    };
     
    #endif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    // fichier playlist.cpp
     
    #include "playlist.h"
    #include <fstream> //pour std::ifstream
    #include "toolbox.h" // pour Str2Uint et cleanstring
     
    playlist::playlist() :nb(0)
    {
    }
     
     
    bool playlist::loadfile(const std::string path,const std::string file ) // charge le fichier "tracklist" et construit la map.
    {
    	std::string nomfichier;
    	nomfichier=path+"/"+file;
    	std::ifstream fich( nomfichier.c_str() );
    	if (!fich || fich.fail()) return false;
     
    	std::string line;
     
    	std::string filesound;
    	Uint8 tracknr=0, volume=0;
     
    	while ( std::getline( fich, line ) )
    	{
     
    		tracknr=0;
    		volume=0;
    		filesound="";
    		if(line.size()>1 && line.substr(0,1)!="#")
    		{
    			tracknr=Str2Uint(line.substr(0,3));
    			volume=Str2Uint(line.substr(4,3));
    			filesound=cleanstring(line.substr(14,20));
     
    			listitem item;
    			item.file=filesound;
    			item.vol=volume;
    			item.loaded=false;
     
    			tracklist[tracknr]= item;
    			nb++;
    		}
     
    	}
    	fich.close();
    	return true;
    }
     
    playlist::~playlist()
    {
    	tracklist.clear();
    }
    j'ai pas encore fais les getter mais ca sera un truc assez simple comme
    getVol (uint n) { return tracklist[n].vol; }

    et le fichier de config aurra cette tête là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    001 050      intro.mid
    002 050      theme1.mid
    là où j'ai un doute, c'est sur la methode pour bien nettoyer tout ca, j'ai plus l'habitude des vecteurs avec des pointeurs (std::vector<obj*> ... comme ca c'est moi qui fais le delete des objets) mais là, c'est un struc... si je fais un tracklist.clear() dans le destructeur ca devrait suffire ?
    bref qu'en pensez-vous ?

    Merci de vos conseils...

    Ps : ha au fait ca ne servira peut être pas, mais voici deux fonction de la toolbox utilisé ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Uint16 Str2Uint( const std::string & x )
    { //avant Uint16 Str2Uint(std::string x)
        std::istringstream iss(x);
        long nombre;
        iss >> nombre;
    	return nombre;
    }
    std::string cleanstring(std::string s)
    {
    	std::string::size_type p=0;
    	std::string x(" *+\r\t\n"); // les caracteres a supprimer
    	while((p= s.find_first_of(x))!=std::string::npos)
    	{
    		s.erase(p,1);
    	}	
    	return s;
    }

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par hpfx Voir le message
    là où j'ai un doute, c'est sur la methode pour bien nettoyer tout ca, j'ai plus l'habitude des vecteurs avec des pointeurs (std::vector<obj*> ... comme ca c'est moi qui fais le delete des objets) mais là, c'est un struc... si je fais un tracklist.clear() dans le destructeur ca devrait suffire ?
    Le clear() est inutile, le destructeur de tracklist fera automatiquement le ménage, comme tout objet C++ qui se respecte.

    A noter qu'en C++ struct et class c'est la presque la même chose. Donc on n'écrira pas comme en C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct
    	{
    	bool loaded;
    	std::string file;
    	Uint8 vol;
    	} listitem;
    mais tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct listitem
    {
    	bool loaded;
    	std::string file;
    	Uint8 vol;
    };

  3. #3
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut
    Merci.
    Citation Envoyé par Sylvain Togni Voir le message
    Le clear() est inutile, le destructeur de tracklist fera automatiquement le ménage, comme tout objet C++ qui se respecte.
    Oui c'est vrai, mais en fait ma question était : est-ce que le destructeur de mon string sera bien appellé quand tracklist sera detruit ? je pense que oui. mais bon je prefere demander.

    Merci pour la syntaxe des struct, est-ce que celà est accepté par tous les compilo ? (même les anciens)

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 611
    Points
    30 611
    Par défaut
    Salut,
    Citation Envoyé par hpfx Voir le message
    Merci.

    Oui c'est vrai, mais en fait ma question était : est-ce que le destructeur de mon string sera bien appellé quand tracklist sera detruit ? je pense que oui. mais bon je prefere demander.

    Merci pour la syntaxe des struct, est-ce que celà est accepté par tous les compilo ? (même les anciens)
    Lorsque tu as une structure de donnée, le destructeur de tous les membres de la structure est appelé de manière systématique lors de la destruction de la donnée elle-même, dans l'ordre inverse de la création pour être précis, sauf si la mémoire allouée à une des données et allouée de manière dynamique, auquel cas, il faut explicitement appeler le delete correspondant.

    Donc, dans le cadre de ta structure listitem, le destructeur de la classe string est appelé de manière systématique, tout comme un pseudo destructeur pour ton booléen et pour ton entier non signé sur 8 bits
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Votre avis sur des parties de code "triviales"
    Par bstevy dans le forum SQL
    Réponses: 2
    Dernier message: 20/05/2015, 04h35
  2. Votre avis sur une portion de code
    Par ninikkhuet dans le forum Langage
    Réponses: 7
    Dernier message: 29/10/2009, 14h33
  3. Réponses: 3
    Dernier message: 01/09/2008, 15h43
  4. [java.lang.class] Votre avis sur une portion de code
    Par be_tnt dans le forum Langage
    Réponses: 3
    Dernier message: 18/10/2006, 17h55
  5. [Code Prof]votre avis sur un code?
    Par granquet dans le forum Réseau
    Réponses: 6
    Dernier message: 11/04/2006, 21h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo