-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
4 additions
and
53 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,63 +1,14 @@ | ||
最低要求: \ | ||
C++17。 \ | ||
绝大多数优化仅针对GCC/Clang x64。 | ||
C++17,64位系统。 \ | ||
绝大多数优化仅针对x64。 | ||
1. 非侵入式容器 | ||
- 可定制vector类,实现对应接口即可。 \ | ||
目前默认实现了vector, static_vector, fixed_vector, sso_vector。 \ | ||
static_vector 编译期确定静态长度,不会动态扩容。当 WJR_DEBUG_LEVEL >= 1 时 \ | ||
且需要扩容时使用WJR_ASSERT报错。 \ | ||
fixed_vector 在构造时给定一个长度,且后续操作不进行动态扩容。DEBUG 同static_vector。 \ | ||
sso_vector 进行小对象优化,类似于std::string的SSO优化,提供一个模板参数用于确定小对象优化的size。 | ||
- dynamic_bitset | ||
动态长度bitset。暂未完全完成,优先级较低。 | ||
- B+树 | ||
高度优化的内存B+树。目前暂时缺少对Value为trivial并且size较小时的inline优化。 \ | ||
对于trivial且size小于等于8的key使用值而非指针,使用inline_key统一接口实现。 \ | ||
对copy和search均进行了优化。目前随机情况下(缓存较差)较小点数的平均性能上略慢于红黑树,较大点数快于红黑树。 \ | ||
缓存友好(例如数据有规律)时平均性能更好。 | ||
2. 侵入式容器 | ||
处于设计阶段。 \ | ||
侵入式容器存在较为明显的内存安全问题。生命周期较为独立,且内存分配器与容器解耦,容易遗漏释放。 \ | ||
考虑结合使用unique_ptr的方案。 | ||
- list | ||
双向链表 | ||
- slist | ||
单链表 | ||
3. 预处理器 | ||
- 预处理阶段的ADD, SUB, CMP, INC, DEC, NEG, NOT等。 | ||
- 预处理阶段的MAP。\ | ||
以WJR_HAS_DEBUG为例 | ||
``` | ||
#define WJR_HAS_DEBUG_XXX WJR_HAS_DEF_VAR(3) | ||
static_assert(WJR_HAS_DEBUG(XXX) == 3, ""); | ||
#define WJR_HAS_DEBUG_NO_XXX WJR_HAS_DEF | ||
static_assert(WJR_HAS_DEBUG(XXX) == 0, ""); | ||
``` | ||
目前定义了对应的 BUILTIN, ATTRIBUTE, FEATURE, SIMD, DEBUG。 | ||
- 队列 (a, b, c) 的算法等 \ | ||
例如WJR_PP_QUEUE_TRANSFORM((a, b, c), f) -> (f(a), f(b), f(c))。 \ | ||
较为复杂,后续考虑简化实现。 | ||
4. compressed_pair\<T, U\> | ||
压缩对,使用EBO(空基类优化)。 \ | ||
使用CRTP,一般与struct相比零开销。 \ | ||
使用 dctor (default constructor标记) 可以使用默认构造代替值初始化。 \ | ||
可使用成员函数get<0>, get<1>,或者first(), second(),或者operator[]\(std::integral_constant<B, index>\) \ | ||
示例: | ||
``` | ||
compressed_pair<int, int> x; | ||
x.first() == x.template get<0>() == x[0_zu] | ||
``` | ||
5. tuple\<Args...\> | ||
与std::tuple规范相同。优化类似compressed_pair。 | ||
6. span | ||
span的一个简单C++17实现。 | ||
7. inline_key | ||
值和指针的统一接口。例如函数传参根据T的大小,是否trivial等使用T或const T&。 \ | ||
在B+树中使用inline_key进行优化,例如key为int, long等时显然可以使用值而非指针进行优化。 \ | ||
规范待调整。 | ||
8. uninitialized | ||
一系列使用分配器的uninitialized函数。 \ | ||
uninitialized类,可延迟构造,不进行析构,确保析构前为空。开启对应DEBUG level后会判断错误使用。 | ||
9. lazy\<T\> | ||
使用uninitialized实现,但会进行析构,需确保析构前不为空。 | ||
10. math | ||
10. biginteger | ||
11. math... |