Bonjour tout le monde,

Je ne comprends pas bien une partie de code d'un programme que j'analyse :

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;
}
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 : 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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
bool CRecompense::GereUnicite() const
{
	return true;
}
Le second test appelle la méthode "Indice" ci-desssous :

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;
}
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
 
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 : Sélectionner tout - Visualiser dans une fenêtre à part
	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