/core/alien/strings/strings.factor

http://github.com/abeaumont/factor · Factor · 71 lines · 48 code · 21 blank · 2 comment · 1 complexity · ece92c85d31841a37d7c143791255ae5 MD5 · raw file

  1. ! Copyright (C) 2008, 2011 Slava Pestov.
  2. ! See http://factorcode.org/license.txt for BSD license.
  3. USING: accessors alien arrays byte-arrays init io io.encodings
  4. io.encodings.utf16n io.encodings.utf8 io.streams.byte-array
  5. io.streams.memory kernel kernel.private namespaces sequences
  6. strings system system.private ;
  7. IN: alien.strings
  8. GENERIC# alien>string 1 ( c-ptr encoding -- string/f )
  9. M: c-ptr alien>string
  10. [ <memory-stream> ] [ <decoder> ] bi*
  11. "\0" swap stream-read-until drop ;
  12. M: object alien>string
  13. [ underlying>> ] dip alien>string ;
  14. M: f alien>string
  15. drop ;
  16. ERROR: invalid-c-string string ;
  17. : check-string ( string -- )
  18. 0 over member-eq? [ invalid-c-string ] [ drop ] if ;
  19. GENERIC# string>alien 1 ( string encoding -- byte-array )
  20. M: c-ptr string>alien drop ;
  21. M: string string>alien
  22. over check-string
  23. <byte-writer>
  24. [ stream-write ]
  25. [ 0 swap stream-write1 ]
  26. [ stream>> >byte-array ]
  27. tri ;
  28. M: tuple string>alien drop underlying>> ;
  29. HOOK: native-string-encoding os ( -- encoding ) foldable
  30. M: unix native-string-encoding utf8 ;
  31. M: windows native-string-encoding utf16n ;
  32. : alien>native-string ( alien -- string )
  33. native-string-encoding alien>string ; inline
  34. : native-string>alien ( string -- alien )
  35. native-string-encoding string>alien ; inline
  36. : dll-path ( dll -- string )
  37. path>> alien>native-string ;
  38. GENERIC: string>symbol ( str/seq -- alien )
  39. M: string string>symbol utf8 string>alien ;
  40. M: sequence string>symbol [ utf8 string>alien ] map ;
  41. : (symbol>string) ( alien -- str )
  42. utf8 alien>string ;
  43. GENERIC: symbol>string ( symbol(s) -- string(s) )
  44. M: byte-array symbol>string (symbol>string) ;
  45. M: array symbol>string [ (symbol>string) ] map ;
  46. [
  47. OBJ-CPU special-object utf8 alien>string string>cpu \ cpu set-global
  48. OBJ-OS special-object utf8 alien>string string>os \ os set-global
  49. OBJ-VM-COMPILER special-object utf8 alien>string \ vm-compiler set-global
  50. ] "alien.strings" add-startup-hook