⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rvgraph.h

📁 h.248协议源码
💻 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 + -