给std map加上一件外套
因 为在一个项目中需要保留大量信息,并且需要对这些信息进行增加,删除和查找等操作,所以就选用了map来进行信息存贮。因为map查找的次数是log级 的,所以查找速度很快,用了以后感觉不错。因为这个只有在c/c++中有,好像在delphi中没有,所以就有了将map包装成dll然后就可以供其他的 编程语言进行调用了。给自己以后程序中运用也比较方便,而且这样包装以后如果需要更改查找方式的时候只需要更改dll中方法就好了。
所以就封装了以下的接口:
/*****************************************************************
源程序名称: stdmap_interface.h
软件著作权:
系统名称:
模块名称: 标准map接口
功能说明: 实现map的增加、查询、删除等接口
相关文档:
作者: dj
审核: (可选的)
修改记录
修改日期:
修改人员:
修改说明:
*******************************************************************/
#ifndef _STDMAP_INTERFACE_H_
#define _STDMAP_INTERFACE_H_
#include "head.h"
///IKnown
///各类接口统一的查询与引用接口,所有插件提供的接口都要实现 IKnown (参照COM标准)
struct IKnown
{
///接口查询
/**查询与当前接口相关的其他接口,例如可以查到 IIoC, IManager 等
*@param const char * iid 接口全局唯一标识
*@param IKnown **ppv 返回iid对应的接口指针
*@return I_OK 成功,I_NONE 未查到iid 相应接口
*/
virtual unsigned long FUNCTION_CALL_MODE QueryInterface(const char * iid, IKnown **ppv ) = 0;
///引用接口,引用计数加一(多线程引用时,方法实现代码里要对计数值加锁后修改)
virtual unsigned long FUNCTION_CALL_MODE AddRef() = 0;
///释放接口,引用计数减一,计数为0时释放接口的实现对象(多线程引用时,方法实现代码里要对计数值加锁加锁后修改)
virtual unsigned long FUNCTION_CALL_MODE Release() = 0;
};
///ISTDMapInterface
struct ISTDMapInterface : IKnown
{
public:
//增加主键
virtual int FUNCTION_CALL_MODE AddKeyInMap(const char *pKey, const void *pValue) = 0;
//删除指定主键。
virtual int FUNCTION_CALL_MODE DelKeyFromMap(const char *pKey) = 0;
//查找一个主键值
virtual const void * FUNCTION_CALL_MODE SearchKeyInMap(const char *pKey) = 0;
//是否存在指定主键
virtual int FUNCTION_CALL_MODE IsKeyExist(const char *pKey) = 0;
//存在多少个主键
virtual int FUNCTION_CALL_MODE GetKeyNum() = 0;
//第一个主键
virtual const void * FUNCTION_CALL_MODE BeginKey() = 0;
//最后一个主键
virtual const void * FUNCTION_CALL_MODE EndKey() = 0;
//下一个主键
virtual const void * FUNCTION_CALL_MODE NextKey() = 0;
//删除当前主键
virtual void FUNCTION_CALL_MODE DeleteCurKey() = 0;
//删除所有主键
virtual void FUNCTION_CALL_MODE DeleteAllKey() = 0;
//加锁
virtual void FUNCTION_CALL_MODE Lock() = 0;
//解锁
virtual void FUNCTION_CALL_MODE Unlock() = 0;
};
///得到一个map实例
IKnown * FUNCTION_CALL_MODE GetMapInstance();
///释放指定的map实例
int FUNCTION_CALL_MODE FreeMapInstance(IKnown * pSTDMapInstance);
#endif