00001 #pragma once
00002
00027 #ifndef __ID_H__
00028 #define __ID_H__
00029
00030
00031 using std::string;
00032 using std::list;
00033
00035 class id
00036 {
00037
00038 public:
00039 id(const string& IDName, id* pID);
00040 virtual ~id(void);
00042 virtual string ParseID(void) const=0;
00043 string GetIDName(void) const;
00044 id* FindSubID(const string& IDName, string::size_type Offset=0);
00045 const id* FindSubID(const string& IDName, string::size_type Offset=0) const;
00046 const id* GetParentID(void) const;
00047 void RegisterSubID(id* pID);
00048
00049
00050 private:
00051 const string m_IDName;
00052 const id* m_pParentID;
00053 list<id*> m_SubIDs;
00054 };
00055
00057 class custom_id: public id
00058 {
00059
00060 public:
00061 custom_id(const string& IDName, id* pID);
00062 virtual string ParseID(void) const;
00063 };
00064
00065
00066 namespace except
00067 {
00069 class id_except: public exception
00070 {
00071
00072 public:
00074 id_except(void) throw(): exception() {};
00076 virtual ~id_except(void) throw() {};
00078 virtual const char *what(void) const throw()=0;
00079 };
00080
00082 class unknow_id: public id_except
00083 {
00084
00085 public:
00086 unknow_id(const string& UnknowID) throw();
00087 virtual ~unknow_id(void) throw();
00088 virtual const char *what(void) const throw();
00089
00090
00091 private:
00092 string m_UnknowID;
00093 };
00094 };
00095
00096 #endif // __ID_H__