00001
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 #ifndef INC_RVC_ARRAY_H
00091 #define INC_RVC_ARRAY_H
00092
00093 #ifndef INC_RVC_OBJECT_H
00094 #include <rvc/object.h>
00095 #endif
00096
00097 namespace RVC {
00098
00099 #ifndef GENERATING_DOXYGEN_OUTPUT
00100 class ARRAYHANDLE;
00101 struct ARRAYINFO;
00102 class OBJMAKEPARMS;
00103 #endif // GENERATING_DOXYGEN_OUTPUT
00104
00105 class ARRAY : public RVC::OBJECT {
00106 public:
00107 #ifndef GENERATING_DOXYGEN_OUTPUT
00108 class MAKEPARMS;
00109 #endif // GENERATING_DOXYGEN_OUTPUT
00110
00112 ARRAY (
00113 );
00114
00116 ARRAY (
00117 const RVC::ARRAY& obj
00118 );
00119
00121 virtual ~ARRAY (
00122 );
00123
00125 RVC::ARRAY& operator= (
00126 const RVC::ARRAY& rhs
00127 );
00128
00131 template <class _CT>
00132 INT32 Append (
00133 const _CT& item
00134 ) {
00135 if (sizeof(_CT) != m_ItemSize) return (EBadFuncParm);
00136 INT32 retval = GetNumItems();
00137 ERRVALUE err;
00138 if ((err = Resize(retval + 1)) < 0) return (err);
00139 if ((err = Write(retval, &item)) < 0) return (err);
00140 return (retval);
00141 }
00142
00145 INT32 GetItemSize (
00146 ) const { return (m_ItemSize); }
00147
00150 INT32 GetNumItems (
00151 ) const;
00152
00155 bool IsInverted (
00156 ) const;
00157
00159 ERRVALUE Make (
00160 const RVC::OBJECT& parent,
00161 const RVC::DESCRIPTOR& Descriptor,
00162 const MAKEPARMS& MakeParms,
00163 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00164 );
00165
00167 ERRVALUE Make (
00168 RVC::OBJITEM& ObjItem,
00169 const MAKEPARMS& MakeParms,
00170 #ifdef RVC_CREDENTIALS_MANDATORY
00171 const char* Source,
00172 const CREDENTIALS* Credentials
00173 #else
00174 const char* Source = 0,
00175 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00176 #endif
00177 );
00178
00181 INT32 Read (
00182 INT32 ItemNum,
00183 void *ptr
00184 ) const;
00185
00187 ERRVALUE Resize (
00188 INT32 NewNumItems
00189 );
00190
00193 INT32 Write (
00194 INT32 ItemNum,
00195 const void* ptr
00196 );
00197
00198 protected:
00199
00201 ERRVALUE Make (
00202 const RVC::OBJECT& parent,
00203 OBJMAKEPARMS& ObjMakeParms
00204 );
00205
00207 ERRVALUE OpenObject (
00208 OPENMODE OpenFlags,
00209 ARRAYINFO& newinfo,
00210 int HeaderSize,
00211 int HeaderType,
00212 MDLGPARENT parent,
00213 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00214 );
00215
00216 protected:
00217
00218 virtual ERRVALUE v_OpenObject (OPENMODE OpenFlags, MDLGPARENT parent, const CREDENTIALS* Credentials);
00219
00220 private:
00221 #ifndef GENERATING_DOXYGEN_OUTPUT
00222 ARRAYHANDLE* m_ArrayHandle;
00223 INT32 m_ItemSize;
00224
00226 virtual ERRVALUE v_CloseObject ();
00227 virtual RVC::OBJTYPE v_GetDftObjectType () const;
00228 virtual bool v_IsObjectOpen () const;
00229 #endif // GENERATING_DOXYGEN_OUTPUT
00230 };
00231
00232
00234 class ARRAY::MAKEPARMS {
00235 public:
00236 explicit MAKEPARMS (
00237 INT32 ItemSize
00238 ) : m_ItemSize(ItemSize) {}
00239
00240 INT32 GetItemSize (
00241 ) const { return (m_ItemSize); }
00242
00243 void SetItemSize (
00244 INT32 ItemSize
00245 ) { m_ItemSize = ItemSize; }
00246
00247 private:
00248 #ifndef GENERATING_DOXYGEN_OUTPUT
00249 INT32 m_ItemSize;
00250 #endif // GENERATING_DOXYGEN_OUTPUT
00251 };
00252
00253 }
00254
00255 #endif