Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Курсовые проекты » Реалізація високоуровнего інтерфейсу навколо бази даних Berclee DB

Реферат Реалізація високоуровнего інтерфейсу навколо бази даних Berclee DB





IdxToMain (uint bulk_ret_buffer_size, bool fix, FileConf & conf);

void CheckIdxToMainForQueue (uint bulk_ret_buffer_size, bool fix, FileConf & conf);

void CheckIdxToMainForHash (uint bulk_ret_buffer_size, bool fix, FileConf & conf);

В 

inline void ExportForQueue (uint bulk_ret_buffer_size, FILE * f, hbTxn * tx);

inline void ExportForHash (uint bulk_ret_buffer_size, FILE * f, hbTxn * tx);

В 

inline void Import3 (Dbt * key, Dbt * data);

inline void Import2 (char * buf);

inline void Import1 (FILE * f, char * & buf1, uint &);

В 

inline void CheckForRefForQueue (uint bulk_ret_buffer_size);

inline void CheckForRefForHash (uint bulk_ret_buffer_size);

inline uint GetMaxRefRecBuf ();

В 

protected:

int sz;

IdxItem * idx;

RefItems ref;

В 

virtual void UsrOpen (hbTxn * tx, FileConf & conf, bool openidx, hbInitRt * irt = 0, u_int32_t flags = 0);

virtual void UsrClose ();

В 

inline virtual void ExportDBTemplate (FILE *, const char *, const char *) = 0;

inline virtual void ImportDBTemplate (char * buf1,

uint buf1len,

char * buf2,

uint buf2len,

hbObj * & Key,

hbObj * & Val) = 0;

public:

//! конструктор приймає масив ініціалізаторів (в тч індексів)

hbPTable (hbEnv & env, hbInit & ini1);

virtual ~ HbPTable ();


// перевірка індексного цілісності

void CheckIdx (uint bulk_ret_buffer_size, bool fix);


// перевірка посилальної цілісності

void CheckForRef (uint bulk_ret_buffer_size);


void Export (uint bulk_ret_buffer_size, FILE * f, hbTxn * tx);

void Import (FILE * f, char * & buf, uint &);


virtual int Pget (hbTxn * tx, int n, hbObj * fkey, hbObj * pkey, hbObj * val, u_int32_t flags = 0)

{return idx [n]. table.Pget (tx, fkey, pkey, val, flags);}

hbBasetbl & GetIdx (int n)

{Return idx [n]. Table;}

inline uint GetIdxCount () {return sz;}

inline uint GetRecSize () {return recsize;}


};

Як бачимо, цей клас розширює старий інтерфейс шляхом введення утилітарних методів експорту, імпорту, різного роду перевірок та операціями з індексними таблицями. Однак цей клас також не зручна в роботі, так як не знає нічого про типи структур і її характеристиках. Введення цих типів як параметрів шаблону дозволило б дуже спростити роботу з інтерфейсом індексованою таблиці (але не розширити!). Результат наведено нижче:

template class hbTable: public hbPTable

{

public:

//! конструктор приймає масив ініціалізаторів (в тч індексів)

hbTable (hbEnv & e, hbInit & ini1): hbPTable (e, ini1) {SetRecSize (sizeof (Val)); SetKeySize (sizeof (Key));}

// SetRecSize use by QUEUE only

virtual ~ HbTable () {}


// більш просунуті функції

int Get (const bexcp & excp, hbTxn * tx, const Key & key, Val * val, u_int32_t flags = 0)

{p> Get (excp, tx, (Key *) & key, val, flags);

} br/>

int Pget (const bexcp & excp, hbTxn * tx, int n, hbObj * fkey, Key * pkey, Val * Val, u_int32_t flags = 0)

{p> MTRY

hbRec k;

hbRec v;

int z = Pget (tx, n, fkey, & k, & v, flags);

* Pkey = * (k.getPnt ());

* Val = * (v.getPnt ());

return z;

CATCH_hbExcp

} p> int Del (const bexcp & excp, hbTxn * tx, const Key & key, u_int32_t flags = 0)

{

Del (excp, tx, (Key *) & key, flags);

} p> int tGet (const bexcp & excp, hbTxn * tx, Key * key, Val * val, u_int32_t flags = 0)

{p> MTRY

hbRec k (* key);

hbRec v;

int z = tGet (tx, & k, & v, flags);

* Val = * (v.getPnt ());

return z;

CATCH_hbExcp

} p> int Put (const bexcp & excp, hbTxn * tx, const Key & key, const Val & val, u_int32_t flags = 0)

{p> Put (excp, tx, (Key *) & key, (Val *) & val, flags);

} p> uint Append (const bexcp & excp, hbTxn * tx, Val * val)

{p> MTRY

if (GetType () ! = DB_QUEUE) return 0;

hbRec k;

hbRec v (* val);

hbBasetbl :: Put (tx, & k, & v, DB_APPEND);

return (uint &) * (k.getPnt ());

CATCH_hbExcp

} p> uint Append (const bexcp & excp, hbTxn * tx, const Val & val)

{p> return Append (excp, tx, (Val *) & val);

} p>};

Цей параметризованих клас насправді тільки перевизначив сигнатури методів більш зручними і працюючими з користувача...


Назад | сторінка 7 з 14 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Return to materialism
  • Реферат на тему: У фокусі Microsoft Virtual Server 2005
  • Реферат на тему: Поняття та використання Network File System
  • Реферат на тему: Managing a "virtual team" on a project
  • Реферат на тему: Немає нічого більш складного і тому більш цінного, ніж мати можливість прий ...