aboutsummaryrefslogtreecommitdiff
path: root/pseudocode-lib/string.cps
diff options
context:
space:
mode:
Diffstat (limited to 'pseudocode-lib/string.cps')
-rw-r--r--pseudocode-lib/string.cps146
1 files changed, 146 insertions, 0 deletions
diff --git a/pseudocode-lib/string.cps b/pseudocode-lib/string.cps
new file mode 100644
index 0000000..41181c4
--- /dev/null
+++ b/pseudocode-lib/string.cps
@@ -0,0 +1,146 @@
+#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_PROCEDURE _string_impl_chr(_STRING_HANDLE, _STRING_C_INTEGER)
+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 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
+FUNCTION STR_TO_NUM(S : STRING) RETURNS REAL
+ RETURN (REAL)_string_impl_to_real(S._HANDLE)
+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 STRING
+ DECLARE Result : STRING
+ CALL _string_impl_chr(Result._HANDLE, (_STRING_C_INTEGER)Code)
+ RETURN Result
+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