位于 llvm/include/llvm/[[ADT]]/[[SmallString.h]]
参见:http://llvm.org/docs/ProgrammersManual.html#dss_smallstring
注释:'Normally small' strings -- 普通的小的字符串
这个头文件定义了类 SmallString。
SmallString 是 [[SmallVector]] 的子类,添加了一个方便的 API 来对字符串进行操作,如使用 [[StringRef]] 参数的 += 重载。SmallString 尽量使用预先分配的空间来存放字符串数据,这样避免了不必要的内存分配,在需要的时候才从堆中分配内存。因为 SmallString 自己拥有字符串数据,因此可以安全地使用它进行各种操作和变化。
类似于 [[SmallVector]], SmallString 的大的缺陷是它的 sizeof()。一般放在堆栈(stack)中比较好,极少放在堆(heap)中,也极少用作某个堆中分配的对象的成员或当做返回值。
== 类 SmallString 概要 ==
template<unsigned InternalLen> class SmallString
: public SmallVector<char, InternalLen> { // 使用 SmallVector 做底层存储
// 从 SmallVector, SmallVectorBase 等基类获得数据成员。参见 SmallVector
char *BeginX, *EndX, *CapacityX;
char in_place_buffer[InternalLen]; // 在类中的字符串缓冲,用于说明,实际是 union U 类型的,大小也不是。
// SmallString 自己的。
this() // 多种形式的构造
assign(), append(), compare(), startswith(), endswith(), find()
substr(), slice(), +=() 等众多的字符串操作函数。
}
这个类多处使用 [[StringRef]] 做为参数或返回值。