From 14c03b7c26ff06835fca631eed6a3e308946321a Mon Sep 17 00:00:00 2001 From: _ov4 Date: Sun, 18 Oct 2026 08:16:01 +0000 Subject: feat(lib): add experimental _EXP_STRING backed by std::string Co-Authored-By: Claude Opus 5.5 --- pseudocode-lib/_exp_string.cps | 67 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 pseudocode-lib/_exp_string.cps (limited to 'pseudocode-lib/_exp_string.cps') diff --git a/pseudocode-lib/_exp_string.cps b/pseudocode-lib/_exp_string.cps new file mode 100644 index 0000000..369e20f --- /dev/null +++ b/pseudocode-lib/_exp_string.cps @@ -0,0 +1,67 @@ +#LIB +INCLUDE_OBJ "_exp_string.o" +TYPE _EXP_STRING_HANDLE = C_TYPE("void*") +TYPE _EXP_STRING_C_INTEGER = C_TYPE("long long") +EXTERN "C" EXTERN_FUNCTION _exp_string_impl_new() RETURNS _EXP_STRING_HANDLE +EXTERN "C" EXTERN_FUNCTION _exp_string_impl_copy(_EXP_STRING_HANDLE) RETURNS _EXP_STRING_HANDLE +EXTERN "C" EXTERN_FUNCTION _exp_string_impl_from_cstr(C_STRING) RETURNS _EXP_STRING_HANDLE +EXTERN "C" EXTERN_FUNCTION _exp_string_impl_from_count_char(_EXP_STRING_C_INTEGER, C_CHAR) RETURNS _EXP_STRING_HANDLE +EXTERN "C" EXTERN_PROCEDURE _exp_string_impl_delete(_EXP_STRING_HANDLE) +EXTERN "C" EXTERN_PROCEDURE _exp_string_impl_assign(_EXP_STRING_HANDLE, _EXP_STRING_HANDLE) +EXTERN "C" EXTERN_PROCEDURE _exp_string_impl_assign_cstr(_EXP_STRING_HANDLE, C_STRING) +EXTERN "C" EXTERN_PROCEDURE _exp_string_impl_concat(_EXP_STRING_HANDLE, _EXP_STRING_HANDLE, _EXP_STRING_HANDLE) +EXTERN "C" EXTERN_PROCEDURE _exp_string_impl_from_int(_EXP_STRING_HANDLE, _EXP_STRING_C_INTEGER) +EXTERN "C" EXTERN_PROCEDURE _exp_string_impl_from_real(_EXP_STRING_HANDLE, C_DOUBLE) +EXTERN "C" EXTERN_FUNCTION _exp_string_impl_to_real(_EXP_STRING_HANDLE) RETURNS C_DOUBLE +EXTERN "C" EXTERN_FUNCTION _exp_string_impl_length(_EXP_STRING_HANDLE) RETURNS _EXP_STRING_C_INTEGER +EXTERN "C" EXTERN_PROCEDURE _exp_string_impl_output(_EXP_STRING_HANDLE) + +CLASS _EXP_STRING + PUBLIC _HANDLE : _EXP_STRING_HANDLE + OVERLOAD PROCEDURE NEW() + _HANDLE <- _exp_string_impl_new() + ENDPROCEDURE + OVERLOAD PROCEDURE NEW(BYREF Other : _EXP_STRING) + _HANDLE <- _exp_string_impl_copy(Other._HANDLE) + ENDPROCEDURE + OVERLOAD PROCEDURE NEW(Text : C_STRING) + _HANDLE <- _exp_string_impl_from_cstr(Text) + ENDPROCEDURE + OVERLOAD PROCEDURE NEW(Count : INTEGER, Ch : C_CHAR) + _HANDLE <- _exp_string_impl_from_count_char((_EXP_STRING_C_INTEGER)Count, Ch) + ENDPROCEDURE + PROCEDURE DELETE() + CALL _exp_string_impl_delete(_HANDLE) + ENDPROCEDURE + OVERLOAD PROCEDURE OPERATOR<-(BYREF Other : _EXP_STRING) + CALL _exp_string_impl_assign(_HANDLE, Other._HANDLE) + ENDPROCEDURE + OVERLOAD PROCEDURE OPERATOR<-(Text : C_STRING) + CALL _exp_string_impl_assign_cstr(_HANDLE, Text) + ENDPROCEDURE +ENDCLASS + +OVERLOAD FUNCTION OPERATOR&(A : _EXP_STRING, B : _EXP_STRING) RETURNS _EXP_STRING + DECLARE Result : _EXP_STRING + CALL _exp_string_impl_concat(Result._HANDLE, A._HANDLE, B._HANDLE) + RETURN Result +ENDFUNCTION +OVERLOAD FUNCTION _EXP_STRING_NUM_TO_STR(Number : INTEGER) RETURNS _EXP_STRING + DECLARE Result : _EXP_STRING + CALL _exp_string_impl_from_int(Result._HANDLE, (_EXP_STRING_C_INTEGER)Number) + RETURN Result +ENDFUNCTION +OVERLOAD FUNCTION _EXP_STRING_NUM_TO_STR(Number : REAL) RETURNS _EXP_STRING + DECLARE Result : _EXP_STRING + CALL _exp_string_impl_from_real(Result._HANDLE, (C_DOUBLE)Number) + RETURN Result +ENDFUNCTION +FUNCTION _EXP_STRING_STR_TO_NUM(S : _EXP_STRING) RETURNS REAL + RETURN (REAL)_exp_string_impl_to_real(S._HANDLE) +ENDFUNCTION +FUNCTION _EXP_STRING_LENGTH(S : _EXP_STRING) RETURNS INTEGER + RETURN (INTEGER)_exp_string_impl_length(S._HANDLE) +ENDFUNCTION +PROCEDURE _EXP_STRING_OUTPUT(S : _EXP_STRING) + CALL _exp_string_impl_output(S._HANDLE) +ENDPROCEDURE -- cgit v1.3.1-4-g156e