#include <iostream>
#include <locale>
#include <CXXLCOMPOSITE.HPP>
using namespace std;
using namespace CxxlMan;
class A:virtual public cxxlObject
{
int m_i;
public:
A(int i)
: cxxlObject(Spirit_Urgent),
{
m_i = i;
}
virtual ~A()
{
}
int Get() const
{
return m_i;
}
};
int main(int argc, char* argv[])
{
typedef cxxlComposite<A,true> ACompositeType; // 定義一個形別方便變更
setlocale(LC_CTYPE, ""); // 指定系統現正使用中的地區語言做轉換
Smart_Ptr<ACompositeType> result((ACompositeType*)NULL);
Smart_Ptr<ACompositeType > A_Composite(new ACompositeType(L"最上層節點"));
cout << "A_Composite 現在所處的節點:" << MB_String(A_Composite->GetName()) << endl;
cout << "建立子物件:" << endl;
result = A_Composite->Add(new A(1),L"A 物件 001");
cout << MB_String(result->GetName()) << endl;
result = A_Composite->AddPrev(new A(2),L"A 物件 002",result);
cout << MB_String(result->GetName()) << endl;
result = A_Composite->AddPrev(new A(3),L"A 物件 003",result);
cout << MB_String(result->GetName()) << endl;
result = A_Composite->AddPrev(new A(4),L"A 物件 004",result);
cout << MB_String(result->GetName()) << endl;
result = A_Composite->AddNext(NULL,L"子目錄 001",result);
cout << MB_String(result->GetName()) << endl;
result = A_Composite->Add(new A(1),L"名稱後面加底線_");
if(result.isNULL())
cout << "名稱後面不可加底線 _" << endl << endl;
A_Composite = A_Composite->GetComposite(L"A 物件 002");
cout << "A_Composite 現在所處的節點:" << MB_String(A_Composite->GetName()) << endl;
cout << "建立子物件:" << endl;
result = A_Composite->Add(new A(21),L"A 物件 021");
cout << MB_String(result->GetName()) << endl;
result = A_Composite->Add(new A(22),L"A 物件 022");
cout << MB_String(result->GetName()) << endl;
result = A_Composite->Add(new A(23),L"A 物件 023");
cout << MB_String(result->GetName()) << endl;
A_Composite = A_Composite->GetParent();
cout << endl << "A_Composite 現在所處的節點:"
<< MB_String(A_Composite->GetName()) << endl;
cout << "所有子節點:" << endl;
Smart_Ptr<cxxlList<ACompositeType > > Composite_List = A_Composite->cxxlList_Create();
Composite_List->ResetPT(toHead);
for(Smart_Ptr<ACompositeType > Composite_Ptr = (*Composite_List)++;
!Composite_Ptr.isNULL(); Composite_Ptr = (*Composite_List)++)
{
cout << MB_String(Composite_Ptr->GetName()) << endl;
}
Smart_Ptr<ACompositeType > A_Composite2 = A_Composite->Clone(); // 複製一份
A_Composite2 = A_Composite2->GetComposite(L"A 物件 002");
cout << endl << "A_Composite2 現在所處的節點:"
<< MB_String(A_Composite2->GetName()) << endl;
Smart_Ptr<ACompositeType > A_022 = A_Composite2->GetComposite(L"A 物件 022");
cout << MB_String(A_022->GetName()) << " = " << A_022->GetObj()->Get() << endl;
system("pause");
}