位于 llvm/include/llvm/[[ADT]]/[[SmallString.h]]
参见:
注释:'Normally small' strings -- 普通的小的字符串
这个头文件定义了类 SmallString。
SmallString 是 [[SmallVector]] 的子类,添加了一个方便的 API 来对字符串进行操作,如使用 [[StringRef]] 参数的 += 重载。SmallString 尽量使用预先分配的空间来存放字符串数据,这样避免了不必要的内存分配,在需要的时候才从堆中分配内存。因为 SmallString 自己拥有字符串数据,因此可以安全地使用它进行各种操作和变化。
类似于 [[SmallVector]], SmallString 的大的缺陷是它的 sizeof()。一般放在堆栈(stack)中比较好,极少放在堆(heap)中,也极少用作某个堆中分配的对象的成员或当做返回值。
== 类 SmallString 概要 ==
templateclass SmallString : public SmallVector { // 使用 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]] 做为参数或返回值。