00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 #ifndef INC_RVC_LIST_H
00053 #define INC_RVC_LIST_H
00054
00055 #ifndef INC_RVC_OBJECT_H
00056 #include <rvc/object.h>
00057 #endif
00058
00059 #ifndef INC_MI32_SIMPLEAR_H
00060 #include <mi32/simplear.h>
00061 #endif
00062
00063 #ifndef GENERATING_DOXYGEN_OUTPUT
00064 struct RVCGENLISTINFO;
00065 #endif // GENERATING_DOXYGEN_OUTPUT
00066
00067 namespace RVC {
00068
00069 #ifndef GENERATING_DOXYGEN_OUTPUT
00070 class LISTHANDLE;
00071 #endif // GENERATING_DOXYGEN_OUTPUT
00072
00073 class LIST : public RVC::OBJECT {
00074 public:
00075
00076
00077 LIST (
00078 );
00079
00080
00081 LIST (
00082 const RVC::LIST& obj
00083 );
00084
00085
00086 virtual ~LIST (
00087 );
00088
00089
00090 RVC::LIST& operator= (
00091 const RVC::LIST& rhs
00092 );
00093
00094
00095
00096 INT32 GetItemSize (
00097 INT32 ItemNum
00098 ) const;
00099
00100
00101
00102 INT32 GetMaxItemSize (
00103 ) const;
00104
00105
00106
00107 INT32 GetNumItems (
00108 ) const;
00109
00110
00111 ERRVALUE InsertItems (
00112 INT32 StartPosn,
00113 INT32 NumItems = 1
00114 );
00115
00116
00117 ERRVALUE Make (
00118 const RVC::OBJECT& parent,
00119 const RVC::OBJECTNAME& name,
00120 const RVC::OBJECTDESC& desc,
00121 const char* Source = 0
00122 );
00123
00124
00125 ERRVALUE Make (
00126 const RVC::OBJITEM& ObjItem,
00127 const char* Source = 0
00128 );
00129
00130
00131
00132 INT32 Read (
00133 INT32 ItemNum,
00134 void *ptr
00135 ) const;
00136
00137
00138
00139 INT32 Read (
00140 INT32 ItemNum,
00141 void **buffer,
00142 INT32 BufferSize
00143 ) const;
00144
00145
00146 template <class _CT>
00147 ERRVALUE Read (
00148 INT32 ItemNum,
00149 SIMPLE_ARRAY<_CT>& data
00150 ) const {
00151 INT32 MaxItems = data.GetMaxItems();
00152 _CT* buffer = data.Detach();
00153 INT32 NumBytes = Read(ItemNum, reinterpret_cast<void**>(&buffer), MaxItems * sizeof(_CT));
00154 if (NumBytes < 0) {
00155 data.Attach(buffer, MaxItems);
00156 data.Clear();
00157 }
00158 else {
00159 if (static_cast<UINT32>(NumBytes) > MaxItems * sizeof(_CT)) MaxItems = NumBytes / sizeof(_CT);
00160 data.Attach(buffer, MaxItems);
00161 data.Resize(NumBytes / sizeof(_CT), true, false);
00162 NumBytes = 0;
00163 }
00164 return (NumBytes);
00165 }
00166
00167
00168
00169 INT32 Read (
00170 INT32 ItemNum,
00171 INT32 StartPosn,
00172 INT32 Length,
00173 void *ptr
00174 ) const;
00175
00176
00177 template <class _CT>
00178 ERRVALUE Read (
00179 INT32 ItemNum,
00180 INT32 StartPosn,
00181 INT32 Length,
00182 SIMPLE_ARRAY<_CT>& data
00183 ) const {
00184 INT32 NumBytes = ReadPartial(ItemNum, StartPosn * sizeof(_CT), Length * sizeof(_CT), static_cast<void*>(data));
00185 if (NumBytes >= 0) {
00186 data.Resize(NumBytes / sizeof(_CT), true, false);
00187 NumBytes = 0;
00188 }
00189 return (NumBytes);
00190 }
00191
00192
00193 ERRVALUE Resize (
00194 INT32 NewNumItems
00195 );
00196
00197
00198 ERRVALUE ResizeItem (
00199 INT32 ItemNum,
00200 INT32 NewItemSize
00201 );
00202
00203
00204 ERRVALUE SwapItems (
00205 INT32 Item1,
00206 INT32 Item2
00207 );
00208
00209
00210
00211 INT32 Write (
00212 INT32 ItemNum,
00213 INT32 Length,
00214 const void* ptr
00215 );
00216
00217
00218
00219 INT32 Write (
00220 INT32 ItemNum,
00221 INT32 TotalSize,
00222 INT32 StartPosn,
00223 INT32 Length,
00224 const void* ptr
00225 );
00226
00227
00228 template <class _CT>
00229 ERRVALUE Write (
00230 INT32 ItemNum,
00231 const SIMPLE_ARRAY<_CT>& data
00232 ) {
00233 ERRVALUE err = Write(ItemNum, data.GetNumItems() * sizeof(_CT), data);
00234 if (err > 0) err = 0;
00235 return (err);
00236 }
00237
00238 protected:
00239
00240
00241 ERRVALUE Make (const OBJECT& parent, const OBJECTNAME& name, const OBJECTDESC& desc, RVCGENLISTINFO& newinfo, int HeaderSize, int HeaderType, const char* Source);
00242
00243
00244 ERRVALUE OpenObject (OPENMODE OpenFlags, RVCGENLISTINFO& newinfo, int HeaderSize, int HeaderType, MDLGPARENT parent);
00245
00246 private:
00247 #ifndef GENERATING_DOXYGEN_OUTPUT
00248
00249
00250 virtual ERRVALUE v_CloseObject ();
00251 virtual OBJTYPE v_GetDftObjectType () const;
00252 virtual bool v_IsObjectOpen () const;
00253 virtual ERRVALUE v_OpenObject (OPENMODE OpenFlags, MDLGPARENT parent);
00254
00255 LISTHANDLE* m_ListHandle;
00256 #endif
00257 };
00258
00259 }
00260
00261 #endif