wrote basic operations of lib/string

This commit is contained in:
Koichi Nakamura 2021-12-08 08:40:06 +09:00
parent 584491e62e
commit 698759cd17

View file

@ -1,23 +1,48 @@
\ planckforth - \ planckforth -
\ Copyright (C) 2021 nineties \ Copyright (C) 2021 nineties
( === String === ) ( === Heap Allocated String === )
private{ private{
\ Heap-allocated string object : make-string ( c-addr -- str )
\ p: null terminated string dup 0<> check-argument
: make-string ( p -- str ) dup strlen 1+ allocate throw
dup strlen 1 + allocate throw tuck strcpy tuck strcpy
; export ; export
: release-string ( str -- ) free ; export : release-string ( str -- )
free
; export
: concat-string ( str1 str2 -- newstr )
dup 0<> check-argument
over 0<> check-argument
over strlen over strlen
( str1 str2 n1 n2 )
over + 1+ allocate throw
( str1 str2 n1 ptr )
3 pick over strcpy \ copy str1 to ptr
( str1 str2 n1 ptr)
tuck + 2 pick swap strcpy \ copy str2 to ptr + n1
swap drop swap drop
; export
}private }private
T{ s" AAAAA" make-string constant A -> }T T{ s" AAAAA" make-string constant A -> }T
T{ s" BBBBBBB" make-string constant B -> }T T{ s" BBBBBBB" make-string constant B -> }T
T{ s" " make-string constant C -> }T
T{ A B concat-string constant D -> }T
T{ A s" AAAAA" streq -> true }T T{ A s" AAAAA" streq -> true }T
T{ B s" BBBBBBB" streq -> true }T T{ B s" BBBBBBB" streq -> true }T
T{ C s" " streq -> true }T
T{ D s" AAAAABBBBBBB" streq -> true }T
T{ A strlen -> 5 }T
T{ B strlen -> 7 }T
T{ C strlen -> 0 }T
T{ D strlen -> 12 }T
T{ A release-string -> }T T{ A release-string -> }T
T{ B release-string -> }T T{ B release-string -> }T
T{ C release-string -> }T
T{ D release-string -> }T