Index: hashset.vala =================================================================== --- hashset.vala (revision 39) +++ hashset.vala (working copy) @@ -199,6 +199,12 @@ assert (_node != null); return _node.key; } + + public weak G? get_weak_ref () { + assert (_stamp == _set._stamp); + assert (_node != null); + return _node.key; + } } } Index: readonlylist.vala =================================================================== --- readonlylist.vala (revision 39) +++ readonlylist.vala (working copy) @@ -92,6 +92,14 @@ return _list.get (index); } + public weak G? get_weak_ref (int index) { + if (_list == null) { + return null; + } + + return _list.get_weak_ref (index); + } + public void set (int index, G o) { assert_not_reached (); } @@ -108,6 +116,10 @@ public G? get () { return null; } + + public weak G? get_weak_ref () { + return null; + } } } Index: arraylist.vala =================================================================== --- arraylist.vala (revision 39) +++ arraylist.vala (working copy) @@ -74,6 +74,12 @@ return _items[index]; } + public weak G? get_weak_ref (int index) { + assert (index >= 0 && index < _size); + + return _items[index]; + } + public void set (int index, G item) { assert (index >= 0 && index < _size); @@ -187,6 +193,16 @@ return _list.get (_index); } + + public weak G? get_weak_ref () { + assert (_stamp == _list._stamp); + + if (_index < 0 || _index >= _list._size) { + return null; + } + + return _list.get_weak_ref (_index); + } } } Index: list.vala =================================================================== --- list.vala (revision 39) +++ list.vala (working copy) @@ -34,6 +34,15 @@ public abstract G? get (int index); /** + * Returns a weak reference to the item at the specified index in this list. + * + * @param index zero-based index of the item to be returned + * + * @return a weak reference to the item at the specified index in the list + */ + public abstract weak G? get_weak_ref (int index); + + /** * Sets the item at the specified index in this list. * * @param index zero-based index of the item to be set Index: readonlymap.vala =================================================================== --- readonlymap.vala (revision 39) +++ readonlymap.vala (working copy) @@ -72,6 +72,14 @@ return _map.get (key); } + public weak V? get_weak_ref (K key) { + if (_map == null) { + return null; + } + + return _map.get_weak_ref (key); + } + public void set (K key, V value) { assert_not_reached (); } Index: map.vala =================================================================== --- map.vala (revision 39) +++ map.vala (working copy) @@ -63,6 +63,17 @@ public abstract V? get (K key); /** + * Returns a weak reference to the value of the specified key in this map. + * + * @param key the key whose value is to be retrieved + * + * @return a weak reference to the value associated with the key, or null if the key + * couldn't be found + */ + + public abstract weak V? get_weak_ref (K key); + + /** * Inserts a new key and value into this map. * * @param key the key to insert Index: hashmap.vala =================================================================== --- hashmap.vala (revision 39) +++ hashmap.vala (working copy) @@ -100,6 +100,15 @@ } } + public weak V? get_weak_ref (K key) { + Node* node = (*lookup_node (key)); + if (node != null) { + return node->value; + } else { + return null; + } + } + public void set (K key, V value) { Node** node = lookup_node (key); if (*node != null) { @@ -257,6 +266,12 @@ assert (_node != null); return _node.key; } + + public weak K? get_weak_ref () { + assert (_stamp == _map._stamp); + assert (_node != null); + return _node.key; + } } private class ValueCollection : Object, Iterable, Collection { @@ -340,6 +355,12 @@ assert (_node != null); return _node.value; } + + public weak V? get_weak_ref () { + assert (_stamp == _map._stamp); + assert (_node != null); + return _node.value; + } } } Index: iterator.vala =================================================================== --- iterator.vala (revision 39) +++ iterator.vala (working copy) @@ -38,5 +38,13 @@ * @return the current element in the iteration */ public abstract G? get (); + + /** + * Returns a weak reference to the current element in the iteration. + * + * @return a weak reference to the current element in the iteration + */ + + public abstract weak G? get_weak_ref (); } Index: readonlycollection.vala =================================================================== --- readonlycollection.vala (revision 39) +++ readonlycollection.vala (working copy) @@ -80,6 +80,10 @@ public G? get () { return null; } + + public weak G? get_weak_ref () { + return null; + } } } Index: readonlyset.vala =================================================================== --- readonlyset.vala (revision 39) +++ readonlyset.vala (working copy) @@ -80,6 +80,10 @@ public G? get () { return null; } + + public weak G? get_weak_ref () { + return null; + } } }