📄 rvgraph.h
字号:
/******************************************************************************
Filename: rvgraph.h
Description: graph 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_GRAPH_H
#define RV_GRAPH_H
#include "rvlist.h"
#if defined(__cplusplus)
extern "C" {
#endif
struct RvGraphNode_;
typedef struct
{
struct RvGraphNode_ *node;
void *data;
} RvGraphLink;
rvDeclareList(RvGraphLink)
typedef struct RvGraphNode_
{
void *item;
RvList(RvGraphLink) out, in;
} RvGraphNode;
rvDeclareList(RvGraphNode)
typedef struct
{
RvList(RvGraphNode) nodes;
} RvGraph;
typedef RvBool (*RvGraphLinkCmpFunc)(void *link, void *data);
/* return rvTrue from callbacks to terminate for-each loops */
typedef RvBool (*RvGraphNodeFunc)(void *node, void *data);
typedef RvBool (*RvGraphLinkFunc)(void *head, void *tail, void *link, void *data);
RvGraph *rvGraphConstructA(RvGraph *graph, RvAlloc *alloc);
RvGraph *rvGraphConstructCopy(RvGraph *d, const RvGraph *s, RvAlloc *alloc);
void rvGraphDestruct(RvGraph *graph);
RvGraph *rvGraphCopy(RvGraph *d, const RvGraph *s);
void rvGraphAddNode(RvGraph *graph, void *node);
void rvGraphRemoveNode(RvGraph *graph, void *node);
void rvGraphRemoveNodeExt(RvGraph *graph, void *node,RvGraphLinkFunc f,void * data);
void rvGraphClear(RvGraph *graph); /* remove all nodes and links */
void rvGraphAddLink(RvGraph *graph, void *head, void *tail, void *data);
void rvGraphRemoveLink(RvGraph *graph, void *head, void *tail, void *data);
void rvGraphRemoveLinkCmp(RvGraph *graph, void *head, void *tail,RvGraphLinkCmpFunc f,void *data);
void rvGraphClearLinks(RvGraph *graph);
size_t rvGraphGetNumNodes(RvGraph *graph);
typedef RvListIter(RvGraphNode) RvGraphNodeIter;
#define rvGraphNodeIterGetNode(i) (rvListIterData(i)->item)
#define rvGraphNodeIterNext rvListIterNext
#define rvGraphNodeIterPrev rvListIterPrev
typedef RvListIter(RvGraphLink) RvGraphLinkIter;
#define rvGraphLinkIterGetData(i) (rvListIterData(i)->data)
#define rvGraphLinkIterGetNode(i) (rvListIterData(i)->node->item)
#define rvGraphLinkIterNext rvListIterNext
#define rvGraphLinkIterPrev rvListIterPrev
RvGraphNodeIter rvGraphBegin(RvGraph *graph);
RvGraphNodeIter rvGraphTail(RvGraph *graph);
RvGraphNodeIter rvGraphEnd(RvGraph *graph);
RvGraphNodeIter rvGraphFindNode(RvGraph *graph, void *node);
RvGraphNodeIter rvGraphFindNodeIterCmp(RvGraph *graph, RvGraphNodeFunc f,void * data);
void * rvGraphFindNodeCmp(RvGraph *graph, RvGraphNodeFunc f,void * data);
void rvGraphRemoveNodeIter(RvGraph *graph, RvGraphNodeIter iter,RvGraphLinkFunc f,void * data);
RvGraphLinkIter rvGraphNodeOutLinksBegin(RvGraphNodeIter i);
RvGraphLinkIter rvGraphNodeOutLinksEnd(RvGraphNodeIter i);
RvGraphLinkIter rvGraphNodeInLinksBegin(RvGraphNodeIter i);
RvGraphLinkIter rvGraphNodeInLinksEnd(RvGraphNodeIter i);
size_t rvGraphNodeGetNumOutLinks(RvGraphNodeIter i);
size_t rvGraphNodeGetNumInLinks(RvGraphNodeIter i);
/* for-each functions return rvTrue if loop was terminated */
RvBool rvGraphForEachNode(RvGraph *graph, RvGraphNodeFunc f, void *data);
RvBool rvGraphForEachLink(RvGraph *graph, RvGraphLinkFunc f, void *data);
RvBool rvGraphForEachLinkFromNode(RvGraph *graph, void *node, RvGraphLinkFunc f, void *data);
RvBool rvGraphForEachLinkToNode(RvGraph *graph, void *node, RvGraphLinkFunc f, void *data);
void * rvGraphFindLinkFromNodeIter(RvGraph *graph, RvGraphNodeIter nodeIter,RvGraphNodeIter tailIter,RvGraphLinkCmpFunc f, void *data);
void * rvGraphFindLinkFromNode(RvGraph *graph, void *node,void * tail,RvGraphLinkCmpFunc f, void *data);
void * rvGraphFindLinkToNode(RvGraph *graph, RvGraphNodeIter nodeIter,RvGraphNodeIter headIter,RvGraphLinkCmpFunc f, void *data);
RvAlloc *rvGraphGetAllocator(const RvGraph *graph);
#if defined(__cplusplus)
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -