#ifndef _OTB_TRISKELE_ARRAY_TREE_BASE_HPP #define _OTB_TRISKELE_ARRAY_TREE_BASE_HPP #include #include #include #include #include #include "triskeleBase.hpp" namespace otb { namespace triskele { namespace arrayTree { class GraphWalker; using namespace ::triskele; using namespace std; /*! Nombre de voisins */ typedef uint32_t DimEdge; // ~4*nbPixels (8-connectivity) /*! Type de connectivité possible pour le voisinage */ enum Connectivity { C4 = 0, C6P = 1, C6N = 2, C8 = C6P | C6N }; /*! Définit de quel type est la "sélection" */ enum TileItem { Surface, Horizontal, Vertical }; /* Définit le type d'arbre à construire */ enum TreeType { MIN, MAX, TOS, ALPHA, TreeTypeCard}; inline bool getDecrFromTreetype (TreeType treeType); /*! Définit les noms des connectivités (utile pour le debug) */ extern string connectivityName[]; /*! Définit les noms des tileItem (utile pour le debug) */ extern string tileItemName[]; /*! Définit les noms des arbres (utile pour le debug) */ extern string treeTypeLabels[]; /*! * Opérateur de flux sur les connectivités */ inline ostream &operator << (ostream &out, const Connectivity &c); /*! * Opérateur de flux sur les TileItem */ inline ostream &operator << (ostream &out, const TileItem &t); template struct Edge { Point points[2]; WeightT weight; }; /*! Effectue l'échange entre 2 Edge */ template inline void swapEdge (Edge &a, Edge &b); /*! Opérateur de flux sur les voisins */ template struct CPrintEdge { const Edge &edge; const Size &size; inline CPrintEdge (const Edge &edge, const Size &size); inline ostream &print (ostream &out) const; }; template inline CPrintEdge printEdge (const Edge &edge, const Size &size); template inline ostream &operator << (ostream& out, const CPrintEdge &cpe) { return cpe.print (out); } template struct CPrintEdges { const Edge *edges; const Size &size; const DimEdge edgesCount; inline CPrintEdges (const Edge edges[], const Size &size, const DimEdge edgesCount); inline ostream &print (ostream &out) const; }; template inline CPrintEdges printEdges (const Edge edges[], const Size &size, const DimEdge edgesCount); template inline ostream &operator << (ostream& out, const CPrintEdges &cpe) { return cpe.print (out); } #include "triskeleArrayTreeBase.tpp" } // arrayTree } // triskele } // otb #endif // _OTB_TRISKELE_ARRAY_TREE_BASE_HPP