JUCE类库数据容器4-3

11、Range

Range容器可保存一组数值型对象,这些数值连续排列,构成一个数值范围。本类的模板参数(所保存的对象的类型)最好是C++原始数据类型,比如整型或浮点型。如果自定义的类具有数值一样的属性(可连续排列),那么也可以使用本类构成一个范围。

12、SparseSet

SparseSet范围集合,可称为稀疏集合。该容器保存的元素即为Range 类的对象,即容器中每个元素均为一个数值连续的子容器。该特性使之非常适合保存列表项中的多个所选项目。

13、HeapBlock

HeapBlock的对象代表一个堆中的内存块。如需分配堆内存,则应始终使用此类,而不要直接使用malloc/free命令。也就是说,本类专用于替代传统的malloc/free运算符。在自定义new和delete时,使用本类可简化编码。

比如:HeapBlock对象可视为一个字符型数据的指针(char*),同理,HeapBlock对象可视为MyClass类型的指针。作为类成员,该对象一旦在堆中分配, 则完全无需担心内存泄露的问题。这也可以让程序代码变得更加简洁和易读。

14、MemoryBlock

MemoryBlock用于存储内存中的数据块,可调整大小。所存储的数据为二进制格式,可将数据toString()解析为字符串,或getData()返回此数据块的void型指针(即返回此块的内存首地址。二进制资源转为字节流的核心函数),并可append()追加新数据,或将内存中的数据copyFrom()复制到本内存块中,或者将本块的数据copyTo()复制到内存中。等等。

15、DynamicObject

DynamicObject容器专用于保存键值对数据。也就是说,该容器中的每个元素是一个键值对,每个键值对由属性名称(Identifier)和属性值(var)构成。该类是ReferenceCountedObject引用计数类的派生类,其核心函数有二:设置键值对和获取某个键所对应的值。

16、DefaultElementComparator

DefaultElementComparator 类模板并非数据容器,而是与数据容器紧密相关的比较器。Array、OwnedArray、ValueTree、ReferenceCountedArray等数组类均有一个用于元素排序的函数sort(),该函数的第一个参数即比较器对象。通常,仅需创建DefaultElementComparator 类模板的对象,而后将该对象传给sort()函数即可。

17、ListenerList

ListenerList 专用于保存Listener捕获器对象,该类与其说是数据容器,不如说是JUCE类库消息机制中事件驱动的最核心类,其功能就是实现函数回调。

注:借助于ListenerList<捕获类>所完成的事件驱动(回调捕获类的函数),是实时性的。JUCE类库的ActionBroadcaster与对应的ActionListener,Message与对应的MessageListener也均是实时性的,而ChangeBroadcaster与对应的ChangeListener、AsyncUpdater则是异步回调。这些两两配对的类,构成了整个JUCE类库的事件驱动与消息机制,它们的内部原理与使用流程,与ListenerList的回调方式基本一致,而且更加简单(因为均有对应的Listener捕获类)。可以说,只要弄明白了ListenerList,使用其他类自然不在话下。