OPNET 自带数据类型List和Mapping的使用

List

OPNET官方Help文档中 Programmers Reference > Data Structures and Algorithms > List Package 给出了List相关的核心函数。下面只涉及到最基本的核心函数,完成链表的基本操作。

一般操作
链表生成
PrgT_List* listPtr = prg_list_create();
链表插入

链表中可以插入一般类型(int/double等),也可以插入数据包指针,也可以插入自己定义的数据类型如结构体。
插入的位置posIndex为int类型,从0开始计数,到listSize-1截止。

//同C CPP,不需要定义指向下个节点的指针
typedef struct myStruct{
	myType A;
	myType B;
}myStruct;

myStruct* nodePtr = prg_mem_alloc(sizeof(myStruct));
//赋值
nodePtr->A=XX;
nodePtr->B=XXX;


//加入到链表尾部
prg_list_insert(listPtr,nodePtr,PRGC_LISTPOS_TAIL);
//加入到链表其他位置
prg_list_insert(listPtr,nodePtr,posIndex);
链表节点删除

删除节点的位置posIndex为int类型,从0开始计数,到listSize-1截止。

prg_list_remove(listPtr,posIndex);
链表遍历
int listSize = prg_list_size(listPtr);
//从0开始遍历
for(int i=0;i<listSize;++i){
	myStruct* nodePtr = prg_list_access(listPtr);
	//...其他操作
}
链表销毁
prg_list_free(listPtr); //销毁链表里的各个元素,该链表还是可以继续使用
prg_mem_free(listPtr); //销毁链表本身
快速遍历
iterator相关核心函数

首先需产生一个指针
PrgT_List_Iterator* iter = prg_list_ierator_create();
将该指针绑定到List
prg_list_ierator_attach(iter,listPtr);

cell相关核心函数
  • 头文件是prg_list_funcs.h
  • List Package中celliterator相关的核心函数都没用到,具体作用还有待学习。
  • OPNET编程中,变量的声明不能夹杂在代码中,需在每个状态的入口代码、出口代码最开始,函数FIN前全部声明。


Mapping

mapping pakage提供了存储、检索数据元素的功能。每个数据元素(value)都与一个key值相映射。按照key值大小升序依次遍历。

基本操作
生成mapping

需要提供三个函数,通过value计算key值函数,key值比较函数、元素销毁函数。
以创建一个元素是结构体,key值是结构体中的一个数据为例

typedef struct myStruct{
	int A;
	mytype B;
}myStruct;

myMap = prg_mapping_create(map_fun1,map_fun2,map_fun3);

//通过value计算key值函数
static int* map_fun1(myStruct* value){
	FIN(map_fun1(myStruct* value));
	FRET(&(value->A));
}

//key值比较函数
//填充PRGC_NIL,则默认使用"<"
static int* map_fun2(int* key1, int* key2){
	FIN(map_fun2(int* key1, int* key2));
	if(*key1<*key2)
		FRET(1)
	else
		FRET(0)
}
//元素销毁函数
static void* map_fun3(myStruct* value){
	FIN(map_fun3(myStruct* value));
	op_prg_mem_free(value);
	FOUT;
}
插入元素
myStruct* value = op_prg_mem_alloc(sizeof(myStruct));
value->A = xx;
value->B = xxx;
prg_mapping_value_add(myMap,value);
通过key值得到value

myStruct* value = prg_mapping_value_get(myMap,key);

mapping的size

prg_mapping_size(myMap);

删除元素

prg_mapping_value_remove(myMap,value)
prg_mapping_key_remove(myMap,key)

销毁mapping

clear函数清除mapping里的元素,mapping回到刚开始产生的状态,destroy函数销毁mapping里的元素及mapping本身。
prg_mapping_clear(myMap);
prg_mapping_destroy(myMap);

iterator相关操作
通过iterator删除元素

删除当前指针指向的元素
prg_mapping_iterator_value_remove(myMap)

通过iterator遍历元素
prg_mapping_iterator_init(myMap);
while(!prg_mapping_iterator_at_end(myMap)){
	//value值
	myStruct* value = prg_mapping_iterator_value_get(myMap);
	//key值,两种方式
	int key = prg_mapping_iterator_key_get(myMap);
	int key = value->A;
	//...其他操作,如删除等
	//iterator移动
	prg_mapping_iterator_advance(myMap);
}

头文件是prg_mapping.h

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值