给std map加上一件外套

来源:互联网 发布:java webservices 书 编辑:程序博客网 时间:2024/04/27 14:49

给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

原创粉丝点击