lib/standard: Introduce text subgroup for all string-manipulations
[nit.git] / lib / standard / text / native.nit
diff --git a/lib/standard/text/native.nit b/lib/standard/text/native.nit
new file mode 100644 (file)
index 0000000..95c42ee
--- /dev/null
@@ -0,0 +1,49 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# This file is free software, which comes along with NIT.  This software is
+# distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+# without  even  the implied warranty of  MERCHANTABILITY or  FITNESS FOR A
+# PARTICULAR PURPOSE.  You can modify it is you want,  provided this header
+# is kept unaltered, and a notification of the changes is added.
+# You  are  allowed  to  redistribute it and sell it, alone or is a part of
+# another product.
+
+# Native structures for text and bytes
+module native
+
+import kernel
+
+# Native strings are simple C char *
+extern class NativeString `{ char* `}
+       # Creates a new NativeString with a capacity of `length`
+       new(length: Int) is intern
+
+       # Returns a char* starting at `index`.
+       #
+       # WARNING: Unsafe for extern code, use only for temporary
+       # pointer manipulation purposes (e.g. write to file or such)
+       fun fast_cstring(index: Int): NativeString is intern
+
+       # Get char at `index`.
+       fun [](index: Int): Char is intern
+
+       # Set char `item` at index.
+       fun []=(index: Int, item: Char) is intern
+
+       # Copy `self` to `dest`.
+       fun copy_to(dest: NativeString, length: Int, from: Int, to: Int) is intern
+
+       # Position of the first nul character.
+       fun cstring_length: Int
+       do
+               var l = 0
+               while self[l] != '\0' do l += 1
+               return l
+       end
+
+       # Parse `self` as an Int.
+       fun atoi: Int is intern
+
+       # Parse `self` as a Float.
+       fun atof: Float is extern "atof"
+end