aboutsummaryrefslogtreecommitdiff
path: root/pseudocode-lib/string.cps
blob: 135f5d72256769fd5bd2a4c244bf73a365520fb5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151

PP_DEFINE __LIB
INCLUDE_OBJ "string.o"
TYPE _STRING_HANDLE = C_TYPE("void*")
TYPE _STRING_C_INTEGER = C_TYPE("long long")
EXTERN "C" EXTERN_FUNCTION _string_impl_new() RETURNS _STRING_HANDLE
EXTERN "C" EXTERN_FUNCTION _string_impl_copy(_STRING_HANDLE) RETURNS _STRING_HANDLE
EXTERN "C" EXTERN_FUNCTION _string_impl_from_cstr(C_STRING) RETURNS _STRING_HANDLE
EXTERN "C" EXTERN_FUNCTION _string_impl_from_count_char(_STRING_C_INTEGER, C_CHAR) RETURNS _STRING_HANDLE
EXTERN "C" EXTERN_PROCEDURE _string_impl_delete(_STRING_HANDLE)
EXTERN "C" EXTERN_PROCEDURE _string_impl_assign(_STRING_HANDLE, _STRING_HANDLE)
EXTERN "C" EXTERN_PROCEDURE _string_impl_assign_cstr(_STRING_HANDLE, C_STRING)
EXTERN "C" EXTERN_PROCEDURE _string_impl_concat(_STRING_HANDLE, _STRING_HANDLE, _STRING_HANDLE)
EXTERN "C" EXTERN_PROCEDURE _string_impl_from_int(_STRING_HANDLE, _STRING_C_INTEGER)
EXTERN "C" EXTERN_PROCEDURE _string_impl_from_real(_STRING_HANDLE, C_DOUBLE)
EXTERN "C" EXTERN_FUNCTION _string_impl_to_real(_STRING_HANDLE) RETURNS C_DOUBLE
EXTERN "C" EXTERN_FUNCTION _string_impl_length(_STRING_HANDLE) RETURNS _STRING_C_INTEGER
EXTERN "C" EXTERN_PROCEDURE _string_impl_left(_STRING_HANDLE, _STRING_HANDLE, _STRING_C_INTEGER)
EXTERN "C" EXTERN_PROCEDURE _string_impl_right(_STRING_HANDLE, _STRING_HANDLE, _STRING_C_INTEGER)
EXTERN "C" EXTERN_PROCEDURE _string_impl_mid(_STRING_HANDLE, _STRING_HANDLE, _STRING_C_INTEGER, _STRING_C_INTEGER)
EXTERN "C" EXTERN_PROCEDURE _string_impl_lcase(_STRING_HANDLE, _STRING_HANDLE)
EXTERN "C" EXTERN_FUNCTION _string_impl_lcase_char(C_CHAR) RETURNS C_CHAR
EXTERN "C" EXTERN_PROCEDURE _string_impl_ucase(_STRING_HANDLE, _STRING_HANDLE)
EXTERN "C" EXTERN_FUNCTION _string_impl_ucase_char(C_CHAR) RETURNS C_CHAR
EXTERN "C" EXTERN_FUNCTION _string_impl_asc(_STRING_HANDLE) RETURNS _STRING_C_INTEGER
EXTERN "C" EXTERN_FUNCTION _string_impl_asc_char(C_CHAR) RETURNS _STRING_C_INTEGER
EXTERN "C" EXTERN_FUNCTION _string_impl_chr_char(_STRING_C_INTEGER) RETURNS C_CHAR
EXTERN "C" EXTERN_FUNCTION _string_impl_is_num(_STRING_HANDLE) RETURNS C_INT
EXTERN "C" EXTERN_FUNCTION _string_impl_c_str(_STRING_HANDLE) RETURNS C_STRING
EXTERN "C" EXTERN_PROCEDURE _string_impl_input(_STRING_HANDLE)
EXTERN "C" EXTERN_FUNCTION _string_impl_compare(_STRING_HANDLE, _STRING_HANDLE) RETURNS C_INT

CLASS STRING
    PUBLIC _HANDLE : _STRING_HANDLE
    OVERLOAD PROCEDURE NEW()
        _HANDLE <- _string_impl_new()
    ENDPROCEDURE
    OVERLOAD PROCEDURE NEW(BYREF Other : STRING)
        _HANDLE <- _string_impl_copy(Other._HANDLE)
    ENDPROCEDURE
    OVERLOAD PROCEDURE NEW(Text : C_STRING)
        _HANDLE <- _string_impl_from_cstr(Text)
    ENDPROCEDURE
    OVERLOAD PROCEDURE NEW(Count : INTEGER, Ch : C_CHAR)
        _HANDLE <- _string_impl_from_count_char((_STRING_C_INTEGER)Count, Ch)
    ENDPROCEDURE
    PROCEDURE DELETE()
        CALL _string_impl_delete(_HANDLE)
    ENDPROCEDURE
    OVERLOAD PROCEDURE OPERATOR<-(BYREF Other : STRING)
        CALL _string_impl_assign(_HANDLE, Other._HANDLE)
    ENDPROCEDURE
    OVERLOAD PROCEDURE OPERATOR<-(Text : C_STRING)
        CALL _string_impl_assign_cstr(_HANDLE, Text)
    ENDPROCEDURE
    FUNCTION _LENGTH() RETURNS INTEGER
        RETURN (INTEGER)_string_impl_length(_HANDLE)
    ENDFUNCTION
    FUNCTION C_STR() RETURNS C_STRING
        RETURN _string_impl_c_str(_HANDLE)
    ENDFUNCTION
    PROCEDURE READ_INPUT()
        CALL _string_impl_input(_HANDLE)
    ENDPROCEDURE
