Sauriez-vous m'expliquer cette partie de code svp ?
Bonjour tout le monde,
Je ne comprends pas bien une partie de code d'un programme que j'analyse :
Code:
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;
} |
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 ?
Cette ligne termine-t'elle la méthode ?:
Code:
if ( (m_Poubelle->GereUnicite()) && (Indice(ModeleAAjouter) >= 0) ) return RetourEnCasDeDoublon;
J'ai du mal avec cette ligne :
Code:
if ( (m_Poubelle->GereUnicite()) && (Indice(ModeleAAjouter) >= 0) ) return RetourEnCasDeDoublon;
Le premier test vérifie si l'unicité est gérée ou non avec cette méthode :
Code:
1 2 3 4
| bool CRecompense::GereUnicite() const
{
return true;
} |
Le second test appelle la méthode "Indice" ci-desssous :
Code:
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;
} |
Ce que je ne comprends pas dans cette méthode Indice s'est ceci :
Code:
1 2
|
CGenerique** Trouve = (CGenerique**)_lfind(&Recherche,m_Tableau,&n,sizeof(CGenerique*),Comparer); |
Il va donc faire une recherche ici ? une recherche de quoi exactement ?
et ceci :
Code:
return (Trouve != NULL) ? Trouve - m_Tableau : -1;
Il retourne donc l'adresse de Trouve - l'adresse de m_Tableau :
m_Tableau vaut 0x00360858
- Trouve vaut 0x00360858
----------------------------------
Il retourne donc 0 (à chaque fois)
Merci d'avance pour votre aide.
beegees