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

📄 usortfile.h

📁 嵌入式系统的文件下载源码。实现各类文件的无线下载功能
💻 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 + -