This commit is contained in:
csh 2025-09-26 11:36:18 +08:00
parent 20a343f501
commit c92fd3b638
1 changed files with 40 additions and 2 deletions

View File

@ -7,6 +7,7 @@ public
function Append(data: any): boolean;
function Insert(data: any): boolean;
function InsertAfter(data: any; pos_data: any);
function InsertBefore(data: any; pos_data: any);
function Get(name: string; index: integer);
function GetElements(include_removed: boolean): array of tslobj;
@ -17,7 +18,7 @@ private
bucket_: array of LinkList;
child_: array of string;
current_index_: integer;
min_index_; integer;
min_index_: integer;
max_index_: integer;
end;
@ -28,6 +29,7 @@ public
function Add(data: any);
function Delete(data: any): boolean;
function InsertAfter(data: any; pos_data: any): boolean;
function InsertBefore(data: any; pos_data: any): boolean;
function Name(): string;
function Size(): integer;
function First(): Node;
@ -194,10 +196,20 @@ begin
end
end;
function TSOfficeContainer.InsertBefore(data: any; pos_data: any);
begin
for i:=0 to current_index_ do
begin
obj := bucket_[i];
if ifObj(obj) then
if obj.InsertBefore(data, pos_data) then break;
end
end;
function TSOfficeContainer.GetElements(include_removed: boolean = true): array of tslobj;
begin
arr := array();
for i:=min_index_ to current_index_ do
pf := function(arr, i)
begin
obj := bucket_[i];
if ifObj(obj) then
@ -211,6 +223,10 @@ begin
end
end
end
for i:=0 to current_index_ do
##pf(arr, i);
for i:=min_index_ to -1 do
##pf(arr, i);
return arr;
end;
@ -329,6 +345,28 @@ begin
return false;
end;
function LinkList.InsertBefore(data: any; pos_data: any): boolean;
begin
node := {self.}First();
prev := nil;
while ifObj(node) do
begin
if node.data = pos_data then
begin
new_node := new Node();
new_node.data := data;
new_node.next := node;
if ifnil(prev) then head_.next := new_node;
else prev.next := new_node;
size_++;
return true;
end
prev := node;
node := node.next;
end
return false;
end;
function LinkList.Delete(data: any): boolean;
begin
node := {self.}First();