ENDCLASS

OVERLOAD FUNCTION OPERATOR&(A : STRING, B : STRING) RETURNS STRING
    DECLARE Result : STRING
    CALL _string_impl_concat(Result._HANDLE, A._HANDLE, B._HANDLE)
    RETURN Result
ENDFUNCTION
OVERLOAD FUNCTION NUM_TO_STR(Number : INTEGER) RETURNS STRING
    DECLARE Result : STRING
    CALL _string_impl_from_int(Result._HANDLE, (_STRING_C_INTEGER)Number)
    RETURN Result
ENDFUNCTION
OVERLOAD FUNCTION NUM_TO_STR(Number : REAL) RETURNS STRING
    DECLARE Result : STRING
    CALL _string_impl_from_real(Result._HANDLE, (C_DOUBLE)Number)
    RETURN Result
ENDFUNCTION
OVERLOAD FUNCTION STR_TO_NUM(S : STRING) RETURNS REAL
    RETURN (REAL)_string_impl_to_real(S._HANDLE)
ENDFUNCTION
OVERLOAD FUNCTION STR_TO_NUM(C : CHAR) RETURNS REAL
    DECLARE S : STRING(1, (C_CHAR)C)
    RETURN STR_TO_NUM(S)
ENDFUNCTION
FUNCTION LENGTH(S : STRING) RETURNS INTEGER
    RETURN (INTEGER)_string_impl_length(S._HANDLE)
ENDFUNCTION
FUNCTION LEFT(S : STRING, Count : INTEGER) RETURNS STRING
    DECLARE Result : STRING
    CALL _string_impl_left(Result._HANDLE, S._HANDLE, (_STRING_C_INTEGER)Count)
    RETURN Result
ENDFUNCTION
FUNCTION RIGHT(S : STRING, Count : INTEGER) RETURNS STRING
    DECLARE Result : STRING
    CALL _string_impl_right(Result._HANDLE, S._HANDLE, (_STRING_C_INTEGER)Count)
    RETURN Result
ENDFUNCTION
FUNCTION MID(S : STRING, Start : INTEGER, Count : INTEGER) RETURNS STRING
    DECLARE Result : STRING
    CALL _string_impl_mid(Result._HANDLE, S._HANDLE, (_STRING_C_INTEGER)Start, (_STRING_C_INTEGER)Count)
    RETURN Result
ENDFUNCTION
OVERLOAD FUNCTION LCASE(S : STRING) RETURNS STRING
    DECLARE Result : STRING
    CALL _string_impl_lcase(Result._HANDLE, S._HANDLE)
    RETURN Result
ENDFUNCTION
OVERLOAD FUNCTION LCASE(Ch : CHAR) RETURNS CHAR
    RETURN (CHAR)_string_impl_lcase_char((C_CHAR)Ch)
ENDFUNCTION
OVERLOAD FUNCTION UCASE(S : STRING) RETURNS STRING
    DECLARE Result : STRING
    CALL _string_impl_ucase(Result._HANDLE, S._HANDLE)
    RETURN Result
ENDFUNCTION
OVERLOAD FUNCTION UCASE(Ch : CHAR) RETURNS CHAR
    RETURN (CHAR)_string_impl_ucase_char((C_CHAR)Ch)
ENDFUNCTION
OVERLOAD FUNCTION ASC(S : STRING) RETURNS INTEGER
    RETURN (INTEGER)_string_impl_asc(S._HANDLE)
ENDFUNCTION
OVERLOAD FUNCTION ASC(Ch : CHAR) RETURNS INTEGER
    RETURN (INTEGER)_string_impl_asc_char((C_CHAR)Ch)
ENDFUNCTION
FUNCTION CHR(Code : INTEGER) RETURNS CHAR
    RETURN (CHAR)_string_impl_chr_char((_STRING_C_INTEGER)Code)
ENDFUNCTION
FUNCTION IS_NUM(S : STRING) RETURNS BOOLEAN
    RETURN (BOOLEAN)_string_impl_is_num(S._HANDLE)
ENDFUNCTION
OVERLOAD FUNCTION OPERATOR=(A : STRING, B : STRING) RETURNS BOOLEAN
    RETURN (INTEGER)_string_impl_compare(A._HANDLE, B._HANDLE) = 0
ENDFUNCTION
OVERLOAD FUNCTION OPERATOR<>(A : STRING, B : STRING) RETURNS BOOLEAN
    RETURN (INTEGER)_string_impl_compare(A._HANDLE, B._HANDLE) <> 0
ENDFUNCTION
OVERLOAD FUNCTION OPERATOR<(A : STRING, B : STRING) RETURNS BOOLEAN
    RETURN (INTEGER)_string_impl_compare(A._HANDLE, B._HANDLE) < 0
ENDFUNCTION
OVERLOAD FUNCTION OPERATOR>(A : STRING, B : STRING) RETURNS BOOLEAN
    RETURN (INTEGER)_string_impl_compare(A._HANDLE, B._HANDLE) > 0
ENDFUNCTION
OVERLOAD FUNCTION OPERATOR<=(A : STRING, B : STRING) RETURNS BOOLEAN
    RETURN (INTEGER)_string_impl_compare(A._HANDLE, B._HANDLE) <= 0
ENDFUNCTION
OVERLOAD FUNCTION OPERATOR>=(A : STRING, B : STRING) RETURNS BOOLEAN
    RETURN (INTEGER)_string_impl_compare(A._HANDLE, B._HANDLE) >= 0
ENDFUNCTION