Skip to content

Commit

Permalink
Add KDTree
Browse files Browse the repository at this point in the history
  • Loading branch information
slackydev committed Dec 24, 2024
1 parent 54535df commit 4090ae9
Show file tree
Hide file tree
Showing 3 changed files with 735 additions and 1 deletion.
115 changes: 115 additions & 0 deletions Source/script/imports/simba.import_kdtree.pas
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
unit simba.import_kdtree;

{$i simba.inc}

interface

uses
Classes, SysUtils,
simba.base, simba.script;

procedure ImportKDTree(Script: TSimbaScript);

implementation

uses
lptypes,
simba.container_kdtree;

(*
function RefArray(): TKDNodeRefArray;
function GetItem(i:Int32): PKDNode;
function InitBranch(): Int32;
function Copy(): TKDTree;
procedure Init(const AData: TKDItems);
function IndexOf(const Value: TSingleArray): Int32;
function KNearest(Vector: TSingleArray; K: Int32; NotEqual: Boolean = False): TKDItems;
function RangeQuery(Low, High: TSingleArray): TKDItems;
function RangeQueryEx(Center: TSingleArray; Radii: TSingleArray; Hide: Boolean): TKDItems;
function KNearestClassify(Vector: TSingleArray; K: Int32): Int32;
function WeightedKNearestClassify(Vector: TSingleArray; K: Int32; NotEqual: Boolean = False): Int32;
*)

procedure _LapeKDTreeRefArray(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
begin
TKDNodeRefArray(Result^) := TKDTree(Params^[0]^).RefArray();
end;

procedure _LapeKDTreeGetItem(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
begin
PKDNode(Result^) := TKDTree(Params^[0]^).GetItem(Int32(Params^[1]^));
end;

procedure _LapeKDTreeCopy(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
begin
TKDTree(Result^) := TKDTree(Params^[0]^).Copy();
end;

procedure _LapeKDTreeInit(const Params: PParamArray); LAPE_WRAPPER_CALLING_CONV
begin
TKDTree(Params^[0]^).Init(TKDItems(Params^[1]^));
end;

procedure _LapeKDTreeIndexOf(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
begin
PInteger(Result)^ := TKDTree(Params^[0]^).IndexOf(TSingleArray(Params^[1]^));
end;

procedure _LapeSlackTreeKNearest(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
begin
TKDItems(Result^) := TKDTree(Params^[0]^).KNearest(TSingleArray(Params^[1]^), Int32(Params^[2]^), Boolean(Params^[2]^));
end;

procedure _LapeSlackTreeRangeQuery(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
begin
TKDItems(Result^) := TKDTree(Params^[0]^).RangeQuery(TSingleArray(Params^[1]^), TSingleArray(Params^[2]^));
end;

procedure _LapeSlackTreeRangeQueryEx(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
begin
TKDItems(Result^) := TKDTree(Params^[0]^).RangeQueryEx(TSingleArray(Params^[1]^), TSingleArray(Params^[2]^), Boolean(Params^[2]^));
end;

procedure _LapeSlackTreeKNearestClassify(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
begin
Int32(Result^) := TKDTree(Params^[0]^).KNearestClassify(TSingleArray(Params^[1]^), Int32(Params^[2]^));
end;

procedure _LapeSlackTreeWeightedKNearestClassify(const Params: PParamArray; const Result: Pointer); LAPE_WRAPPER_CALLING_CONV
begin
Int32(Result^) := TKDTree(Params^[0]^).KNearestClassify(TSingleArray(Params^[1]^), Int32(Params^[2]^));
end;



procedure ImportKDTree(Script: TSimbaScript);
begin
with Script.Compiler do
begin
addGlobalType('record Ref: Int32; Vector: TSingleArray; end;', 'TKDItem');
addGlobalType('array of TKDItem;', 'TKDItems');

addGlobalType('record Split: TKDItem; L, R: Integer; Hidden: Boolean; end;', 'TKDNode');
addGlobalType('^TKDNode', 'PKDNode');

addGlobalType('array of TKDNode;', 'TKDNodeArray');
addGlobalType('array of PKDNode;', 'TKDNodeRefArray');

addGlobalType('record Dimensions: Int32; Data: TSlackArray; Size: Integer; end;', 'TKDTree');


addGlobalFunc('function TKDTree.RefArray(): TKDNodeRefArray;', @_LapeKDTreeRefArray);
addGlobalFunc('function TKDTree.GetItem(i:Int32): PKDNode;', @_LapeKDTreeGetItem);
addGlobalFunc('function TKDTree.Copy(): TKDTree;', @_LapeKDTreeCopy);
addGlobalFunc('procedure TKDTree.Init(const AData: TKDItems);', @_LapeKDTreeInit);
addGlobalFunc('function TKDTree.IndexOf(const Value: TSingleArray): Int32;', @_LapeKDTreeIndexOf);
addGlobalFunc('function TKDTree.KNearest(Vector: TSingleArray; K: Int32; NotEqual: Boolean = False): TKDItems;', @_LapeSlackTreeKNearest);
addGlobalFunc('function TKDTree.RangeQuery(Low, High: TSingleArray): TKDItems;', @_LapeSlackTreeRangeQuery);
addGlobalFunc('function TKDTree.RangeQueryEx(Center: TSingleArray; Radii: TSingleArray; Hide: Boolean): TKDItems;', @_LapeSlackTreeRangeQueryEx);
addGlobalFunc('function TKDTree.KNearestClassify(Vector: TSingleArray; K: Int32): Int32;', @_LapeSlackTreeKNearestClassify);
addGlobalFunc('function TKDTree.WeightedKNearestClassify(Vector: TSingleArray; K: Int32): Int32;', @_LapeSlackTreeWeightedKNearestClassify);
end;
end;

end.

3 changes: 2 additions & 1 deletion Source/script/simba.script_imports.pas
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ implementation
simba.import_quad, simba.import_box, simba.import_point,
simba.import_circle, simba.import_datetime,
simba.import_encoding, simba.import_file, simba.import_process,
simba.import_target, simba.import_math, simba.import_misc, simba.import_slacktree, simba.import_string,
simba.import_target, simba.import_math, simba.import_misc, simba.import_slacktree, simba.import_kdtree, simba.import_string,
simba.import_random, simba.import_debugimage, simba.import_web, simba.import_threading,
simba.import_async,

Expand Down Expand Up @@ -91,6 +91,7 @@ procedure AddSimbaImports(Script: TSimbaScript);
ImportTarget(Script);
ImportMath(Script);
ImportSlackTree(Script);
ImportKDTree(Script);
ImportString(Script);
ImportRandom(Script);
ImportDebugImage(Script);
Expand Down
Loading

0 comments on commit 4090ae9

Please sign in to comment.