C++ Enum Reflection

阅读更多关于《C++ Enum Reflection》

1. 概述

简而言之,编程语言中的反射(Reflection)指的是从运行时中获取语言本身的类型等信息。C++ 缺乏这样的机制,对于最简单的 enum 类型,我们或许可以实现带有反射功能的 enum。
我们实现了几个宏,通过宏定义的 enum,就自动地拥有反射功能。

2. 用法

2.2 宏定义

继续阅读

nark 序列化与 C++14 的新特性

阅读更多关于《nark 序列化与 C++14 的新特性》

nark C++ 序列化库 尽管 性能优异,但是C++14以前,在某些情况下想要完全发挥性能优势,需要额外声明 DATA_IO_DUMP_RAW_MEM

只是因为受制于 C++ 的语法限制,无法实现自动推导所有的 Dumpable 对象——可以 memcpy 的对象: 继续阅读

sse4.2 的字符串操作指令

阅读更多关于《sse4.2 的字符串操作指令》

前段时间实现了基于 Succinct Data Structure 的自动机,这种自动机(内存)存储方式将状态转移的 label 单独存储起来,从而,查找 label 就是一个在 byte 数组中查找 byte 的操作,并且,绝大多数情况下,需要查找的这个 byte 数组都非常短(状态的平均转移(label)数一般情况下大约是 2 )。 继续阅读

Koening Lookup

阅读更多关于《Koening Lookup》

也就是 C++ 函数名字的两阶段查找,模板实例化之前和实例化之后

C++每个类对象都有一个名字空间,而非类对象,比如 int, char, long, char*….,没有关联的名字空间。 继续阅读

gcc 4.7.3 的一个 c++11 bug

阅读更多关于《gcc 4.7.3 的一个 c++11 bug》

昨天一个朋友 checkout 了我的 febird 代码,编译时出现了一个诡异的错误。经过仔细勘察,他的 g++ 版本是 4.7.3,而我测试过的 g++4.7.2,g++4.8.2均无问题。 继续阅读

boost 这帮人也超级不靠谱

阅读更多关于《boost 这帮人也超级不靠谱》

刚才开始用 boost::range,就查看了了一下 boost 源码,发现 boost-1.50 一个 bug,觉得应该在新版中已经修改了,下载了最新的 1.54 版,进去一看,bug 仍然在! 继续阅读

避免临时对象的字符串加法

阅读更多关于《避免临时对象的字符串加法》

之前我有一篇文章《 C++中让对象的拷贝成为 显式 的》,使用类似的技巧,可以避免字符串加法中的临时对象,也许是因为惰性,这个想法一直没有诉诸实现,今天有空把它写了出来。 继续阅读

gold_hash_idx 完成了

阅读更多关于《gold_hash_idx 完成了》

用在 onfly minimal acyclic DFA construction 上,速度提高了大约28%,内存对每个State节约了4个字节。

以后有空再努力一下,把 gold_hash_idx 再深入泛化一步,做成可以更方便地用于 multi_index 。

gold_hash_map abstract++

阅读更多关于《gold_hash_map abstract++》

目前的gold_hash_map 实现中,index和data是耦合在一起的。
今天在思考 onfly MinADFA 的进一步优化时,想到了一点:在MinADFA_onfly 中,equivalence_register是一个gold_hash_tab, 继续阅读

Context 终于进 boost 了

阅读更多关于《Context 终于进 boost 了》

Version  1.51.0

New Libraries: Context 继续阅读