📄 rvtree.h
字号:
/******************************************************************************
Filename: rvtree.h
Description: balanced binary tree class
*******************************************************************************
Copyright (c) 2000 RADVision Inc.
*******************************************************************************
NOTICE:
This document contains information that is proprietary to RADVision LTD.
No part of this publication may be reproduced in any form whatsoever
without written prior approval by RADVision LTD..
RADVision LTD. reserves the right to revise this publication and make
changes without obligation to notify any person of such revisions or
changes.
******************************************************************************/
#ifndef RV_TREE_H
#define RV_TREE_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stddef.h>
#include "rvtypes.h"
#include "rvalloc.h"
struct RvTreeNode;
typedef void (*RvCopyConstructFunc)(void *, const void *, RvAlloc *);
typedef void (*RvDeleteFunc)(void *);
typedef RvBool (*RvCompFunc)(const void *, const void *);
typedef struct
{
size_t keySize, valueSize;
RvCopyConstructFunc keyConstructCopy, valueConstructCopy;
RvDeleteFunc keyDestruct, valueDestruct;
RvCompFunc keyLess, keyEqual;
} RvTreeInfo;
typedef struct
{
struct RvTreeNode *tree;
RvAlloc *allocator;
const RvTreeInfo *info;
size_t count;
} RvTree;
RvTree *rvTreeConstruct(RvTree *tree, RvAlloc *allocator, const RvTreeInfo *info);
void rvTreeDestruct(RvTree *tree);
RvTree *rvTreeConstructCopy(RvTree *d, const RvTree *s, RvAlloc *a);
RvTree *rvTreeCopy(RvTree *d, const RvTree *s);
void rvTreeSetValue(RvTree *tree, const void *key, const void *value);
const void *rvTreeGetValue(const RvTree *tree, const void *key);
void *rvTreeFindValue(const RvTree *tree, const void *key);
void rvTreeRemove(RvTree *tree, const void *key);
size_t rvTreeSize(const RvTree *tree);
void rvTreeClear(RvTree *tree);
RvAlloc* rvTreeGetAllocator(const RvTree *tree);
typedef struct RvTreeNode *RvTreeIter;
typedef struct RvTreeNode *RvTreeRevIter;
RvTreeIter rvTreeBegin(const RvTree *tree);
RvTreeIter rvTreeEnd(const RvTree *tree);
RvTreeRevIter rvTreeRevBegin(const RvTree *tree);
RvTreeRevIter rvTreeRevEnd(const RvTree *tree);
/* Forward iterator */
RvTreeIter rvTreeIterNext(RvTreeIter iter);
RvTreeIter rvTreeIterPrev(RvTreeIter iter);
#define rvTreeIterEqual(a,b) ((a) == (b))
#define rvTreeIterCopy(a,b) ((a) = (b))
const void *rvTreeIterGetKey(RvTreeIter iter);
void *rvTreeIterGetValue(RvTreeIter iter, const RvTreeInfo *info);
/* Reverse iterator */
RvTreeRevIter rvTreeRevIterNext(RvTreeRevIter iter);
RvTreeRevIter rvTreeRevIterPrev(RvTreeRevIter);
#define rvTreeRevIterEqual(a,b) ((a) == (b))
#define rvTreeRevIterCopy(a,b) ((a) = (b))
const void *rvTreeRevIterGetKey(RvTreeRevIter iter);
void *rvTreeRevIterGetValue(RvTreeRevIter iter, const RvTreeInfo *info);
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -