Subversion Repositories Kolibri OS

Rev

Rev 9896 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9896 Rev 9898
Line 1... Line 1...
1
(*
1
(*
2
    Copyright 2016 Anton Krotov
2
    Copyright 2016, 2023 Anton Krotov
Line 3... Line 3...
3
 
3
 
Line 4... Line 4...
4
    This file is part of fb2read.
4
    This file is part of fb2read.
5
 
5
 
Line 17... Line 17...
17
    along with fb2read. If not, see .
17
    along with fb2read. If not, see .
18
*)
18
*)
Line 19... Line 19...
19
 
19
 
Line -... Line 20...
-
 
20
MODULE Vector;
Line -... Line 21...
-
 
21
 
-
 
22
IMPORT SYSTEM, K := KOSAPI;
20
MODULE Vector;
23
 
Line 21... Line 24...
21
 
24
 
Line 22... Line 25...
22
 
25
CONST
23
IMPORT sys := SYSTEM, K := KOSAPI;
-
 
24
 
26
	ptr_size = 4;
25
 
27
 
26
TYPE
28
 
27
 
-
 
28
  DESC_VECTOR = RECORD
29
TYPE
Line 29... Line 30...
29
 
30
 
Line 30... Line 31...
30
    data   : INTEGER;
31
	DESC_VECTOR = RECORD
Line 43... Line 44...
43
 
44
 
44
 
45
 
45
PROCEDURE push* (vector: VECTOR; value: ANYPTR);
46
PROCEDURE push* (vector: VECTOR; value: ANYPTR);
46
BEGIN
47
BEGIN
47
  IF vector.count = vector.size THEN
48
	IF vector.count = vector.size THEN
48
    vector.data := K.realloc(vector.data, (vector.size + 1024) * 4);
49
		vector.data := K.realloc(vector.data, (vector.size + 1024) * ptr_size);
49
    vector.size := vector.size + 1024
50
		vector.size := vector.size + 1024
50
  END;
51
	END;
51
  sys.PUT(vector.data + vector.count * 4, value);
52
	SYSTEM.PUT(vector.data + vector.count * ptr_size, value);
Line 52... Line 53...
52
  INC(vector.count)
53
	INC(vector.count)
-
 
54
END push;
53
END push;
55
 
54
 
56
 
55
 
57
PROCEDURE get* (vector: VECTOR; idx: INTEGER): ANYPTR;
56
PROCEDURE get* (vector: VECTOR; idx: INTEGER): ANYPTR;
58
VAR
57
VAR res: ANYPTR;
59
	res: ANYPTR;
58
BEGIN
60
BEGIN
Line 59... Line 61...
59
  ASSERT( (0 <= idx) & (idx < vector.count) );
61
	ASSERT( (0 <= idx) & (idx < vector.count) );
60
  sys.GET(vector.data + idx * 4, res)
62
	SYSTEM.GET(vector.data + idx * ptr_size, res)
61
  RETURN res
63
	RETURN res
62
END get;
64
END get;
63
 
65
 
Line 64... Line 66...
64
 
66
 
-
 
67
PROCEDURE put* (vector: VECTOR; idx: INTEGER; value: ANYPTR);
65
PROCEDURE put* (vector: VECTOR; idx: INTEGER; value: ANYPTR);
68
BEGIN
66
BEGIN
69
	ASSERT( (0 <= idx) & (idx < vector.count) );
67
  ASSERT( (0 <= idx) & (idx < vector.count) );
70
	SYSTEM.PUT(vector.data + idx * ptr_size, value)
68
  sys.PUT(vector.data + idx * 4, value)
71
END put;
69
END put;
72
 
70
 
73
 
71
 
74
PROCEDURE create* (size: INTEGER): VECTOR;
72
PROCEDURE create* (size: INTEGER): VECTOR;
75
VAR
Line 85... Line 88...
85
  DISPOSE(any)
88
	DISPOSE(any)
86
END def_destructor;
89
END def_destructor;
Line 87... Line 90...
87
 
90
 
-
 
91
 
88
 
92
PROCEDURE destroy* (VAR vector: VECTOR; destructor: DESTRUCTOR);
89
PROCEDURE destroy* (VAR vector: VECTOR; destructor: DESTRUCTOR);
93
VAR
90
VAR i: INTEGER;
94
	i: INTEGER;
91
    any: ANYPTR;
95
	any: ANYPTR;
92
BEGIN
96
BEGIN
93
  IF destructor = NIL THEN
97
	IF destructor = NIL THEN