75 lines
1.7 KiB
Plaintext
75 lines
1.7 KiB
Plaintext
Type Collection = class
|
|
|
|
public
|
|
|
|
Function Create();
|
|
Function AddCollection(obj, name);
|
|
Function RemoveCollection(index);
|
|
Function SetIgnoreCase(value);
|
|
Function GetCount();
|
|
Function CalNewName(prefix);
|
|
Function Operator[](index);
|
|
|
|
private
|
|
name_collection_;
|
|
index_collection_;
|
|
name_index_;
|
|
ignorecase_; // 是否启用大小写无关
|
|
End;
|
|
|
|
// ============== 实现 ================= //
|
|
Function Collection.Create();
|
|
Begin
|
|
name_collection_ := array();
|
|
index_collection_ := array();
|
|
name_index_ := array();
|
|
ignorecase_ := false;
|
|
End;
|
|
|
|
Function Collection.AddCollection(obj, name);
|
|
Begin
|
|
name_collection_[ignorecase_ ? lowercase(name) : name] := obj;
|
|
index := length(index_collection_) + 1;
|
|
index_collection_[index] := obj;
|
|
name_index_[index] := name;
|
|
name_index_[name] := index;
|
|
End;
|
|
|
|
Function Collection.RemoveCollection(index);
|
|
Begin
|
|
arr1 := array(index : nil);
|
|
arr2 := array(name_index_[index] : nil);
|
|
reindex(index_collection_, arr1);
|
|
reindex(name_collection_, arr2);
|
|
reindex(name_index_, arr1);
|
|
reindex(name_index_, arr2);
|
|
if ifnumber(index) then
|
|
for k, v in index_collection_ do
|
|
if k > index then reindex(index_collection_, array(k : k - 1));
|
|
End;
|
|
|
|
Function Collection.SetIgnoreCase(value);
|
|
Begin
|
|
ignorecase_ := value;
|
|
End;
|
|
|
|
Function Collection.GetCount();
|
|
Begin
|
|
return length(name_collection_);
|
|
End;
|
|
|
|
Function Collection.CalNewName(prefix);
|
|
Begin
|
|
len := length(name_collection_) + 1;
|
|
name := prefix $ len;
|
|
while name in name_collection_ do
|
|
name := prefix $ ++len;
|
|
return name;
|
|
End;
|
|
|
|
Function Operator Collection.[](index);
|
|
Begin
|
|
if ifnumber(index) then return index_collection_[index];
|
|
return name_collection_[ignorecase_ ? lowercase(index) : index];
|
|
End;
|