diff options
Diffstat (limited to 'gee/abstractcollection.vala')
-rw-r--r-- | gee/abstractcollection.vala | 231 |
1 files changed, 17 insertions, 214 deletions
diff --git a/gee/abstractcollection.vala b/gee/abstractcollection.vala index 9ba4a25..f7aa9b2 100644 --- a/gee/abstractcollection.vala +++ b/gee/abstractcollection.vala @@ -30,8 +30,7 @@ * @see AbstractSet * @see AbstractMultiSet */ -public abstract class Gee.AbstractCollection<G> : Object, Iterable<G>, Collection<G> { - +public abstract class Gee.AbstractCollection<G> : Object, Traversable<G>, Iterable<G>, Collection<G> { /** * {@inheritDoc} */ @@ -40,9 +39,7 @@ public abstract class Gee.AbstractCollection<G> : Object, Iterable<G>, Collectio /** * {@inheritDoc} */ - public virtual bool is_empty { - get { return size == 0; } - } + public abstract bool read_only { get; } /** * {@inheritDoc} @@ -67,218 +64,12 @@ public abstract class Gee.AbstractCollection<G> : Object, Iterable<G>, Collectio /** * {@inheritDoc} */ - public virtual G[] to_array () { - var t = typeof (G); - if (t == typeof (bool)) { - return (G[]) to_bool_array((Collection<bool>) this); - } else if (t == typeof (char)) { - return (G[]) to_char_array((Collection<char>) this); - } else if (t == typeof (uchar)) { - return (G[]) to_uchar_array((Collection<uchar>) this); - } else if (t == typeof (int)) { - return (G[]) to_int_array((Collection<int>) this); - } else if (t == typeof (uint)) { - return (G[]) to_uint_array((Collection<uint>) this); - } else if (t == typeof (int64)) { - return (G[]) to_int64_array((Collection<int64>) this); - } else if (t == typeof (uint64)) { - return (G[]) to_uint64_array((Collection<uint64>) this); - } else if (t == typeof (long)) { - return (G[]) to_long_array((Collection<long>) this); - } else if (t == typeof (ulong)) { - return (G[]) to_ulong_array((Collection<ulong>) this); - } else if (t == typeof (float)) { - return (G[]) to_float_array((Collection<float>) this); - } else if (t == typeof (double)) { - return (G[]) to_double_array((Collection<double>) this); - } else { - G[] array = new G[size]; - int index = 0; - foreach (G element in this) { - array[index++] = element; - } - return array; - } - } - - private static bool[] to_bool_array(Collection<bool> coll) { - bool[] array = new bool[coll.size]; - int index = 0; - foreach (bool element in coll) { - array[index++] = element; - } - return array; - } - - private static char[] to_char_array(Collection<char> coll) { - char[] array = new char[coll.size]; - int index = 0; - foreach (char element in coll) { - array[index++] = element; - } - return array; - } - - private static uchar[] to_uchar_array(Collection<uchar> coll) { - uchar[] array = new uchar[coll.size]; - int index = 0; - foreach (uchar element in coll) { - array[index++] = element; - } - return array; - } - - private static int[] to_int_array(Collection<int> coll) { - int[] array = new int[coll.size]; - int index = 0; - foreach (int element in coll) { - array[index++] = element; - } - return array; - } - - private static uint[] to_uint_array(Collection<uint> coll) { - uint[] array = new uint[coll.size]; - int index = 0; - foreach (uint element in coll) { - array[index++] = element; - } - return array; - } - - private static int64[] to_int64_array(Collection<int64?> coll) { - int64[] array = new int64[coll.size]; - int index = 0; - foreach (int64 element in coll) { - array[index++] = element; - } - return array; - } - - private static uint64[] to_uint64_array(Collection<uint64?> coll) { - uint64[] array = new uint64[coll.size]; - int index = 0; - foreach (uint64 element in coll) { - array[index++] = element; - } - return array; - } - - private static long[] to_long_array(Collection<long> coll) { - long[] array = new long[coll.size]; - int index = 0; - foreach (long element in coll) { - array[index++] = element; - } - return array; - } - - private static ulong[] to_ulong_array(Collection<ulong> coll) { - ulong[] array = new ulong[coll.size]; - int index = 0; - foreach (ulong element in coll) { - array[index++] = element; - } - return array; - } - -#if VALA_0_16 - private static float?[] to_float_array(Collection<float?> coll) { - float?[] array = new float?[coll.size]; -#else - private static float[] to_float_array(Collection<float?> coll) { - float[] array = new float[coll.size]; -#endif - int index = 0; - foreach (float element in coll) { - array[index++] = element; - } - return array; - } - -#if VALA_0_16 - private static double?[] to_double_array(Collection<double?> coll) { - double?[] array = new double?[coll.size]; -#else - private static double[] to_double_array(Collection<double?> coll) { - double[] array = new double[coll.size]; -#endif - int index = 0; - foreach (double element in coll) { - array[index++] = element; - } - return array; - } - - /** - * {@inheritDoc} - */ - public virtual bool add_all (Collection<G> collection) { - if (collection.is_empty) { - return false; - } - - bool changed = false; - foreach (G item in collection) { - changed = changed | add (item); - } - return changed; - } - - /** - * {@inheritDoc} - */ - public virtual bool contains_all (Collection<G> collection) { - if (collection.size > size) { - return false; - } - - foreach (G item in collection) { - if (!contains (item)) { - return false; - } - } - return true; - } - - /** - * {@inheritDoc} - */ - public virtual bool remove_all (Collection<G> collection) { - bool changed = false; - foreach (G item in collection) { - changed = changed | remove (item); - } - return changed; - } + public abstract Iterator<G> iterator (); - /** - * {@inheritDoc} - */ - public virtual bool retain_all (Collection<G> collection) { - bool changed = false; - G[] items = to_array (); - int size_of_items = size; - for (int index = 0; index < size_of_items; index++) { - if (!collection.contains (items[index])) { - changed = changed | remove (items[index]); - } - } - return changed; + public virtual bool foreach (ForallFunc<G> f) { + return iterator ().foreach (f); } - /** - * {@inheritDoc} - */ - public Type element_type { - get { return typeof (G); } - } - - /** - * {@inheritDoc} - */ - public abstract Iterator<G> iterator (); - private weak Collection<G> _read_only_view; /** @@ -295,4 +86,16 @@ public abstract class Gee.AbstractCollection<G> : Object, Iterable<G>, Collectio return instance; } } + + // Future-proofing + internal virtual void reserved0() {} + internal virtual void reserved1() {} + internal virtual void reserved2() {} + internal virtual void reserved3() {} + internal virtual void reserved4() {} + internal virtual void reserved5() {} + internal virtual void reserved6() {} + internal virtual void reserved7() {} + internal virtual void reserved8() {} + internal virtual void reserved9() {} } |