TBOX提供了各种常用算法,对容器中的元素进行各种操作,这里主要介绍下排序和查找算法。
排序算法目前支持如下几种:
tb_quick_sort
tb_heap_sort
tb_insert_sort
tb_bubble_sort
并且提供通用的tb_sort
接口,对各种排序算法进行自动适配,使得任何情况下,性能都是最优的。
例如:
xmake的工程描述文件,摈弃了makefile的繁琐复杂,借鉴了premake的简洁明了,原生支持lua脚本,使得更加的灵活、方便扩展。
工程默认描述文件名为xmake.lua,支持多级目录嵌套,也可以通过以下命令,指定其他文件作为工程描述文件:
xmake -f /tmp/xxx.lua
xmake --file=xxx.lua
下面先来看一个最简单的例子:
-- 添加一个名为demo的目标到工程
target("demo")
-- 设置目标程序类型为二进制可执行程序,一般为console的终端命令行程序
set_kind("binary")
-- 添加src目录下的所有c文件
add_files("src/*.c")
怎么样简单吧,这样就已经完成了一个最简单的工程描述。。
Bloom Filter是由Bloom在1970年提出的一种快速查找算法,通过多个hash算法来共同判断某个元素是否在某个集合内。可以用于网络爬虫的url重复过滤、垃圾邮件的过滤等等。
它相比hash容器的一个优势就是,不需要存储元素的实际数据到容器中去来一个个的比较是否存在。 只需要对应的位段来标记是否存在就行了,所以想当节省内存,特别适合海量的数据处理。并且由于省去了存储元素和比较操作,所以性能也比基于hash容器的高了很多。
但是由于bloom filter没有去比较元素,只通过多个hash来判断唯一性,所以存在一定的hash冲突导致误判。误判率的大小由hash函数的个数、hash函数优劣、以及存储的位空间大小共同决定。
并且删除也比较困难,解决办法是使用其变种,带计数的bloom filter,这个这里就不多说了。
对于bloom filter算法的实现,相当简单: 首先分配一块固定的连续空间,大小是m个比特位(m/8+1个字节),然后再提供k个不同hash函数,同时对每个元素进行计算位索引。如果每个位索引对应的位都为1,则存在该元素,否则就是不存在。
可以看出,如果判断为不存在,那么肯定是不存在的,只有在判断为存在的时候,才会存在误判。
bloom filter主要的难点其实在于估算: 保证指定误判率的情况下,到底需要多少个hash函数,多少的存储空间。
注:此处为镜像文档,最新在线文档请看:http://xmake.io/#/zh/plugins
XMake完全支持插件模式,我们可以很方便的扩展实现自己的插件,并且xmake也提供了一些内建的使用插件。
我们可以执行下 xmake -h
看下当前支持的插件:
Plugins:
l, lua Run the lua script.
m, macro Run the given macro.
doxygen Generate the doxygen document.
hello Hello xmake!
project Create the project file.
接下来我们介绍下本文的重点,一个简单的hello xmake插件的开发,代码如下:
-- 定义一个名叫hello的插件任务
task("hello")
-- 设置类型为插件
set_category("plugin")
-- 插件运行的入口
on_run(function ()
-- 显示hello xmake!
print("hello xmake!")
end)
-- 设置插件的命令行选项,这里没有任何参数选项,仅仅显示插件描述
set_menu {
-- usage
usage = "xmake hello [options]"
-- description
, description = "Hello xmake!"
-- options
, options = {}
}