⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mdbdict.h

📁 一个自行开发的内存数据管理的包
💻 H
字号:
#ifndef __MDbDict_h__
#define __MDbDict_h__

#include "ace/PI_Malloc.h"
#include "ace/Process.h"
#include "ace/Process_Mutex.h"
#include "ace/OS_NS_unistd.h"
#include "ace/Based_Pointer_T.h"
#include "Exception.h"
#include "MdbApi.h"

//typedef ACE_Malloc_T<ACE_SHARED_MEMORY_POOL, ACE_Process_Mutex, ACE_PI_Control_Block> MALLOC;
typedef ACE_Malloc_T<ACE_SHARED_MEMORY_POOL,ACE_Process_Mutex,ACE_PI_Control_Block> MALLOC;
//typedef ACE_Malloc_T<ACE_MMAP_MEMORY_POOL,ACE_Process_Mutex,ACE_PI_Control_Block> MALLOC;
//typedef ACE_Malloc<ACE_SHARED_MEMORY_POOL,ACE_Process_Mutex> MALLOC;

#define TBL_META_MAX_TABLE_NAME_LEN		20
#define TBL_META_MAX_COL_NAME_LEN		20
#define TBL_META_MAX_INDEX_NAME_LEN		20
#define TBL_META_MAX_SHARE_PROCESS		100	/**< add by mol */

#define CIT_INT8					1
#define CIT_INT16					2
#define CIT_INT32					3
#define CIT_INT64					4
#define CIT_CHARARRAY				5
#define CIT_STRING				6


struct CDbColumnMeta;
struct CDbIndexMeta;

struct CProcNode
{
pid_t m_nPid;
ACE_Based_Pointer<CProcNode> m_psNext;
ACE_Based_Pointer<ACE_Based_Pointer<CProcNode> > m_ppsPrev;
};

struct CDbTableMeta
{
char m_szTblName[TBL_META_MAX_TABLE_NAME_LEN];
int  m_nRecLen;   //单条记录的字节数
//CTableEntry                     m_sTblEntry;
ACE_Based_Pointer_Basic<void>	    m_psTblEntry;
pid_t					    m_nOwnerPid;   //表拥有者进程标识
ACE_Based_Pointer<CProcNode>	    m_psSharePids;  //表共享者进程标识
//以下部分不可见
int  m_nColCnt;
ACE_Based_Pointer<CDbColumnMeta> m_psColumns;
int  m_nIdxCnt;
ACE_Based_Pointer<CDbIndexMeta> m_psIndexs;
ACE_Based_Pointer<CDbTableMeta> m_psNext;
CProcNode m_shareProcesses[TBL_META_MAX_SHARE_PROCESS];	/**< add by mol */
bool m_bShareProcMark[TBL_META_MAX_SHARE_PROCESS];		/**< add by mol */
};

struct CDbColumnMeta
{
char m_szColName[TBL_META_MAX_COL_NAME_LEN];
int  m_nColType;  //字段类型:1,number 2,char 3,varchar
int  m_nColTypeLen; //字段类型长度,如char(4)即为4
int  m_nColLen;   //字段实际长度,以字节计
int  m_nInternalType; //字段内部类型 , CIT_INT8,CIT_INT16,CIT_INT32,CIT_INT64,CIT_STRING
int  m_nOffset;   //字段在record中的偏移量
//int  m_bNullAllowed;   //是否非空
};

struct CDbIndexMeta
{
char m_szIndexName[TBL_META_MAX_INDEX_NAME_LEN];
int  m_nIdxType;  //index类型:1,hash;2,avl tree;3,rb tree;4,4叉数
ACE_Based_Pointer_Basic<void>  m_psIndexEntry;
//以下部分不可见
int  m_nColCnt;
ACE_Based_Pointer<ACE_Based_Pointer<CDbColumnMeta> > m_ppsColumns;
};

class CMdbDict
{
public:
CMdbDict(MALLOC *pcAlloc) { m_pcAlloc = pcAlloc; }
~CMdbDict() {}
void touch(ACE_Based_Pointer<CDbTableMeta> *ppsTableMeta) { m_ppsTableMeta = ppsTableMeta; }
CDbTableMeta  *findTableMeta(const char *szTblName);
CDbTableMeta  *getTableMeta(const char *szTblName);
CDbTableMeta  *enumTableMeta(CDbTableMeta  *psPrevTblMeta);
CDbColumnMeta *findColumMeta(CDbTableMeta *psDbTableMeta,const char *szColName);
CDbTableMeta  *insertTableMeta(SCreateTblPara *psCreateTblPara,SCreateIdxesPara *psCreateIdxesPara);
void deleteTableMeta(const char *szTableName);
int getColumnCnt(const CDbTableMeta *psTableMeta) { return psTableMeta->m_nColCnt; }
CDbColumnMeta *getColumnMeta(const CDbTableMeta  *psTableMeta,int i) { return &(((CDbColumnMeta *)(psTableMeta->m_psColumns))[i]); }
int getIndexCnt(const CDbTableMeta  *psTableMeta) { return psTableMeta->m_nIdxCnt; }
CDbIndexMeta *getIndexMeta(const CDbTableMeta  *psTableMeta,int i) { return &(((CDbIndexMeta *)(psTableMeta->m_psIndexs))[i]); }
int getIndexColCnt(const CDbIndexMeta *psIndexMeta) { return psIndexMeta->m_nColCnt; }
CDbColumnMeta *getIndexColMeta(const CDbIndexMeta *psIndexMeta,int i) { ACE_Based_Pointer<CDbColumnMeta> *ppsColumns = psIndexMeta->m_ppsColumns; return (CDbColumnMeta *)(ppsColumns[i]); }
bool fieldIsIndexKey(const char *szFieldName,CDbIndexMeta *psIndexMeta);
CProcNode *insertSharePid(CDbTableMeta *psTableMeta,int nPid);
void deleteSharePid(CDbTableMeta *psTableMeta, CProcNode *psNode);
CProcNode *enumSharePid(CDbTableMeta *psTableMeta,CProcNode *psPrevNode);
bool checkSharePidsExist(CDbTableMeta *psTableMeta) { return (CProcNode *)(psTableMeta->m_psSharePids) != (CProcNode *)NULL; }
private:
void calcInterPresent(int &nInternalType,int &nColLen,const char *pTblName,const char *pColName,int nColType,int m_nColTypeLen);
private:
ACE_Based_Pointer<CDbTableMeta>  *m_ppsTableMeta;
MALLOC *m_pcAlloc;
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -