FineKernelToolKit: FK/Tree.h ソースファイル

FineKernelToolKit 4.3.0

読み取り中…
検索中…
一致する文字列を見つけられません
Tree.h
[詳解]
1#if !defined(__FK_TREE_HEADER__)
2#define __FK_TREE_HEADER__
3
4#include <list>
5#include <string>
6#include <iostream>
7#include <memory>
8
9namespace FK {
10
11 class fk_Tree;
12 class fk_TreeData;
13
15
23
24 class fk_TreeBaseObject {
25 public:
26 fk_TreeBaseObject(void) {};
27 virtual ~fk_TreeBaseObject(void) {};
28 };
29
30
31
33
58
59 class fk_TreeData {
60
61
62#if !defined(FK_DOXYGEN_USER_PROCESS)
63 using fk_TDList = std::list<fk_TreeData *>;
64 using td_ite = fk_TDList::iterator;
65
66 class Member {
67 public:
68 std::shared_ptr<fk_TreeBaseObject> object;
69 fk_Tree *base;
70 std::string name;
71 fk_TreeData *parent;
72 fk_TDList children;
73 int depth, maxDepth;
74
75 Member(fk_Tree *, const std::string &, fk_TreeData *);
76 };
77#endif
78 friend class fk_Tree;
79
80 public:
81
82#if !defined(FK_DOXYGEN_USER_PROCESS)
84 fk_TreeData(fk_Tree *tree, const std::string &name, fk_TreeData *parent);
85
87 virtual ~fk_TreeData();
88#endif
89
91
98 int getDepth(void);
99
101
109 int getMaxDepth(void);
110
112
140 fk_TreeData * getChild(fk_TreeData *node);
141
143
151 fk_TreeData * getParent(void);
152
154
163 fk_TreeData * getNext(void);
164
166
175 fk_TreeData * getPrev(void);
176
178
186 int getOrder(void);
187
189
196 int getChildrenSize(void);
197
199
206 std::string getName(void);
207
208 // ユーザデータの挿入 (デストラクタで同時に消去されたくない場合は,
209 // 後ろの引数で false を選択)
210
212
230 //void setObject(fk_TreeBaseObject *object, bool deleteFlg = true);
231 void setObject(const std::shared_ptr<fk_TreeBaseObject> &object);
232
234
242 fk_TreeBaseObject * getObject(void);
243
244#if !defined(FK_DOXYGEN_USER_PROCESS)
245 void Print(void);
246#endif
247
248 private:
249 std::unique_ptr<Member> _m;
250
251 void _calcMaxDepth(void);
252 void _addChild(fk_TreeData *);
253 void _clearChild(fk_TreeData *);
254 fk_TDList * _getChildren(void);
255 };
256
258
324
325 class fk_Tree {
326
327#if !defined(FK_DOXYGEN_USER_PROCESS)
328 using fk_TList = std::list<std::unique_ptr<fk_TreeData>>;
329 using t_ite = fk_TList::iterator;
330
331 class Member {
332 public:
333 fk_TList tree;
334 fk_TreeData *root;
335
336 Member(void);
337 };
338#endif
339
340 protected:
341
343
369 virtual fk_TreeData * makeNewData(fk_Tree *tree,
370 const std::string name, fk_TreeData *parent);
371
372 public:
374
381 fk_Tree(const std::string name = "default");
382
384 virtual ~fk_Tree();
385
387
392 fk_TreeData * getRoot(void);
393
395
403 void clear(const std::string name);
404
406
416 fk_TreeData * addNewChild(fk_TreeData *parent, const std::string name);
417
419
436 bool deleteBranch(fk_TreeData *node);
437
439
455 bool clearChildren(fk_TreeData *node);
456
458
483 fk_TreeData * cloneOneData(fk_TreeData *parent, fk_TreeData *node);
484
486
510 fk_TreeData * cloneBranch(fk_TreeData *parent, fk_TreeData *node);
511
513
539 bool moveBranch(fk_TreeData *parent, fk_TreeData *node);
540
542
556 void toFront(int n, fk_TreeData *node);
557
559
573 void toBack(int n, fk_TreeData *node);
574
575 // d が該当の木の中で生存するデータかどうか判定
576
578
586 bool isArive(fk_TreeData *node);
587
588 // nという名前のデータを検索
590
601 fk_TreeData * findData(const std::string name);
602
604
629 fk_TreeData * foreachData(fk_TreeData *node);
630
631#if !defined(FK_DOXYGEN_USER_PROCESS)
632 void Print(void);
633#endif
634
635 private:
636 std::unique_ptr<Member> _m;
637
638 void _clear(void);
639 void _makeRoot(const std::string);
640 void _clearData(fk_TreeData *);
641 fk_TreeData * _simpleClone(fk_TreeData *, fk_TreeData *);
642 int _setDepth(fk_TreeData *, int);
643 t_ite _getIte(fk_TreeData *);
644 };
645}
646
647#endif // !__FK_TREE_HEADER__
648
649/****************************************************************************
650 *
651 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
652 *
653 * Redistribution and use in source and binary forms,
654 * with or without modification, are permitted provided that the
655 * following conditions are met:
656 *
657 * - Redistributions of source code must retain the above
658 * copyright notice, this list of conditions and the
659 * following disclaimer.
660 *
661 * - Redistributions in binary form must reproduce the above
662 * copyright notice, this list of conditions and the
663 * following disclaimer in the documentation and/or
664 * other materials provided with the distribution.
665 *
666 * - Neither the name of the copyright holders nor the names
667 * of its contributors may be used to endorse or promote
668 * products derived from this software without specific
669 * prior written permission.
670 *
671 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
672 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
673 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
674 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
675 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
676 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
677 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
678 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
679 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
680 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
681 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
682 * POSSIBILITY OF SUCH DAMAGE.
683 *
684 ****************************************************************************/
685/****************************************************************************
686 *
687 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
688 *
689 * 本ソフトウェアおよびソースコードのライセンスは、基本的に
690 * 「修正 BSD ライセンス」に従います。以下にその詳細を記します。
691 *
692 * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
693 * 以下の条件を満たす場合に限り、再頒布および使用が許可されます。
694 *
695 * - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
696 * および下記免責条項を含めること。
697 *
698 * - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の
699 * 資料に、上記の著作権表示、本条件一覧、および下記免責条項を
700 * 含めること。
701 *
702 * - 書面による特別の許可なしに、本ソフトウェアから派生した製品の
703 * 宣伝または販売促進に、本ソフトウェアの著作権者の名前または
704 * コントリビューターの名前を使用してはならない。
705 *
706 * 本ソフトウェアは、著作権者およびコントリビューターによって「現
707 * 状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、
708 * および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ
709 * に限定されない、いかなる保証もないものとします。著作権者もコン
710 * トリビューターも、事由のいかんを問わず、損害発生の原因いかんを
711 * 問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その
712 * 他の)不法行為であるかを問わず、仮にそのような損害が発生する可
713 * 能性を知らされていたとしても、本ソフトウェアの使用によって発生
714 * した(代替品または代用サービスの調達、使用の喪失、データの喪失、
715 * 利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、
716 * 間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に
717 * ついて、一切責任を負わないものとします。
718 *
719 ****************************************************************************/
FK::fk_TreeBaseObject
木構造オブジェクトデータの基底クラス
Definition Tree.h:24
FK::fk_TreeBaseObject::~fk_TreeBaseObject
virtual ~fk_TreeBaseObject(void)
Definition Tree.h:27
FK::fk_TreeBaseObject::fk_TreeBaseObject
fk_TreeBaseObject(void)
Definition Tree.h:26
FK::fk_TreeData
木構造用ノードデータクラス
Definition Tree.h:59
FK::fk_TreeData::getName
std::string getName(void)
名称参照関数
FK::fk_TreeData::getMaxDepth
int getMaxDepth(void)
枝深さ参照関数
FK::fk_TreeData::getParent
fk_TreeData * getParent(void)
親ノード参照関数
FK::fk_TreeData::getOrder
int getOrder(void)
順位参照関数
FK::fk_TreeData::getChildrenSize
int getChildrenSize(void)
子ノード個数参照関数
FK::fk_TreeData::getChild
fk_TreeData * getChild(fk_TreeData *node)
子ノード逐次参照関数
FK::fk_TreeData::getNext
fk_TreeData * getNext(void)
後ノード参照関数
FK::fk_TreeData::getPrev
fk_TreeData * getPrev(void)
前ノード参照関数
FK::fk_TreeData::fk_Tree
friend class fk_Tree
Definition Tree.h:78
FK::fk_TreeData::getDepth
int getDepth(void)
深さ参照関数
FK::fk_TreeData::getObject
fk_TreeBaseObject * getObject(void)
ユーザデータ参照関数
FK::fk_TreeData::setObject
void setObject(const std::shared_ptr< fk_TreeBaseObject > &object)
ユーザデータ設定関数
FK::fk_Tree
木構造用データベースクラス
Definition Tree.h:325
FK::fk_Tree::clearChildren
bool clearChildren(fk_TreeData *node)
子ノードおよびその下の枝の消去関数
FK::fk_Tree::makeNewData
virtual fk_TreeData * makeNewData(fk_Tree *tree, const std::string name, fk_TreeData *parent)
ノード生成時関数
FK::fk_Tree::fk_Tree
fk_Tree(const std::string name="default")
コンストラクタ
FK::fk_Tree::toFront
void toFront(int n, fk_TreeData *node)
順位前進関数
FK::fk_Tree::isArive
bool isArive(fk_TreeData *node)
ノード生存確認関数
FK::fk_Tree::clear
void clear(const std::string name)
初期化関数
FK::fk_Tree::cloneBranch
fk_TreeData * cloneBranch(fk_TreeData *parent, fk_TreeData *node)
枝複製関数
FK::fk_Tree::~fk_Tree
virtual ~fk_Tree()
デストラクタ
FK::fk_Tree::toBack
void toBack(int n, fk_TreeData *node)
順位後退関数
FK::fk_Tree::findData
fk_TreeData * findData(const std::string name)
ノード検索関数
FK::fk_Tree::getRoot
fk_TreeData * getRoot(void)
根ノード参照関数
FK::fk_Tree::moveBranch
bool moveBranch(fk_TreeData *parent, fk_TreeData *node)
枝移動関数
FK::fk_Tree::addNewChild
fk_TreeData * addNewChild(fk_TreeData *parent, const std::string name)
新規ノード生成関数
FK::fk_Tree::deleteBranch
bool deleteBranch(fk_TreeData *node)
ノードおよびその下の枝の消去関数
FK::fk_Tree::cloneOneData
fk_TreeData * cloneOneData(fk_TreeData *parent, fk_TreeData *node)
単一ノード複製関数
FK::fk_Tree::foreachData
fk_TreeData * foreachData(fk_TreeData *node)
逐次ノード参照関数
FK
Fine Kernel Toolkit 名前空間
Definition Angle.h:6