首页 > 代码库 > fossilizid简介

fossilizid简介

前前后后大概维护了这些零碎的lib4年左右的时间,现在终于给这些东西加上了完整的测试用例和文档,

文档地址如下:

https://github.com/NetEase/fossilizid/tree/master/doc

代码地址如下:

https://github.com/NetEase/fossilizid

container: lock-free structure

fossilizid::container::msque

基于单链表的无锁队列

相关论文http://www.research.ibm.com/people/m/michael/podc-1996.pdf

http://web.cecs.pdx.edu/~walpole/class/cs510/papers/11.pdf

optimisticque

基于双链表的对锁队列

相关论文https://www.offblast.org/stuff/books/FIFO_Queues.pdf

ringque

基于定长数组实现的环形队列

swapque

基于读写锁,队列本身包含2个子队列,一个用于push,一个用于pop

队列采用了统一的接口设计

bool empty()

判断队列是否为空,空返回true否之返回false

std::size_tmsque::size()

获取队列长度,返回当前队列元素数目

voidmsque::clear()

清空队列

voidmsque::push(constT & data)

将元素插入队列

boolmsque::pop(T & data)

将元素弹出队列


small_hash_map

基于读写锁的hash_map,对bucket进行加锁

Interface

voidfor_each(boost::function<void(Vvar) > handle)

遍历hash_map

boolset(Kkey,Vvalue)

设置对应keyvalue

voidinsert(Kkey,Vvalue)

插入(keyvalue

boolsearch(Kkey,V&value)

查找指定key

boolerase(Kkey)

删除指定key

unsignedintsize()

获取hash_map的元素数目

 

例子:fossilizid/test/test_container


pool:mempool&&objpool

fossilizid::pool::mempool

内存池,按分配的内存大小做了简单的分支管理,小于64K的内存采用链表管理,在新的内存块上保存上级节点的指针地址,大于64K的内存采用红黑树保存,直接采用了std::map

Interface

staticvoid* allocator(intlen)

分配内存

staticvoiddeallocator(void* buff, intlen)

回收内存


fossilizid::pool::factory

对象池,采用可变长模板参数适配不同参数的构造函数

Interface

template<classT,typename...Tlist>

staticT* create(intcount,Tlist&&... var)

创建count个数的对象

template<classT,typename...Tlist>

staticT* create(Tlist&&... var)

创建一个对象

template<classT>

staticvoidrelease(T* p,intcount)

释放count个对象

 

例子:fossilizid/test/test_pool


remoteq:network library

fossilizid::remoteq

基于模板适配网络协议

Interface

ACCEPTORacceptor(QUEUEque, ENDPOINTep)

创建接收器

CHANNELaccept(ACCEPTORap)

接收接入的CHANNEL

CHANNELconnect(ENDPOINTep, QUEUEque = 0)

接入远端

voidclose(HANDLE_handle)

释放句柄

ENDPOINTendpoint(char* ip, shortport)

创建地址

QUEUEqueue()

创建事件队列

EVENTqueue(QUEUEque)

获取事件

 

例子:fossilizid/test/test_remote_queue


reliablyt:udp reliably transmission

reliablyt

基于停等协议的udp可靠性传输

Interface

classUDPSession{

public:

boost::signals2::signal<void(char*, int)> sigRecv;

boost::signals2::signal<void()> sigDisConnect;

voiddisconnect();

voidreliable_send(char* buf, intlen);

voidunreliable_send(char* buf, intlen);

}

classUDPService: publicUDPBase{

public:

boost::signals2::signal<void(boost::shared_ptr<UDPConnect>)> sigConnect;

}


例子:fossilizid/test/test_udp


reduce: service

fossilizid::reduce

基于remoteqcontextservice,支持阻塞式rpc

Interface

classacceptservice;

监听service

classconnectservice;

接受service

classlocale_obj;

本地obj

classremote_obj;

远程obj


例子:fossilizid/test/test_service


vchat:voice chat framework

vchat

基于portaudiospeex的多人语音聊天框架

Interface

classpaInit{

public:

paInit();

~paInit();

};

初始化portaudio

classdevices{

public:

staticstd::vector<constPaDeviceInfo*> getInputDevices();

staticstd::vector<constPaDeviceInfo*> getOutputDevices();

};

获取设备列表

classencode{

public:

intencoded(char* inbuf, intframelen, char* outbuf, intoutbuflen);

intdecoded(char* inbuf, intframelen, char* outbuf, intoutbuflen);

intgetframesize();

};

编解码器

classsound{

public:

voidstart();

voidstop();

boost::signals2::signal<void(char*, int)>sigCapture;

boolsetOutputDevice(PaDeviceIndexindex);

boolsetInputDevice(PaDeviceIndexindex);

voidsetsoundsize();

voidsetechostate(boolon);

};

采集接口

boost::signals2::signal<void(char*, int)>sigCapture

采集音频回调

structclient{

boolread_buff(char* & outputbuff,short& channelcount,int&len);

voidwrite_buff(char* buff,intbuflen,shortchannelcount);

};

接入聊天的用户,用于缓存该用户的语音数据

client* create_client(intindex = 0)

创建用户

client* get_client(intindex);

获取用户

typedefvoid(*handle_iterator_client)(std::map<int,client*>& set)

voiditerator_client_set(handle_iterator_clientfn);

voiditerator_client_set(std::function<void(std::map<int,client*>&) > fn);

遍历用户

booldestroy_client(intindex);

删除用户

intclient_count();

获取用户数目


例子:fossilizid/test/test_vchat


 

fossilizid简介