diff options
author | Maciej Piechotka <uzytkownik2@gmail.com> | 2013-08-02 01:22:20 +0200 |
---|---|---|
committer | Maciej Piechotka <uzytkownik2@gmail.com> | 2013-08-02 01:22:20 +0200 |
commit | a3fac87b3045efede62be7a4423c63227aaabcba (patch) | |
tree | 26e5b401b77249694e2cc8ee5f3680fafbb92aa0 | |
parent | f20cdb80cabab7af08c5620d371fcdd9cbc59de2 (diff) | |
download | libgee-a3fac87b3045efede62be7a4423c63227aaabcba.tar.gz |
Fix problem with wrapping of ArrayList
-rw-r--r-- | gee/arraylist.vala | 119 |
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; + } } |