文章目录
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中cell、iterator相关的核心函数都没用到,具体作用还有待学习。
- 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