游标
结构定义
游标用于通过函数 mco_cursor_first()
、mco_cursor_last()
、mco_cursor_prev()
和 mco_cursor_next()
导航索引搜索返回的记录集。游标结构还用于调用生成的 index_cursor
函数和 mco_uda_cursor()
。
以下是 mco.h
中定义的 mco_cursor_t 结构的定义:
#define mco_cursor_size (100*sizeof(mco_offs_t)) // 游标结构大小
typedef struct mco_cursor_t_
{
MCO_PUB_STRUCT_BASE c[mco_cursor_size_w]; // 包含 100 个偏移量值,为满足搜索条件的数据库记录的地址。
} mco_cursor_t, /* 游标(结构) */
*mco_cursor_h; /* 游标柄(指针) */
游标类型
游标根据其操作的索引类型而分为不同的类型。在 mco.h
中定义了以下游标类型:
typedef enum MCO_CURSOR_TYPE_E_
{
MCO_LIST_CURSOR = 0, // 列表(哈希)索引游标
MCO_TREE_CURSOR = 1, // 树索引游标
MCO_HASH_CURSOR = 2, // 哈希索引游标
MCO_KDTREE_CURSOR = 3, // KD树索引游标
MCO_PTREE_CURSOR = 4, // 帕特里夏树索引游标
MCO_RTREE_CURSOR = 5 // R 树索引游标
} MCO_CURSOR_TYPE;
操作代码
在调用索引搜索函数以返回游标时,必须指定以下游标操作代码(操作码)之一:
typedef enum MCO_OPCODE_E_
{
MCO_NOP = 0, /* 无操作 */
MCO_LT = 1, /* 小于样本的值 */
MCO_LE = 2, /* 小于或等于样本的值 */
MCO_EQ = 3, /* 与样本相等的值 */
MCO_GE = 4, /* 大于或等于样本的值 */
MCO_GT = 5, /* 大于样本值 */
MCO_OVERLAP = 6, /* R 树,重叠区域 */
MCO_CONTAIN = 7, /* R 树,包含区域 */
MCO_EX = 8, /* 帕特里夏树,完全匹配 */
MCO_BEST = 9, /* Patricia树,最好及最长的匹配 */
MCO_PREF = 10, /* 帕特里夏树,前缀匹配 */
MCO_NEXT_MATCH = 11, /* 帕特里夏树,继续搜索,不重新开始 */
MCO_NEIGHBOURHOOD = 12, /* R 树,列出样本对象的距离 */
MCO_NEIGHBORHOOD = MCO_NEIGHBOURHOOD, /* 美式同义词 */
MCO_BELONG = MCO_LE /* 帕特里夏树, sample belongs to value */
} MCO_OPCODE;