summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej Piechotka <uzytkownik2@gmail.com>2013-08-02 01:22:20 +0200
committerMaciej Piechotka <uzytkownik2@gmail.com>2013-08-02 01:22:20 +0200
commita3fac87b3045efede62be7a4423c63227aaabcba (patch)
tree26e5b401b77249694e2cc8ee5f3680fafbb92aa0
parentf20cdb80cabab7af08c5620d371fcdd9cbc59de2 (diff)
downloadlibgee-a3fac87b3045efede62be7a4423c63227aaabcba.tar.gz
Fix problem with wrapping of ArrayList
-rw-r--r--gee/arraylist.vala119
1 files changed, 118 insertions, 1 deletions
diff --git a/gee/arraylist.vala b/gee/arraylist.vala
index b95ecf7..2c58717 100644
--- a/gee/arraylist.vala
+++ b/gee/arraylist.vala
@@ -95,8 +95,8 @@ public class Gee.ArrayList<G> : AbstractBidirList<G> {
equal_func = Functions.get_equal_func_for (typeof (G));
}
this.equal_func = equal_func;
- _items = items;
_size = items.length;
+ _items = do_wrap<G> ((owned)items);
}
/**
@@ -434,5 +434,122 @@ public class Gee.ArrayList<G> : AbstractBidirList<G> {
return true;
}
}
+
+ private static G[] do_wrap<G> (owned G[] data) {
+ var t = typeof (G);
+ if (t == typeof (bool)) {
+ return wrap_bool<G> ((bool[])data);
+ } else if (t == typeof (char)) {
+ return wrap_char<G> ((char[])data);
+ } else if (t == typeof (uchar)) {
+ return wrap_uchar<G> ((uchar[])data);
+ } else if (t == typeof (int)) {
+ return wrap_int<G> ((int[])data);
+ } else if (t == typeof (uint)) {
+ return wrap_uint<G> ((uint[])data);
+ } else if (t == typeof (int64)) {
+ return wrap_int64<G> ((int64[])data);
+ } else if (t == typeof (uint64)) {
+ return wrap_uint64<G> ((uint64[])data);
+ } else if (t == typeof (long)) {
+ return wrap_long<G> ((long[])data);
+ } else if (t == typeof (ulong)) {
+ return wrap_ulong<G> ((ulong[])data);
+ } else if (t == typeof (float)) {
+ return wrap_float<G> ((float?[])data);
+ } else if (t == typeof (double)) {
+ return wrap_double<G> ((double?[])data);
+ } else {
+ return (owned)data;
+ }
+ }
+
+ private static G[] wrap_bool<G> (bool[] data) {
+ G[] arr = new G[data.length];
+ for (uint i = 0; i < data.length; i++) {
+ arr[i] = data[i];
+ }
+ return arr;
+ }
+
+ private static G[] wrap_char<G> (char[] data) {
+ G[] arr = new G[data.length];
+ for (uint i = 0; i < data.length; i++) {
+ arr[i] = data[i];
+ }
+ return arr;
+ }
+
+ private static G[] wrap_uchar<G> (uchar[] data) {
+ G[] arr = new G[data.length];
+ for (uint i = 0; i < data.length; i++) {
+ arr[i] = data[i];
+ }
+ return arr;
+ }
+
+ private static G[] wrap_int<G> (int[] data) {
+ G[] arr = new G[data.length];
+ for (uint i = 0; i < data.length; i++) {
+ arr[i] = data[i];
+ }
+ return arr;
+ }
+
+ private static G[] wrap_uint<G> (uint[] data) {
+ G[] arr = new G[data.length];
+ for (uint i = 0; i < data.length; i++) {
+ arr[i] = data[i];
+ }
+ return arr;
+ }
+
+ private static G[] wrap_int64<G> (int64[] data) {
+ G[] arr = new G[data.length];
+ for (uint i = 0; i < data.length; i++) {
+ arr[i] = data[i];
+ }
+ return arr;
+ }
+
+ private static G[] wrap_uint64<G> (uint64[] data) {
+ G[] arr = new G[data.length];
+ for (uint i = 0; i < data.length; i++) {
+ arr[i] = data[i];
+ }
+ return arr;
+ }
+
+ private static G[] wrap_long<G> (long[] data) {
+ G[] arr = new G[data.length];
+ for (uint i = 0; i < data.length; i++) {
+ arr[i] = data[i];
+ }
+ return arr;
+ }
+
+ private static G[] wrap_ulong<G> (ulong[] data) {
+ G[] arr = new G[data.length];
+ for (uint i = 0; i < data.length; i++) {
+ arr[i] = data[i];
+ }
+ return arr;
+ }
+
+ private static G[] wrap_float<G> (float?[] data) {
+ G[] arr = new G[data.length];
+ for (uint i = 0; i < data.length; i++) {
+ arr[i] = data[i];
+ }
+ return arr;
+ }
+
+ private static G[] wrap_double<G> (double?[] data) {
+ G[] arr = new G[data.length];
+ for (uint i = 0; i < data.length; i++) {
+ arr[i] = data[i];
+ }
+ return arr;
+ }
}