00001
00041 #ifndef INC_MI32_NASAODL_H
00042 #define INC_MI32_NASAODL_H
00043
00044 #ifndef INC_MI32_MILIST_H
00045 #include <mi32/milist.h>
00046 #endif
00047
00048 #ifndef INC_MI32_SIMPLEAR_H
00049 #include <mi32/simplear.h>
00050 #endif
00051
00053 class NASA_ODL {
00054 public:
00055
00056 class ITEM;
00057 class OBJECT;
00058 typedef MILIST<ITEM*> ITEMLIST;
00059 typedef MILIST<OBJECT*> OBJECTLIST;
00060
00062 NASA_ODL (
00063 );
00064
00066 ~NASA_ODL (
00067 );
00068
00071 const ITEM* FindItem (
00072 const char *path
00073 ) const;
00074
00077 const OBJECT* FindObject (
00078 const char *path
00079 ) const;
00080
00082 const OBJECT* GetRootObject (
00083 ) const { return (m_pRoot); }
00084
00087 ERRVALUE Parse (
00088 const char *string
00089 );
00090
00091 private:
00092 #ifndef GENERATING_DOXYGEN_OUTPUT
00093 OBJECT *m_pRoot;
00094
00095 NASA_ODL (const NASA_ODL&);
00096 NASA_ODL& operator= (const NASA_ODL&);
00097 #endif // GENERATING_DOXYGEN_OUTPUT
00098 };
00099
00100
00102 class NASA_ODL::ITEM {
00103 public:
00104
00106 explicit ITEM (
00107 const char *name
00108 );
00109
00111 ~ITEM (
00112 );
00113
00115 const char* GetName (
00116 ) const { return (m_name); }
00117
00119 int GetNumValues (
00120 ) const { return (m_Values.GetNumItems()); }
00121
00124 double GetValue (
00125 int index = 0
00126 ) const;
00127
00130 const char* GetString (
00131 int index = 0
00132 ) const;
00133
00134 private:
00135 #ifndef GENERATING_DOXYGEN_OUTPUT
00136 SIMPLE_ARRAY<char*> m_Values;
00137 char *m_name;
00138
00139 ERRVALUE ParseValues (const char *string);
00140
00142 ITEM (const ITEM&);
00143 ITEM& operator= (const ITEM&);
00144 friend class NASA_ODL::OBJECT;
00145 #endif // GENERATING_DOXYGEN_OUTPUT
00146 };
00147
00148
00150 class NASA_ODL::OBJECT {
00151 public:
00152
00154 explicit OBJECT (
00155 const char *name
00156 );
00157
00159 virtual ~OBJECT (
00160 );
00161
00163 const ITEM* FindItem (
00164 const char *path
00165 ) const;
00166
00168 const OBJECT* FindObject (
00169 const char *path
00170 ) const;
00171
00173 const char* GetName (
00174 ) const { return (m_name); }
00175
00177 const ITEMLIST& GetItemList (
00178 ) const { return (m_ItemList); }
00179
00182 const char *GetItemString (
00183 const char *path,
00184 int index = 0
00185 ) const;
00186
00189 bool GetItemValue (
00190 const char *path,
00191 double& value,
00192 int index = 0
00193 ) const;
00194
00196 const OBJECTLIST& GetObjectList (
00197 ) const { return (m_ObjectList); }
00198
00199 private:
00200 #ifndef GENERATING_DOXYGEN_OUTPUT
00201 OBJECTLIST m_ObjectList;
00202 ITEMLIST m_ItemList;
00203 char *m_name;
00204
00206 OBJECT ();
00208 const ITEM* FindItemByName (const char *name) const;
00210 const OBJECT* FindObjectByName (const char *name) const;
00212 ERRVALUE Parse (const char *string, const char *& next);
00213
00215 OBJECT (const OBJECT&);
00216 OBJECT& operator= (const OBJECT&);
00217 friend class NASA_ODL;
00218 #endif // GENERATING_DOXYGEN_OUTPUT
00219 };
00220
00221 #endif // INC_MI32_NASAODL_H