summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authormichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2014-03-11 10:50:05 +0000
committermichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2014-03-11 10:50:05 +0000
commitaebe12b1787dbd79961fae9e7ee9ddee2ac86384 (patch)
tree7d8d38baaf9b0c7a211fbbeea6a0ea3eaac854a6 /packages
parent3f56106195f16f1c44309fc15a5043fa790de7ee (diff)
downloadfpc-aebe12b1787dbd79961fae9e7ee9ddee2ac86384.tar.gz
* Created version without classes
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@27091 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages')
-rw-r--r--packages/fcl-js/src/jstree.pp230
1 files changed, 202 insertions, 28 deletions
diff --git a/packages/fcl-js/src/jstree.pp b/packages/fcl-js/src/jstree.pp
index 86f2aba915..74b58c8e19 100644
--- a/packages/fcl-js/src/jstree.pp
+++ b/packages/fcl-js/src/jstree.pp
@@ -1,13 +1,68 @@
unit jstree;
{$mode objfpc}{$H+}
+{ $DEFINE NOCLASSES}
interface
uses
- Classes, SysUtils, jsbase, jstoken;
+{$IFNDEF NOCLASSES} Classes, {$ENDIF} SysUtils, jsbase, jstoken;
Type
+{$IFDEF NOCLASSES}
+
+ { TStrings }
+{$M+}
+ TStrings = Class(TObject)
+ private
+ FCount: Integer;
+ FStrings : Array of String;
+ function GetCount: Integer;
+ function GetS(AIndex : Integer): String;
+ procedure SetS(AIndex : Integer; AValue: String);
+ Public
+ Function Add(Const S : String) : Integer;
+ Procedure Assign(Source : TStrings);
+ Property Strings[AIndex : Integer] : String Read GetS Write SetS; default;
+ Property Count : Integer Read GetCount;
+ end;
+ TStringList = TStrings;
+ EListError = Class(Exception);
+
+ TCollection = Class;
+
+ { TCollectionItem }
+
+ TCollectionItem = Class
+ Private
+ FCollection : TCollection;
+ Public
+ Constructor Create(ACollection : TCollection);
+ Destructor Destroy; override;
+ end;
+ TCollectionItemClass = Class of TCollectionItem;
+
+ { TCollection }
+
+ TCollection = Class
+ private
+ FCount: Integer;
+ FItems : Array of TCollectionItem;
+ FItemClass : TCollectionItemClass;
+ function GetCount: Integer;
+ function GetI(AIndex : Integer): TCollectionItem;
+ public
+ Constructor Create(AItemClass : TCollectionItemClass);
+ Destructor Destroy; override;
+ Procedure Clear;
+ Procedure Remove(AItem : TCollectionItem);
+ Function Add : TCollectionItem;
+ Property Items[AIndex : Integer] : TCollectionItem Read GetI;default;
+ Property Count : Integer Read GetCount;
+ end;
+
+{$M-}
+{$ENDIF}
TJSElementFlag = (elIsConst,elIsConstValid);
TJSElementFlags = set of TJSElementFlag;
@@ -155,10 +210,9 @@ Type
TJSArrayLiteralElements = Class(TCollection)
private
function GetE(AIndex : Integer): TJSArrayLiteralElement;
- procedure SetE(AIndex : Integer; const AValue: TJSArrayLiteralElement);
Public
Function AddElement : TJSArrayLiteralElement;
- Property Elements[AIndex : Integer] : TJSArrayLiteralElement Read GetE Write SetE; default;
+ Property Elements[AIndex : Integer] : TJSArrayLiteralElement Read GetE ; default;
end;
{ TJSArrayLiteral }
@@ -189,10 +243,9 @@ Type
TJSObjectLiteralElements = Class(TCollection)
private
function GetE(AIndex : Integer): TJSObjectLiteralElement;
- procedure SetE(AIndex : Integer; const AValue: TJSObjectLiteralElement);
Public
Function AddElement : TJSObjectLiteralElement;
- Property Elements[AIndex : Integer] : TJSObjectLiteralElement Read GetE Write SetE; default;
+ Property Elements[AIndex : Integer] : TJSObjectLiteralElement Read GetE ; default;
end;
{ TJSObjectLiteral }
@@ -758,10 +811,9 @@ Type
TJSCaseElements = Class(TCollection)
private
function GetC(AIndex : Integer): TJSCaseElement;
- procedure SetC(AIndex : Integer; const AValue: TJSCaseElement);
Public
Function AddCase : TJSCaseElement;
- Property Cases[AIndex : Integer] : TJSCaseElement Read GetC Write SetC;default;
+ Property Cases[AIndex : Integer] : TJSCaseElement Read GetC ;default;
end;
{ TJSSwitch }
@@ -846,10 +898,9 @@ Type
TJSElementNodes = Class(TCollection)
private
function GetN(AIndex : Integer): TJSElementNode;
- procedure SetN(AIndex : Integer; const AValue: TJSElementNode);
Public
Function AddNode : TJSElementNode;
- Property Nodes[AIndex : Integer] : TJSElementNode Read GetN Write SetN; default;
+ Property Nodes[AIndex : Integer] : TJSElementNode Read GetN ; default;
end;
{ TJSSourceElements }
@@ -869,6 +920,148 @@ Type
implementation
+{$IFDEF NOCLASSES}
+{ TCollectionItem }
+
+Constructor TCollectionItem.Create(ACollection: TCollection);
+begin
+ FCollection:=ACollection;
+end;
+
+Destructor TCollectionItem.Destroy;
+begin
+ if Assigned(FCollection) then
+ FCollection.Remove(Self);
+ inherited Destroy;
+end;
+
+{ TCollection }
+
+function TCollection.GetI(AIndex : Integer): TCollectionItem;
+begin
+ if (AIndex>=0) and (AIndex<FCount) then
+ Result:=FItems[AIndex]
+ else
+ Raise EListError.CreateFmt('Collection index (%d) out of bounds.',[AIndex]);
+end;
+
+function TCollection.GetCount: Integer;
+begin
+ Result:=FCount;
+end;
+
+Procedure TCollection.Remove(AItem: TCollectionItem);
+
+Var
+ I,J : Integer;
+
+begin
+ if (AItem=Nil) then exit;
+ I:=Count-1;
+ While (I>=0) and (FItems[I]<>AItem) do
+ Dec(i);
+ For J:=I to Count-2 do
+ FItems[I]:=FItems[i+1];
+ Dec(FCount);
+end;
+
+Constructor TCollection.Create(AItemClass: TCollectionItemClass);
+begin
+ FItemClass:=AItemClass;
+end;
+
+Destructor TCollection.Destroy;
+begin
+ Clear;
+ inherited Destroy;
+end;
+
+Procedure TCollection.Clear;
+
+Var
+ I : Integer;
+
+begin
+ For I:=0 to Count-1 do
+ begin
+ FItems[i].FCollection:=Nil;
+ FItems[i].Destroy;
+ end;
+ FCount:=0;
+ SetLength(Fitems,0);
+end;
+
+Function TCollection.Add: TCollectionItem;
+Var
+ NL : Integer;
+begin
+ If FCount=Length(FItems) then
+ begin
+ NL:=Length(FItems)*3 div 2;
+ if NL=0 then NL:=10;
+ SetLength(FItems,NL);
+ end;
+ Result:=FItemClass.Create(Self);
+ FItems[FCount]:=Result;
+ Inc(FCount);
+end;
+
+{ TStrings }
+
+function TStrings.GetCount: Integer;
+begin
+ Result:=FCount;
+end;
+
+function TStrings.GetS(AIndex : Integer): String;
+begin
+ if (AIndex>=0) and (AIndex<FCount) then
+ Result:=FStrings[AIndex]
+ else
+ Raise EListError.CreateFmt('List index (%d) out of bounds.',[AIndex]);
+end;
+
+procedure TStrings.SetS(AIndex : Integer; AValue: String);
+begin
+ if (AIndex>=0) and (AIndex<=FCount) then
+ begin
+ if (AIndex=FCount) then
+ Add(AValue)
+ else
+ FStrings[AIndex]:=AValue;
+ end
+ else
+ Raise EListError.CreateFmt('List index (%d) out of bounds.',[AIndex]);
+end;
+
+Function TStrings.Add(Const S: String): Integer;
+
+Var
+ NL : Integer;
+begin
+ If FCount=Length(FStrings) then
+ begin
+ NL:=Length(FStrings)*3 div 2;
+ if NL=0 then NL:=10;
+ SetLength(FStrings,NL);
+ end;
+ FStrings[FCount]:=S;
+ Inc(FCount);
+end;
+
+Procedure TStrings.Assign(Source: TStrings);
+
+Var
+ I : Integer;
+
+begin
+ SetLength(FStrings,Length(Source.FStrings));
+ FCount:=Source.FCount;
+ For I:=0 to FCount-1 do
+ FStrings[i]:=Source.FStrings[i];
+end;
+{$ENDIF NOCLASSES}
+
{ TJSXOREqAssignStatement }
Class function TJSXOREqAssignStatement.OperatorToken: tjsToken;
@@ -1293,12 +1486,6 @@ begin
Result:=TJSArrayLiteralElement(Items[AIndex]);
end;
-procedure TJSArrayLiteralElements.SetE(AIndex : Integer;
- const AValue: TJSArrayLiteralElement);
-begin
- Items[AIndex]:=AValue;
-end;
-
function TJSArrayLiteralElements.AddElement: TJSArrayLiteralElement;
begin
Result:=TJSArrayLiteralElement(Add);
@@ -1326,11 +1513,6 @@ begin
Result:=TJSObjectLiteralElement(Items[AIndex]);
end;
-procedure TJSObjectLiteralElements.SetE(AIndex : Integer;
- const AValue: TJSObjectLiteralElement);
-begin
- Items[AIndex]:=AValue;
-end;
function TJSObjectLiteralElements.AddElement: TJSObjectLiteralElement;
begin
@@ -1578,10 +1760,6 @@ begin
Result:=TJSCaseElement(Items[AIndex]);
end;
-procedure TJSCaseElements.SetC(AIndex : Integer; const AValue: TJSCaseElement);
-begin
- Items[AIndex]:=AValue;
-end;
function TJSCaseElements.AddCase: TJSCaseElement;
begin
@@ -1631,10 +1809,6 @@ begin
Result:=TJSElementNode(Items[Aindex])
end;
-procedure TJSElementNodes.SetN(AIndex : Integer; const AValue: TJSElementNode);
-begin
- Items[AIndex]:=Avalue;
-end;
function TJSElementNodes.AddNode: TJSElementNode;
begin