00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072 #ifndef __FK_TREE_HEADER__
00073 #define __FK_TREE_HEADER__
00074
00075 #include <string>
00076 #include <list>
00077 #include <iostream>
00078
00079 class fk_Tree;
00080 class fk_TreeData;
00081
00083
00091 class fk_TreeBaseObject {};
00092
00093 typedef std::list<fk_TreeData *> fk_TList;
00094
00095
00097
00123 class fk_TreeData {
00124
00125 friend class fk_Tree;
00126
00127 private:
00128 fk_TreeBaseObject *object;
00129 fk_Tree *base;
00130 std::string name;
00131 fk_TreeData *parent;
00132 fk_TList children;
00133 int depth, maxDepth;
00134 bool deleteFlg;
00135
00136 void _calcMaxDepth(void);
00137 void _addChild(fk_TreeData *);
00138 void _clearChild(fk_TreeData *);
00139
00140 public:
00142
00152 fk_TreeData(fk_Tree *tree,
00153 const std::string name,
00154 fk_TreeData *parent);
00155
00157 ~fk_TreeData();
00158
00160
00167 int getDepth(void);
00168
00170
00178 int getMaxDepth(void);
00179
00181
00210 fk_TreeData * getChild(fk_TreeData *node);
00211
00213
00221 fk_TreeData * getParent(void);
00222
00224
00233 fk_TreeData * getNext(void);
00234
00236
00245 fk_TreeData * getPrev(void);
00246
00248
00256 int getOrder(void);
00257
00259
00266 int getChildrenSize(void);
00267
00269
00276 std::string getName(void);
00277
00278
00279
00280
00282
00305 void setObject(fk_TreeBaseObject *object,
00306 bool deleteFlg = true);
00307
00309
00317 fk_TreeBaseObject * getObject(void);
00318
00319 #ifndef FK_DOXYGEN_USER_PROCESS
00320 void Print(void);
00321 #endif
00322
00323 };
00324
00326
00393 class fk_Tree {
00394
00395 private:
00396 fk_TList _treeData;
00397 fk_TreeData *_root;
00398
00399 void _clear(void);
00400 void _makeRoot(const std::string);
00401 void _clearData(fk_TreeData *);
00402 fk_TreeData * _simpleClone(fk_TreeData *, fk_TreeData *);
00403 int _setDepth(fk_TreeData *, int);
00404
00405 protected:
00406
00408
00434 virtual fk_TreeData * makeNewData(fk_Tree *tree,
00435 const std::string name,
00436 fk_TreeData *parent);
00437
00438 public:
00440
00447 fk_Tree(const std::string name = "default");
00448
00450 virtual ~fk_Tree();
00451
00453
00458 fk_TreeData * getRoot(void);
00459
00461
00469 void clear(const std::string name);
00470
00472
00482 fk_TreeData * addNewChild(fk_TreeData *parent,
00483 const std::string name);
00484
00486
00503 bool deleteBranch(fk_TreeData *node);
00504
00506
00522 bool clearChildren(fk_TreeData *node);
00523
00525
00550 fk_TreeData * cloneOneData(fk_TreeData *parent,
00551 fk_TreeData *node);
00552
00554
00578 fk_TreeData * cloneBranch(fk_TreeData *parent,
00579 fk_TreeData *node);
00580
00582
00608 bool moveBranch(fk_TreeData *parent, fk_TreeData *node);
00609
00611
00625 void toFront(int n, fk_TreeData *node);
00626
00628
00642 void toBack(int n, fk_TreeData *node);
00643
00644
00645
00647
00655 bool isArive(fk_TreeData *node);
00656
00657
00659
00670 fk_TreeData * findData(const std::string name);
00671
00673
00700 fk_TreeData * foreachData(fk_TreeData *node);
00701
00702 #ifndef FK_DOXYGEN_USER_PROCESS
00703 void Print(void);
00704 #endif
00705 };
00706
00707 #endif // !__FK_TREE_HEADER__