2021SC@SDUSC openssl 堆栈

2021SC@SDUSC
3 堆栈

man DEFINE_STACK_OF

https://www.openssl.org/docs/man1.1.1/man3/sk_TYPE_num.html
https://blog.csdn.net/as3luyuan123/article/details/17081581

3.1 openssl堆栈

堆栈是一种先进后出的数据结构。 openssl大量采用堆栈来存放数据。
它实现了一个通用的堆栈,可以方便的存储任意数据。

它实现了许多基本的堆栈操作,主要有:
构建新堆栈(sk_new_null,sk_new)、
堆栈拷贝(sk_dup)、
插入数据(sk_insert)、 删除数据(sk_delete)、
查找数据(sk_find,sk_find_ex)、
入栈(sk_push)、 出栈(sk_pop)、
获取堆栈元素个数(sk_num)、 获取堆栈值(sk_value)、
设置堆栈值(sk_set)和堆栈排序(sk_sort)。

// 通用堆栈

//创建一个空栈,参数可指定排序方法,因为openssl不知道里面存放的是什么类型的数据,
// 所以排序方法需要用户实现,当参数为NULL,同下方法
OPENSSL_STACK *OPENSSL_sk_new(OPENSSL_sk_compfunc cmp);

//创建一个空栈,
OPENSSL_STACK *OPENSSL_sk_new_null(void);

//释放栈,并不释放栈内元素内存
void OPENSSL_sk_free(OPENSSL_STACK *);

//删除并释放所有栈内元素,最后释放栈,可以指定回调函数,栈每次释放一个元素都会回调该回调函数
void OPENSSL_sk_pop_free(OPENSSL_STACK *st, void (*func) (void *));

//栈深copy,
OPENSSL_STACK *OPENSSL_sk_deep_copy( const OPENSSL_STACK *,
                                     OPENSSL_sk_copyfunc c,
                                     OPENSSL_sk_freefunc f);

//在栈指定位置插入元素,成功返回该栈所有元素的个数
int OPENSSL_sk_insert(OPENSSL_STACK *sk, const void *data, int where);

//删除栈指定位置元素,成功返回删除的该元素
void *OPENSSL_sk_delete(OPENSSL_STACK *st, int loc);

//删除栈指定元素,成功返回删除的该元素
void *OPENSSL_sk_delete_ptr(OPENSSL_STACK *st, const void *p);

//在栈中查找指元素,成功返回该元素位置
int OPENSSL_sk_find(OPENSSL_STACK *st, const void *data);

//同上,
int OPENSSL_sk_find_ex(OPENSSL_STACK *st, const void *data);

//在栈顶添加一个元素,成功返回栈元素总数
int OPENSSL_sk_push(OPENSSL_STACK *st, const void *data);

//在栈位置0次添加一个元素,类似 insert(st,0);
int OPENSSL_sk_unshift(OPENSSL_STACK *st, const void *data);

//移出栈位置0处的元素,类似pop
void *OPENSSL_sk_shift(OPENSSL_STACK *st);

//在栈顶移出一个元素,并释放该元素内存,
void *OPENSSL_sk_pop(OPEN
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值