54 lines
1.8 KiB
Nim
54 lines
1.8 KiB
Nim
# Copyright (c) 2017 Xored Software, Inc.
|
|
|
|
type
|
|
GodotString* {.byref.} = object
|
|
data: array[sizeof(int), byte]
|
|
|
|
proc initGodotString(dest: var GodotString) {.
|
|
importc: "godot_string_new".}
|
|
proc initGodotString(dest: var GodotString; contents: cstring;
|
|
size: cint) {.
|
|
importc: "godot_string_new_data".}
|
|
## Initializes ``dest`` from UTF-8 ``contents``
|
|
proc getData(self: GodotString; dest: cstring;
|
|
size: var cint) {.
|
|
noSideEffect
|
|
importc: "godot_string_get_data".}
|
|
## Converts ``self`` into UTF-8 encoding, putting the result into ``dest``.
|
|
|
|
proc len*(self: GodotString): cint {.inline.} =
|
|
## Returns the length of string in bytes if it is represented as UTF-8.
|
|
getData(self, nil, result)
|
|
|
|
proc cstring*(self: GodotString): cstring {.
|
|
importc: "godot_string_c_str".}
|
|
proc `==`*(self, b: GodotString): bool {.
|
|
importc: "godot_string_operator_equal".}
|
|
proc `<`*(self, b: GodotString): bool {.
|
|
importc: "godot_string_operator_less".}
|
|
proc `&`*(self, b: GodotString): GodotString {.
|
|
importc: "godot_string_operator_plus".}
|
|
|
|
proc deinit*(self: var GodotString) {.importc: "godot_string_destroy".}
|
|
|
|
proc `$`*(self: GodotString): string =
|
|
## Converts the ``GodotString`` into Nim string
|
|
var length = self.len
|
|
result = newStringOfCap(length)
|
|
getData(self, addr result[0], length)
|
|
result.setLen(length)
|
|
assert(result[length] == '\0')
|
|
|
|
proc toGodotString*(s: string): GodotString {.inline.} =
|
|
## Converts the Nim string into ``GodotString``
|
|
if s.isNil:
|
|
initGodotString(result)
|
|
else:
|
|
initGodotString(result, unsafeAddr s[0], cint(s.len + 1))
|
|
|
|
proc toGodotString*(s: cstring): GodotString {.inline.} =
|
|
## Converts the cstring into ``GodotString``
|
|
if s.isNil:
|
|
initGodotString(result)
|
|
else:
|
|
initGodotString(result, s, cint(s.len + 1))
|