benchmarks/string: Updated bench scripts for strings
[nit.git] / benchmarks / strings / array_to_s_vars / array_to_s_flatstr.nit
index 0240d5b..7028e3f 100644 (file)
 # To be used as a Mixin at compile-time for benchmarking purposes.
 module array_to_s_flatstr
 
+intrude import standard::string
+
+redef class FlatString
+       redef fun +(o) do
+               var mlen = length
+               var slen = o.length
+               var nns = new NativeString(mlen + slen)
+               items.copy_to(nns, mlen, index_from, 0)
+               if o isa FlatString then
+                       o.items.copy_to(nns, slen, o.index_from, mlen)
+               else
+                       var pos = mlen
+                       for i in o.chars do
+                               nns[pos] = i
+                               pos += 1
+                       end
+               end
+               return nns.to_s_with_length(mlen)
+       end
+end
+
 redef class Array[E]
 
        redef fun to_s do