Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class LinkedHashSet<G> : Gee.HashSet<G> {
- Gee.List<G> elements = new Gee.LinkedList<G> ();
- public LinkedHashSet (owned Gee.HashDataFunc? hash_func = null, owned Gee.EqualDataFunc? equal_func = null) {
- base ((owned)hash_func, (owned)equal_func);
- }
- public new G get (int index) {
- return elements[index];
- }
- public new void set (int index, G item) {
- var old_item = elements[index];
- if (equal_func (old_item, item)) {
- return;
- }
- elements[index] = item;
- base.remove (old_item);
- base.add (item);
- }
- public override bool add (G item) {
- return base.add (item) && elements.add (item);
- }
- public int index_of (G item) {
- return item in this ? elements.index_of (item) : -1;
- }
- public void insert (int index, G item) {
- if (item in this) {
- return;
- }
- elements.insert (index, item);
- base.add (item);
- }
- public override bool remove (G item) {
- return base.remove (item) && elements.remove (item);
- }
- public G remove_at (int index) {
- var item = elements.remove_at (index);
- base.remove (item);
- return item;
- }
- public Gee.List<G>? slice (int start, int stop) {
- return elements.slice (start, stop);
- }
- public void sort (owned CompareDataFunc? compare_func = null) {
- elements.sort ((owned)compare_func);
- }
- public override Gee.Iterator<G> iterator () {
- return elements.iterator ();
- }
- }
- void main (string[] args) {
- var l = new LinkedHashSet<Object> ();
- l.add(new Object ());
- var o = l[0]; // this results in g_object_unref: assertion `G_IS_OBJECT (object)' failed
- }
Add Comment
Please, Sign In to add comment