1 #ifndef BZS_DB_PROTOCOL_TDAP_CLIENT_FIELDS_H
2 #define BZS_DB_PROTOCOL_TDAP_CLIENT_FIELDS_H
23 #include <boost/shared_ptr.hpp>
38 #define MEM_ALLOC_TYPE_NONE 0
39 #define MEM_ALLOC_TYPE_ONE 1
40 #define MEM_ALLOC_TYPE_ARRAY 2
55 unsigned char m_allocType;
57 virtual void releaseMemory() = 0;
61 refarymem(
const refarymem& r):m_parent(NULL),
62 m_child(0), m_allocType(MEM_ALLOC_TYPE_NONE){}
64 virtual ~refarymem(){}
66 refarymem& operator=(
const refarymem& r)
71 inline int allocType() {
return m_allocType;}
75 refarymem():m_parent(NULL), m_child(0), m_allocType(MEM_ALLOC_TYPE_NONE){}
77 inline void setAllocParent(refarymem* v)
80 m_child = (v != NULL);
83 void setAllocTypeThis(
int v) { m_allocType = (
unsigned char)v; }
105 int refcount()
const {
return m_refCount; }
107 bool tryFastRelease(
int totalRefCount)
109 if (!m_child && (m_refCount == totalRefCount))
132 virtual unsigned char* ptr(
int index)
const = 0;
133 virtual unsigned char* nullPtr(
int index)
const = 0;
134 virtual int memoryBlockIndex(
int index)
const {
return 0;}
135 virtual int memoryBlockIndexCache()
const {
return 0;}
140 unsigned int m_InvalidFlags;
142 virtual table* tbptr()
const {
return NULL; }
144 void throwIndexError(
short index)
const
148 tbptr()->setStat(STATUS_INVARID_FIELD_IDX);
154 _stprintf_s(tmp, 100, _T(
"field access index %d of %s"), index,
155 tbptr() ? tbptr()->tableDef()->tableName() : _T(
""));
160 explicit inline fieldsBase(fielddefs* fns)
161 : refarymem(), m_fns(fns), m_InvalidFlags(0)
165 inline void setFielddefs(fielddefs* def) { m_fns = def; }
167 virtual void removeLastMemBlock(){};
169 virtual void setRecordData(autoMemory* am,
unsigned char* ptr,
size_t size,
170 short* endFieldIndex,
bool owner =
false){};
172 inline void setInvalidMemblock(
short index)
178 int num = memoryBlockIndex(index);
179 m_InvalidFlags |= ((2L << num) | 1L);
190 return (m_InvalidFlags & 1) != 0;
196 m_InvalidFlags |= 1L;
198 m_InvalidFlags &= ~1L;
203 unsigned char* p = ptr(index);
204 bool nullfield = (m_InvalidFlags &
205 (2L << memoryBlockIndexCache())) != 0;
207 return field(p, (*m_fns)[index], m_fns, nullfield);
212 if (m_fns->checkIndex(index))
215 throwIndexError(index);
216 return field(NULL, dummyFd(), m_fns);
226 short index = m_fns->indexByName(name);
230 inline size_t size()
const {
return m_fns->size(); }
236 int index = m_fns->indexByName(name);
242 return m_fns->indexByName(name);
247 virtual void clear() = 0;
260 void releaseMemory(){}
262 inline unsigned char* ptr(
int index)
const
264 return nullPtr(index) + (*m_fns)[index].nullbytes();
267 inline unsigned char* nullPtr(
int index)
const
269 return ((
unsigned char*)m_tb.
data());
272 table* tbptr()
const {
return &m_tb; }
304 #endif // BZS_DB_PROTOCOL_TDAP_CLIENT_FIELDS_H
bool isInvalidRecord() const
Definition: fields.h:188
const fielddefs * fieldDefs() const
Definition: fields.h:245
friend class multiRecordAlocatorImple
Definition: fields.h:125
virtual ~fieldsBase()
Definition: fields.h:186
field fd(const _TCHAR *name) const
Definition: fields.h:234
const void * data() const
Definition: nsTable.h:163
field operator[](const _TCHAR *name) const
Definition: fields.h:219
short getCurProcFieldCount() const
static void throwError(const _TCHAR *caption, short statusCode)
friend class table
Definition: fields.h:130
field operator[](const std::_tstring &name) const
Definition: fields.h:224
field getFieldNoCheck(short index) const
Definition: fields.h:201
field inproc_fd(short index) const
Definition: fields.h:292
friend class recordCache
Definition: fields.h:129
boost::shared_ptr< table > table_ptr
Definition: fields.h:251
friend class recordsetImple
Definition: fields.h:126
フィールドコレクションクラス
Definition: fields.h:256
row * row_ptr
Definition: fields.h:253
void clearBuffer(eNullReset resetType=defaultNull)
boost::shared_ptr< database > database_ptr
Definition: fields.h:250
field operator[](short index) const
Definition: fields.h:210
テーブルアクセスクラス (nocopyable)
Definition: table.h:91
fielddef のコレクションクラス
Definition: field.h:74
size_t size() const
Definition: fields.h:230
recordset フィルタリングクエリー
Definition: groupQuery.h:107
fields(table &tb)
Definition: fields.h:279
void setInvalidRecord(bool v)
Definition: fields.h:193
フィールドコレクションのベースクラス
Definition: fields.h:123
void clear()
Definition: fields.h:286
fieldsBase row
Definition: fields.h:252
friend class groupQueryImple
Definition: fields.h:128
short getCurProcFieldIndex(short index) const
field fd(short index) const
Definition: fields.h:232
short inproc_size() const
Definition: fields.h:290
table & tb() const
Definition: fields.h:288
short indexByName(const _TCHAR *name) const
Definition: fields.h:240
fields(table_ptr tb)
Definition: fields.h:281
フィールドアクセスクラス
Definition: field.h:118