From 1f718e4f1455b62a61b79fd701975e6c4b48522b Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrg=20Billeter?= Date: Sat, 19 Dec 2009 10:35:40 +0100 Subject: [PATCH] glib-2.0: Add string.splice method --- vapi/glib-2.0.vapi | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/vapi/glib-2.0.vapi b/vapi/glib-2.0.vapi index ed4d9e990..3adad3ff0 100644 --- a/vapi/glib-2.0.vapi +++ b/vapi/glib-2.0.vapi @@ -984,6 +984,42 @@ public class string { return start_string.ndup (((char*) start_string.offset (end - start)) - ((char*) start_string)); } + public string splice (long start, long end, string? str = null) { + long string_length = this.len (); + if (start < 0) { + start = string_length + start; + } + if (end < 0) { + end = string_length + end; + } + GLib.return_val_if_fail (start >= 0 && start <= string_length, null); + GLib.return_val_if_fail (end >= 0 && end <= string_length, null); + GLib.return_val_if_fail (start <= end, null); + + unowned string start_string = this.offset (start); + unowned string end_string = start_string.offset (end - start); + size_t str_size; + if (str == null) { + str_size = 0; + } else { + str_size = str.size (); + } + + string* result = GLib.malloc0 (this.size () - ((char*) end_string - (char*) start_string) + str_size + 1); + + char* dest = result; + + GLib.Memory.copy (dest, this, (char*) start_string - (char*) this); + dest += (char*) start_string - (char*) this; + + GLib.Memory.copy (dest, str, str_size); + dest += str_size; + + GLib.Memory.copy (dest, end_string, end_string.size ()); + + return (owned) result; + } + public bool contains (string needle) { return this.str (needle) != null; } -- 2.47.3