aboutsummaryrefslogtreecommitdiff
path: root/0013/Vector_Prim.Integer.pas
diff options
context:
space:
mode:
Diffstat (limited to '0013/Vector_Prim.Integer.pas')
-rw-r--r--0013/Vector_Prim.Integer.pas55
1 files changed, 55 insertions, 0 deletions
diff --git a/0013/Vector_Prim.Integer.pas b/0013/Vector_Prim.Integer.pas
new file mode 100644
index 0000000..7ff4775
--- /dev/null
+++ b/0013/Vector_Prim.Integer.pas
@@ -0,0 +1,55 @@
+unit Vector_Prim.Integer;
+
+interface
+uses
+ Prim;
+
+type
+ TVector = record
+ len: Longint;
+ capacity: Longint;
+ buf: Array of Integer;
+ end;
+ PElem = ^Integer;
+ TElem = Integer;
+
+procedure init(var this: TVector);
+function get_elem(var this: TVector; n: Longint): PElem;
+procedure set_elem(var this: TVector; n: Longint; elem: Integer);
+procedure push_elem(var this: TVector; elem: Integer);
+
+implementation
+procedure init(var this: TVector);
+begin
+ this.len := 0;
+ this.capacity := 16;
+ setLength(this.buf, 16);
+end;
+
+function get_elem(var this: TVector; n: Longint): PElem;
+begin
+ get_elem := @(this.buf[n]);
+end;
+
+procedure set_elem(var this: TVector; n: Longint; elem: Integer);
+begin
+ this.buf[n] := elem;
+end;
+
+procedure push_elem(var this: TVector; elem: Integer);
+var
+ newcap: Longint;
+begin
+ if this.len = this.capacity - 1 then
+ begin
+ newcap := this.capacity * 2;
+ setLength(this.buf, newcap);
+ this.capacity := newcap;
+ end;
+ this.buf[this.len] := elem;
+ this.len := this.len + 1;
+end;
+
+end.
+
+