Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type
- sharedStringObj = object
- len: int
- sptr: pointer
- sharedString* = ptr sharedStringObj
- proc newSharedString*(s: cstring = nil): sharedString =
- result = cast[sharedString](allocShared0(sizeof(sharedStringObj)))
- if s.len != 0:
- result.len = s.len
- result.sptr = allocShared0(s.len)
- var
- ssc = cast[cstring](result.sptr)
- for i in 0 .. s.len-1:
- ssc[i] = s[i]
- proc freeSharedString*(ss: var sharedString) =
- if not ss.isNil:
- if not ss.sptr.isNil and ss.len != 0:
- ss.sptr.deallocShared()
- ss.len = 0
- ss.sptr = nil
- ss.deallocShared()
- ss = nil
- proc `$`*(ss: sharedString): string =
- result = $(cast[cstring](ss.sptr))
- proc `&`*(ss: sharedString, c: char|string|cstring|sharedString): string =
- $ss & $c
- proc test() =
- var
- a = newSharedString()
- b = newSharedString("abc")
- c = newSharedString("def".cstring)
- defer:
- a.freeSharedString()
- b.freeSharedString()
- c.freeSharedString()
- echo a
- echo b
- echo c
- echo b & 'c'
- echo b & "d"
- echo b & "e".cstring
- echo b & c
- when isMainModule:
- test()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement