#ifndef _OTB_TRISKELE_ARRAY_TREE_LEADER_TPP #define _OTB_TRISKELE_ARRAY_TREE_LEADER_TPP // ======================================== inline Leader::Leader (DimImg vertexCount) : size (vertexCount), leaders (size, DimImg_MAX) { } inline Leader::~Leader () { free (); } // ======================================== inline void Leader::book (DimImg vertexCount) { SMART_DEF_LOG ("Leader::book", "vertexCount:" << vertexCount); size = vertexCount; leaders.assign (size, DimImg_MAX); } // --------------------------------------- inline void Leader::free () { SMART_DEF_LOG ("Leader::free", ""); leaders = vector (); size = 0; } // ======================================== inline DimImg Leader::find (DimImg a) const { BOOST_ASSERT (a < size); for (;;) { // On recherche le leader de a dans le tableau DimImg p = leaders[a]; // Si p est size, p n'a pas de leader donc p était le leader de a if (p == DimImg_MAX) break; a = p; } BOOST_ASSERT (a < size); return a; } // ---------------------------------------- inline void Leader::link (DimImg a, const DimImg &r) { BOOST_ASSERT (a < size); BOOST_ASSERT (r < size); for (; a != r;) { // On affecte une variable "temporaire" qui joue le rôle du leader de a DimImg p = leaders[a]; // leaders[a] = r; if (p == DimImg_MAX) return; a = p; } } // ======================================== inline DimImg * Leader::getLeaders () { return &leaders[0]; } inline vector & Leader::getLeadersVector () { return leaders; } // ======================================== #endif // _OTB_TRISKELE_ARRAY_TREE_LEADER_TPP