Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: src/com/github/rjeschke/neetutils/dispose/ReferenceList.java

Issue 6606493159784448: New JNI bindings (Closed)
Patch Set: Reuploaded full diff Created March 28, 2014, 3:56 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/com/github/rjeschke/neetutils/dispose/ReferenceList.java
diff --git a/src/com/github/rjeschke/neetutils/dispose/ReferenceList.java b/src/com/github/rjeschke/neetutils/dispose/ReferenceList.java
new file mode 100644
index 0000000000000000000000000000000000000000..05118f356f33d4fe5f2fe9e6bec4a632f5f5d822
--- /dev/null
+++ b/src/com/github/rjeschke/neetutils/dispose/ReferenceList.java
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2012 René Jeschke <rene_jeschke@yahoo.de>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.github.rjeschke.neetutils.dispose;
+
+/**
+ * Specialized linked list to hold weak references or similar stuff. Adding and
+ * removing is guaranteed O(1).
+ *
+ * @author René Jeschke <rene_jeschke@yhoo.de>
+ */
+public class ReferenceList<T>
+{
+ private Node<T> root;
+ private int size;
+
+ /**
+ * Constructor.
+ */
+ public ReferenceList()
+ {
+ // empty
+ }
+
+ /**
+ * Gets the number of items currently in this list.
+ *
+ * @return The size.
+ */
+ public int size()
+ {
+ return this.size;
+ }
+
+ /**
+ * Checks if this list is empty.
+ *
+ * @return <code>true</code> is this list is empty
+ */
+ public boolean isEmpty()
+ {
+ return this.size == 0;
+ }
+
+ /**
+ * Adds a value to this list (at head).
+ *
+ * @param value
+ * Value to add
+ * @return Node reference needed for remove
+ */
+ public Node<T> add(final T value)
+ {
+ final Node<T> node = new Node<T>(value);
+ this.size++;
+ if (this.root != null)
+ {
+ node.next = this.root;
+ this.root.previous = node;
+ }
+ this.root = node;
+
+ return node;
+ }
+
+ /**
+ * Removes the last added Node.
+ *
+ * @return The last added Node or <code>null</code> if this list is empty.
+ */
+ public Node<T> removeLast()
+ {
+ if (this.root == null)
+ {
+ return null;
+ }
+
+ this.size--;
+ final Node<T> node = this.root;
+ if (node.next != null)
+ {
+ node.next.previous = null;
+ }
+ this.root = node.next;
+
+ node.next = node.previous = null;
+ node.inside = false;
+ return node;
+ }
+
+ /**
+ * Removes the given Node from this list. Multiple removes are prevented.
+ *
+ * @param node
+ * The Node to remove
+ */
+ public void remove(final Node<T> node)
+ {
+ if (!node.inside)
+ {
+ return;
+ }
+
+ this.size--;
+ if (node.previous == null)
+ {
+ this.root = node.next;
+ }
+ else
+ {
+ node.previous.next = node.next;
+ if (node.next != null)
+ {
+ node.next.previous = node.previous;
+ }
+ }
+
+ node.next = node.previous = null;
+ node.inside = false;
+ }
+
+ /**
+ *
+ *
+ * @author René Jeschke <rene_jeschke@yhoo.de>
+ */
+ public static class Node<T>
+ {
+ final T value;
+ boolean inside = true;
+ Node<T> previous;
+ Node<T> next;
+
+ public Node(final T value)
+ {
+ this.value = value;
+ }
+
+ public T value()
+ {
+ return this.value;
+ }
+
+ @Override
+ public String toString()
+ {
+ return "Node: " + this.value;
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld