?? usortfile.h
字號:
/*******************************************************************************************
* *
* Ubase-III *
* *
* Copy Right 2001-2002,LandStanding Co.,Ltd.NewLand Group. All Right Reserved. *
* *
* *
******************************************************************************************/
/******************************************************************************************
*
* FILE:
* uSortFile.h
*
* Introduction:
* 對排序定長記錄文件的記錄讀寫、刪除等操作。
*
* Logs:
* 2002.11.04 Created by ChenXiaoyuer
* 2005.4.10 Modified by ChenGuolian
*
*******************************************************************************************/
#ifndef __SORTRECORDFILE_H__
#define __SORTRECORDFILE_H__
#include <ubase.h>
#define BLOCK64 64 // 模糊查詢時,每次讀取塊數64
#define BLOCK128 128 // 模糊查詢時,每次讀取塊數128
#define BLOCK256 256 // 模糊查詢時,每次讀取塊數128
// 函數參數修飾符
#define INOUT
#define IN
#define OUT
// 部分返回值定義
#ifndef ACTION_SUCCESS
#define ACTION_FAIL -2
#define ACTION_CANCEL -1
#define ACTION_SUCCESS 0
#endif
#define SORTMAXPATH 256
#define IN
#define OUT
#define INOUT
#define RECCNT_PERBLK 128 // 每塊的記錄條數
#define MFree(ptr) {if(ptr!=NULL)free(ptr);ptr=NULL;}
class CSortRecordFile {
public:
CSortRecordFile(IN const char *szRecordFileName, IN unsigned int nRecLen, IN unsigned int nStartOffset=0, BOOL isCreate = FALSE );
CSortRecordFile();
~CSortRecordFile();
// -------------------------------------------------------------------------------------
// 文件打開關閉等最外部的公共函數
// -------------------------------------------------------------------------------------
public:
BOOL Open(IN const char *szRecordFileName, IN unsigned int nRecLen, IN unsigned int nStartOffset=0, BOOL isCreate = FALSE );
BOOL Close(void);
int GetRecordCount (void); // 獲取排序定長文件記錄條數
long GetFileBytes (void); // 獲取排序定長文件總字節數
// -------------------------------------------------------------------------------------
// 復合文件記錄操作函數,調用文件記錄操作函數
// -------------------------------------------------------------------------------------
public:
BOOL QuickSort( // 快速排序
IN unsigned int nCompFieldOffset, /* 排序比較字段位移 */
IN unsigned int nCompFieldLength, /* 排序比較字段長度 */
IN unsigned int nStartRecordNO, /* 起始記錄號 */
IN unsigned int nEndRecordNO /* 結束記錄號 */
);
BOOL InsertRecord ( // 插入一條記錄
IN const void *pRecBuff, /* 記錄緩沖 */
IN unsigned int nCompFieldOffset, /* 比較字段在記錄中位移 */
IN unsigned int nCompFieldLength /* 比較字段在記錄中長度 */
);
BOOL DeleteRecord ( // 刪除一條記錄
IN const void *CompBuff, /* 記錄緩沖 */
IN unsigned int nCompFieldOffset, /* 比較字段在記錄中位移 */
IN unsigned int nCompFieldLength /* 比較字段在記錄中長度 */
);
BOOL UpdateRecord ( // 修改一條記錄
IN const void *pRecBuff, /* 記錄緩沖 */
IN unsigned int nCompFieldOffset, /* 比較字段在記錄中位移 */
IN unsigned int nCompFieldLength /* 比較字段在記錄中長度 */
);
// -------------------------------------------------------------------------------------
// 文件記錄操作函數,調用OS 文件操作函數
// -------------------------------------------------------------------------------------
public: // 對文件記錄操作
BOOL WriteRecord( // 寫入一條記錄
IN long nOffset, /* 文件指針位移 */
IN const void *WriteBuff, /* 內存緩沖地址 */
IN unsigned int BytesToWrite, /* 寫入文件字節 */
OUT int *BytesWritten /* 實際寫入字節 */
);
BOOL ReadRecord ( // 讀取一條記錄
IN long nOffset, /* 文件指針位移 */
OUT void *ReadBuff, /* 內存緩沖地址 */
IN unsigned int BytesToRead, /* 讀入內存字節 */
OUT int *BytesRead /* 實際讀入字節*/
);
long FindRecord ( // 查找一條記錄
IN const void *CompBuff, /* 比較緩沖 */
IN unsigned int nRecOffset, /* 比較在記錄中的位移 */
IN unsigned int nCompBytes, /* 比較長度 */
OUT int *nCompResult /* 比較結果 */
);
BOOL MoveRecordAfterOffset( // 大批量移動記錄
unsigned long nMoveBeginOffset, /* 開始文件位移 */
long nMoveOffset /* 移動文件位移 */
);
// -------------------------------------------------------------------------------------
// 2002/12/30 添加的模糊查詢函數
// -------------------------------------------------------------------------------------
long BlueSearchRecord ( // 模糊查找一條記錄,并返回查找到第一條記錄
IN const void *CompBuff, /* 比較緩沖 */
IN unsigned int nRecOffset, /* 比較在記錄中相對位移 */
IN unsigned int nCompBytes, /* 比較長度 */
OUT int *nCompResult /* 比較結果 */
);
// -------------------------------------------------------------------------------------
// 由快速排序調用的內部函數
// -------------------------------------------------------------------------------------
private:
int _qsort_findpivot (
IN unsigned int nStartRecordNO,
IN unsigned int nEndRecordNO
);
int _qsort_partition (
IN unsigned int nCompFieldOffset,
IN unsigned int nCompFieldLength,
IN unsigned int nStartRecordNO,
IN unsigned int nEndRecordNO,
IN unsigned int nPivotRecordNO
);
BOOL _qsort_swap (
IN unsigned int nStartRecordNO,
IN unsigned int nEndRecordNO
);
BOOL _qsort_getkey (
IN unsigned int nCompFieldOffset,
IN unsigned int nCompFieldLength,
IN unsigned int nRecordNO,
OUT void *pKeyBuff
);
// -------------------------------------------------------------------------------------
private:
BOOL BlueSearchData (
IN const void *szSrcData,
IN unsigned int nSrcLen,
IN const void *szDestData,
IN unsigned int nDestLen
);
// -------------------------------------------------------------------------------------
private:
ZFILE *zfp;
char m_szFileName[SORTMAXPATH];
BOOL m_bisAscending; // 升序文件或降序文件
unsigned int m_nRecLen; // 固定記錄長度
unsigned int m_nStartOffset; // 記錄在文件中起始位移
};
#endif
////////////////////////////////////////////////////////////////////////////////////////
// [11/5/2002] end line of sortfile.h
////////////////////////////////////////////////////////////////////////////////////////
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -