首页 > 代码库 > 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)
设置对应key的value
voidinsert(Kkey,Vvalue)
插入(key,value)
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
基于remoteq及context的service,支持阻塞式rpc
Interface
classacceptservice;
监听service
classconnectservice;
接受service
classlocale_obj;
本地obj
classremote_obj;
远程obj
例子:fossilizid/test/test_service
vchat:voice chat framework
vchat
基于portaudio,speex的多人语音聊天框架
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简介