95 lines
1.8 KiB
Plaintext
95 lines
1.8 KiB
Plaintext
Type Collection = Class
|
|
|
|
public
|
|
Function Create();
|
|
Function CompareFunction(index, data);
|
|
|
|
Function SetIgnoreCase(value);
|
|
Function SetActivation(value);
|
|
Function GetActivation();
|
|
Function CalNewName(prefix);
|
|
Function AddCollection(obj, name);
|
|
Function RemoveCollection(index);
|
|
Function Operator[](index);
|
|
Function GetCount();
|
|
|
|
private
|
|
ignorecase_; // 忽略大小写
|
|
container_; // 容器对象
|
|
fp_; // 函数指针 -- 用来比较
|
|
activation_; // 激活的对象
|
|
|
|
End;
|
|
|
|
// ============== 实现 ================= //
|
|
Function Collection.Create();
|
|
Begin
|
|
container_ := new LinkList();
|
|
ignorecase_ := false;
|
|
fp_ := FindFunction("CompareFunction", self);
|
|
End;
|
|
|
|
Function Collection.SetIgnoreCase(value);
|
|
Begin
|
|
ignorecase_ := value;
|
|
End;
|
|
|
|
Function Collection.SetActivation(value);
|
|
Begin
|
|
activation_ := self[value];
|
|
End;
|
|
|
|
Function Collection.GetActivation();
|
|
Begin
|
|
return activation_;
|
|
End;
|
|
|
|
Function Collection.CompareFunction(index, data);
|
|
Begin
|
|
return (ifnumber(index) and data.index = index)
|
|
or data.name = index
|
|
or (ignorecase_ and lowercase(data.name) = lowercase(index));
|
|
End;
|
|
|
|
Function Collection.CalNewName(prefix);
|
|
Begin
|
|
len := GetCount() + 1;
|
|
name := prefix $ len;
|
|
while container_.Get(name, fp_) do
|
|
name := prefix $ ++len;
|
|
return name;
|
|
End;
|
|
|
|
Function Collection.AddCollection(obj, name);
|
|
Begin
|
|
data := new Data();
|
|
data.obj := obj;
|
|
data.name := name;
|
|
data.index := GetCount() + 1;
|
|
return container_.Add(data);
|
|
End;
|
|
|
|
Function Collection.RemoveCollection(index);
|
|
Begin
|
|
return container_.Remove(index, fp_);
|
|
End;
|
|
|
|
Function Collection.GetCount();
|
|
Begin
|
|
return container_.Size();
|
|
End;
|
|
|
|
Function Operator Collection.[](index);
|
|
Begin
|
|
ret := container_.Get(index, fp_);
|
|
return ret ? ret.obj : nil;
|
|
End;
|
|
|
|
// 集合中需要记录的数据
|
|
Type Data = class
|
|
obj;
|
|
name;
|
|
index;
|
|
End;
|
|
|