Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

xSofter/axe

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

302 Commits

Repository files navigation

AXE


AXE是 一个面向C语言的工具函数库,包含了通用容器和算法,可以很大程度简化C程序的开发.

COMPILE AND INSTALL

该函数库可以使用 make(1)编译和安装,使用make debug将函数库编译为调试版本,安装程序会将头文件、库文件和手册页文件正确复制到系统的特定目录中.

$ cd axe
$ make
$ sudo make install

HOW TO USE

您可以直接通过引入相关头文件来使用它们的功能,下面是一个样例程序,这其中包括一些有趣的特性,比如链表、迭代器算法、RAII、对象转储和容器遍历等操作. 在编译客户程序时需要通过加入编译参数-lax-laxut来连接相关的库文件. 详细的帮助文档请参考MAN手册页,它们位于工程目录的 man/man3 目录下,或参考单元测试程序和附带的样例程序,它们分别位于工程目录的 testsample 目录.

/* gcc foo.c -lax */
#include "ax/algo.h" /* 引入算法函数 */
#include "ax/list.h" /* 引入双连表 */
#include "ax/ptra.h" /* 引入自动指针 */
#include <stdlib.h>
#include <stdio.h>
/* 定义一个一元算子函数 */
void oper_rmodd(void *out, const void *in, void *args)
{
	const int *num = in;
	int *ret = out;
	if (*num % 2 == 1) /* 如果输入为基数,则输出为0 */
		*ret = 0;
}
int main(void)
{
	/* 定义一个双链表 */
	ax_list_r l = ax_new(list, ax_t(int));
	int *count = malloc(sizeof *count);
	/* 将双链表指针和堆变量加入范围块,当范围执行结束后,链表自动被释放,可放置多个指针 */
	ax_scope(l.one, ax_onelize(count)) {
		/* 对区间[1, 11)进行循环迭代 */
		ax_forrange(1, 11)
			/* 将区间每个元素逐个压入链表 */
			ax_seq_push(l.seq, &_);
		/* 对双链表进行转储 */
		ax_any_so(l.any);
		// OUTPUT: string.c:12:one.any.box.seq.list {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
		/* 创建一个一元谓词 */
		ax_pred rmodd = ax_pred_unary_make(oper_rmodd, NULL, NULL);
		/* 从头迭代器所在元素开始逐个执行谓词,将所有奇数元素设为0 */
		ax_transform(
				ax_p(ax_citer, ax_box_cbegin(l.box)),
				ax_p(ax_citer, ax_box_cend(l.box)),
				ax_p(ax_iter, ax_box_begin(l.box)),
				&rmodd);
		/* 对双链表进行DUMP */
		ax_any_so(l.any);
		// OUTPUT: string.c:33:one.any.box.seq.list {0, 2, 0, 4, 0, 6, 0, 8, 0, 10}
		/* 按顺序枚举链表所有元素,求和 */
		ax_box_foreach(l.box, int *, i)
			*count += *i;
		printf("Sum of elements = %d\n", *count);
		// OUTPUT: Sum of elements = 30
	}
	return 0;
}

HEADERS DESCRIPTION

名称 描述
ax/def.h 基础类型定义
ax/flow.h 程序流程控制
ax/trick.h 低级辅助宏,用于宏定义
ax/narg.h 参数个数计算的辅助宏
ax/sys.h 操作系统探测宏
ax/arch.h 硬件架构探测宏
ax/debug.h 断言
ax/arraya.h 自动数组
ax/oper.h 算子,包括C语言运算符的函数化包装
ax/dump.h 容器内容的可视化转储
ax/log.h 日志打印
ax/pred.h 谓词和参数绑定
ax/trait.h 类型特性,对数据类型的描述
ax/iter.h 迭代器封装
ax/algo.h 基于迭代器的算法
ax/mem.h 内存和串的操作
ax/uintk.h 1024位无符号整数操作
ax/one.h 根类型
ax/any.h 可序列化对象抽象
ax/box.h 可迭代容器抽象
ax/seq.h 线性表抽象
ax/str.h 字符串抽象
ax/map.h 映射表抽象
ax/trie.h 字典树抽象
ax/tube.h 单进单出管道抽象
ax/arr.h 无内存分配的数组实现
ax/vector.h 向量表实现
ax/deq.h 双端队列实现
ax/list.h 双链表实现
ax/hmap.h 散列表实现
ax/avl.h 自平衡树实现
ax/rb.h 红黑树实现
ax/string.h 字符串实现
ax/btrie.h 平衡字典树实现
ax/queue.h 队列实现
ax/stack.h 栈实现
ax/pque.h 优先队列实现
axut/case.h 测试用例结构定义
axut/suite.h 测试用例集合
axut/runner.h 执行和统计测试用例

LICENSE

该软件程序基于MIT协议发布.

AUTHOR

李希林 lihsilyn@gmail.com

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 98.7%
  • Makefile 1.3%

AltStyle によって変換されたページ (->オリジナル) /