Back to index

nordugrid-arc-nox  1.1.0~rc6
DBranch.h
Go to the documentation of this file.
00001 // -*- indent-tabs-mode: nil -*-
00002 
00003 #include <string>
00004 #include <list>
00005 
00006 namespace Arc {
00007 
00008   class DItem {
00009   public:
00010     DItem(void) {}
00011     virtual ~DItem(void) {}
00012     virtual DItem* New(void) const {
00013       return new DItem;
00014     }
00015     virtual std::string str() const {
00016       return "";
00017     }
00018     virtual bool operator==(const DItem&) {
00019       return false;
00020     }
00021     virtual bool operator<(const DItem&) {
00022       return false;
00023     }
00024     virtual bool operator>(const DItem&) {
00025       return false;
00026     }
00027     virtual bool operator<=(const DItem&) {
00028       return false;
00029     }
00030     virtual bool operator>=(const DItem&) {
00031       return false;
00032     }
00033     virtual operator bool(void) {
00034       return false;
00035     }
00036     virtual bool operator!(void) {
00037       return true;
00038     }
00039     virtual DItem& operator=(const DItem&) {
00040       return *this;
00041     }
00042     virtual DItem& operator=(const std::string&) {
00043       return *this;
00044     }
00045   };
00046 
00047   class DBranch {
00048   protected:
00049     std::string name_;
00050     std::list<DBranch*> branches_;
00051     DItem *item_;
00052   public:
00053     DBranch(void);
00054     ~DBranch(void);
00055 
00056     DBranch& operator[](const std::string&);
00057     DBranch& operator[](int);
00058     DBranch& Add(const std::string&, int pos = -1);
00059     int Size(void);
00060     const std::string& Name(void);
00061 
00062     DItem& Item(void);
00063     operator DItem&(void);
00064     DBranch& operator=(const DItem&);
00065     void Assign(DItem*);
00066   };
00067 
00068   class DItemString
00069     : public DItem {
00070   protected:
00071     std::string value_;
00072   public:
00073     DItemString(void);
00074     DItemString(const std::string&);
00075     DItemString(const char*);
00076     virtual ~DItemString(void);
00077     virtual DItem* New(void) const;
00078     virtual std::string str() const;
00079     virtual bool operator==(const DItem&);
00080     virtual bool operator<(const DItem&);
00081     virtual bool operator>(const DItem&);
00082     virtual bool operator<=(const DItem&);
00083     virtual bool operator>=(const DItem&);
00084     virtual operator bool(void);
00085     virtual bool operator!(void);
00086     virtual DItemString& operator=(const DItem&);
00087     virtual DItemString& operator=(const std::string&);
00088   };
00089 
00090 }