From c92fd3b638c781e0b6f9ed05237d49b2784f2fc7 Mon Sep 17 00:00:00 2001 From: csh Date: Fri, 26 Sep 2025 11:36:18 +0800 Subject: [PATCH] patch1 --- utils/TSOfficeContainer.tsf | 42 +++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/utils/TSOfficeContainer.tsf b/utils/TSOfficeContainer.tsf index e3b63c8..be57953 100644 --- a/utils/TSOfficeContainer.tsf +++ b/utils/TSOfficeContainer.tsf @@ -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();