Bonjour tout le monde,
Je ne comprends pas bien une partie de code d'un programme que j'analyse :
Déjà, je vois que RetourEnCasDeDoublon vaut 1, je ne pense pas que ça soit le chiffre 1 mais plutôt le code ASCII 1 qui correspond au start of heading, sauriez-vous me dire à quoi ça correspond ?
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 bool CTableauGenerique::Ajouter(const CGenerique& ModeleAAjouter, bool RetourEnCasDeDoublon) { if (!ModeleAAjouter.EstValide()) return false; if ( (m_Poubelle->GereUnicite()) && (Indice(ModeleAAjouter) >= 0) ) return RetourEnCasDeDoublon; void* Nouveau = realloc(m_Tableau,(m_Nombre+1)*sizeof(CGenerique*)); if (Nouveau == NULL) return false; m_Tableau = (CGenerique**)Nouveau; CGenerique* AAjouter = ModeleAAjouter.Cloner(); if (!AAjouter->EstValide()) { delete AAjouter; return false; } m_Tableau[m_Nombre] = AAjouter; m_Tableau[m_Nombre]->DefinirConteneur(this); m_Nombre++; return true; }
Cette ligne termine-t'elle la méthode ?:
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ( (m_Poubelle->GereUnicite()) && (Indice(ModeleAAjouter) >= 0) ) return RetourEnCasDeDoublon;
J'ai du mal avec cette ligne :
Le premier test vérifie si l'unicité est gérée ou non avec cette méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ( (m_Poubelle->GereUnicite()) && (Indice(ModeleAAjouter) >= 0) ) return RetourEnCasDeDoublon;
Le second test appelle la méthode "Indice" ci-desssous :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 bool CRecompense::GereUnicite() const { return true; }
Ce que je ne comprends pas dans cette méthode Indice s'est ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 long CTableauGenerique::Indice(const CGenerique& ModeleRecherche) const { if ( (m_Nombre == 0) || (!m_Poubelle->GereUnicite()) || (!ModeleRecherche.EstValide()) ) return -1; const CGenerique* Recherche = &ModeleRecherche; unsigned int n = m_Nombre; ((CTableauGenerique*)this)->m_TypeComparaison = ComparaisonPourUnicite; CGenerique** Trouve = (CGenerique**)_lfind(&Recherche,m_Tableau,&n,sizeof(CGenerique*),Comparer); ((CTableauGenerique*)this)->m_TypeComparaison = -1; return (Trouve != NULL) ? Trouve - m_Tableau : -1; }
Il va donc faire une recherche ici ? une recherche de quoi exactement ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CGenerique** Trouve = (CGenerique**)_lfind(&Recherche,m_Tableau,&n,sizeof(CGenerique*),Comparer);
et ceci :
Il retourne donc l'adresse de Trouve - l'adresse de m_Tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part return (Trouve != NULL) ? Trouve - m_Tableau : -1;
m_Tableau vaut 0x00360858
- Trouve vaut 0x00360858
----------------------------------
Il retourne donc 0 (à chaque fois)
Merci d'avance pour votre aide.
beegees
Partager