aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/old/vlib/builtin/string_charptr_byteptr_helpers.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/old/vlib/builtin/string_charptr_byteptr_helpers.v')
-rw-r--r--v_windows/v/old/vlib/builtin/string_charptr_byteptr_helpers.v104
1 files changed, 104 insertions, 0 deletions
diff --git a/v_windows/v/old/vlib/builtin/string_charptr_byteptr_helpers.v b/v_windows/v/old/vlib/builtin/string_charptr_byteptr_helpers.v
new file mode 100644
index 0000000..e738ee2
--- /dev/null
+++ b/v_windows/v/old/vlib/builtin/string_charptr_byteptr_helpers.v
@@ -0,0 +1,104 @@
+module builtin
+
+// NB: this file will be removed soon
+
+// byteptr.vbytes() - makes a V []byte structure from a C style memory buffer. NB: the data is reused, NOT copied!
+[unsafe]
+pub fn (data byteptr) vbytes(len int) []byte {
+ return unsafe { voidptr(data).vbytes(len) }
+}
+
+// vstring converts a C style string to a V string. NB: the string data is reused, NOT copied.
+// strings returned from this function will be normal V strings beside that (i.e. they would be
+// freed by V's -autofree mechanism, when they are no longer used).
+[unsafe]
+pub fn (bp byteptr) vstring() string {
+ return string{
+ str: bp
+ len: unsafe { C.strlen(&char(bp)) }
+ }
+}
+
+// vstring_with_len converts a C style string to a V string.
+// NB: the string data is reused, NOT copied.
+[unsafe]
+pub fn (bp byteptr) vstring_with_len(len int) string {
+ return string{
+ str: bp
+ len: len
+ is_lit: 0
+ }
+}
+
+// vstring converts C char* to V string.
+// NB: the string data is reused, NOT copied.
+[unsafe]
+pub fn (cp charptr) vstring() string {
+ return string{
+ str: byteptr(cp)
+ len: unsafe { C.strlen(&char(cp)) }
+ is_lit: 0
+ }
+}
+
+// vstring_with_len converts C char* to V string.
+// NB: the string data is reused, NOT copied.
+[unsafe]
+pub fn (cp charptr) vstring_with_len(len int) string {
+ return string{
+ str: byteptr(cp)
+ len: len
+ is_lit: 0
+ }
+}
+
+// vstring_literal converts a C style string to a V string.
+// NB: the string data is reused, NOT copied.
+// NB2: unlike vstring, vstring_literal will mark the string
+// as a literal, so it will not be freed by autofree.
+// This is suitable for readonly strings, C string literals etc,
+// that can be read by the V program, but that should not be
+// managed by it, for example `os.args` is implemented using it.
+[unsafe]
+pub fn (bp byteptr) vstring_literal() string {
+ return string{
+ str: bp
+ len: unsafe { C.strlen(&char(bp)) }
+ is_lit: 1
+ }
+}
+
+// vstring_with_len converts a C style string to a V string.
+// NB: the string data is reused, NOT copied.
+[unsafe]
+pub fn (bp byteptr) vstring_literal_with_len(len int) string {
+ return string{
+ str: bp
+ len: len
+ is_lit: 1
+ }
+}
+
+// vstring_literal converts C char* to V string.
+// See also vstring_literal defined on byteptr for more details.
+// NB: the string data is reused, NOT copied.
+[unsafe]
+pub fn (cp charptr) vstring_literal() string {
+ return string{
+ str: byteptr(cp)
+ len: unsafe { C.strlen(&char(cp)) }
+ is_lit: 1
+ }
+}
+
+// vstring_literal_with_len converts C char* to V string.
+// See also vstring_literal_with_len defined on byteptr.
+// NB: the string data is reused, NOT copied.
+[unsafe]
+pub fn (cp charptr) vstring_literal_with_len(len int) string {
+ return string{
+ str: byteptr(cp)
+ len: len
+ is_lit: 1
+ }
+}