[jbosscache-commits] JBoss Cache SVN: r6328 - in core/branches/2.2.X/src/main/java/org/jboss/cache: optimistic and 1 other directory.
jbosscache-commits at lists.jboss.org
jbosscache-commits at lists.jboss.org
Fri Jul 18 08:35:11 EDT 2008
Author: manik.surtani at jboss.com
Date: 2008-07-18 08:35:11 -0400 (Fri, 18 Jul 2008)
New Revision: 6328
Modified:
core/branches/2.2.X/src/main/java/org/jboss/cache/AbstractNode.java
core/branches/2.2.X/src/main/java/org/jboss/cache/UnversionedNode.java
core/branches/2.2.X/src/main/java/org/jboss/cache/optimistic/WorkspaceNodeImpl.java
Log:
Maintaining our own bit encoding is more efficient than an EnumSet
Modified: core/branches/2.2.X/src/main/java/org/jboss/cache/AbstractNode.java
===================================================================
--- core/branches/2.2.X/src/main/java/org/jboss/cache/AbstractNode.java 2008-07-18 10:27:10 UTC (rev 6327)
+++ core/branches/2.2.X/src/main/java/org/jboss/cache/AbstractNode.java 2008-07-18 12:35:11 UTC (rev 6328)
@@ -6,7 +6,6 @@
import static org.jboss.cache.AbstractNode.NodeFlags.DELETED;
import static org.jboss.cache.AbstractNode.NodeFlags.RESIDENT;
-import java.util.EnumSet;
import java.util.Map;
/**
@@ -21,63 +20,117 @@
/**
* Flags placed on the node. Replaces older 'boolean' flags.
*/
- protected final EnumSet<NodeFlags> flags = EnumSet.noneOf(NodeFlags.class);
+ // NOTE: this is a lot more efficient than an EnumSet, expecially when initialising and copying.
+ protected short flags = 0;
/**
* These flags were originally stored as booleans on the UnversionedNode class. They have been replaced with an enum
* and an EnumSet, which is much more space-efficient for very little cost in lookups.
*/
- public enum NodeFlags
+ public static enum NodeFlags
{
/**
* All children are loaded from the cache loader if this flag is present.
*/
- CHILDREN_LOADED,
+ CHILDREN_LOADED(0x1),
/**
* Data is loaded from the cache loader if this flag is present.
*/
- DATA_LOADED,
+ DATA_LOADED(0x2),
/**
* Node is write-locked when children are added or removed if this flag is enabled.
*/
- LOCK_FOR_CHILD_INSERT_REMOVE,
+ LOCK_FOR_CHILD_INSERT_REMOVE(0x4),
/**
* Node is valid if this flag is present.
*/
- VALID,
+ VALID(0x8),
/**
* Node has been deleted.
*/
- DELETED,
+ DELETED(0x10),
/**
* NOde is resident and excluded from evictions
*/
- RESIDENT,
+ RESIDENT(0x20),
/**
* Specific to Optimistic Locking Workspace nodes - set if a node has been modified in a workspace.
*/
- MODIFIED_IN_WORKSPACE,
+ MODIFIED_IN_WORKSPACE(0x40),
/**
* Specific to Optimistic Locking Workspace nodes - set if a node has been created in a workspace.
*/
- CREATED_IN_WORKSPACE,
+ CREATED_IN_WORKSPACE(0x80),
/**
* Specific to Optimistic Locking Workspace nodes - set if a node has added or removed children in a workspace.
*/
- CHILDREN_MODIFIED_IN_WORKSPACE,
+ CHILDREN_MODIFIED_IN_WORKSPACE(0x100),
/**
* Specific to Optimistic Locking Workspace nodes - set if an implicit version is associated with this node.
*/
- VERSIONING_IMPLICIT,
+ VERSIONING_IMPLICIT(0x200),
/**
* Specific to Optimistic Locking Workspace nodes - set if a node has been resurrected in a workspace.
*/
- RESURRECTED_IN_WORKSPACE
+ RESURRECTED_IN_WORKSPACE(0x400);
+
+ protected final short mask;
+
+ NodeFlags(int mask)
+ {
+ this.mask = (short) mask;
+ }
}
+ /**
+ * Tests whether a flag is set.
+ *
+ * @param flag flag to test
+ * @return true if set, false otherwise.
+ */
+ protected final boolean isFlagSet(NodeFlags flag)
+ {
+ return (flags & flag.mask) != 0;
+ }
+
+ /**
+ * Utility method for setting or unsetting a flag. If status is true, the NodeFlag specified is added to the {@link #flags}
+ * encoded short. If status is false, the NodeFlag is removed from the encoded short.
+ *
+ * @param flag flag to set or unset
+ * @param value true to set the flag, false to unset the flag.
+ */
+ protected final void setFlag(NodeFlags flag, boolean value)
+ {
+ if (value)
+ setFlag(flag);
+ else
+ unsetFlag(flag);
+ }
+
+ /**
+ * Unility method that sets the value of the given flag to true.
+ *
+ * @param flag flag to set
+ */
+ protected final void setFlag(NodeFlags flag)
+ {
+ flags |= flag.mask;
+ }
+
+ /**
+ * Utility method that sets the value of the flag to false.
+ *
+ * @param flag flag to unset
+ */
+ protected final void unsetFlag(NodeFlags flag)
+ {
+ flags ^= flag.mask;
+ }
+
public boolean isDeleted()
{
- return flags.contains(DELETED);
+ return isFlagSet(DELETED);
}
public void markAsDeleted(boolean marker)
@@ -109,7 +162,7 @@
public boolean isResident()
{
- return flags.contains(RESIDENT);
+ return isFlagSet(RESIDENT);
}
@Override
@@ -128,19 +181,4 @@
{
return fqn.hashCode();
}
-
- /**
- * Utility method for setting or unsetting a flag. If status is true, the NodeFlag specified is added to the {@link #flags}
- * EnumSet. If status is false, the NodeFlag is removed from the EnumSet.
- *
- * @param flag flag to set or unset
- * @param status true to set the flag, false to unset the flag.
- */
- protected void setFlag(NodeFlags flag, boolean status)
- {
- if (status)
- flags.add(flag);
- else
- flags.remove(flag);
- }
}
Modified: core/branches/2.2.X/src/main/java/org/jboss/cache/UnversionedNode.java
===================================================================
--- core/branches/2.2.X/src/main/java/org/jboss/cache/UnversionedNode.java 2008-07-18 10:27:10 UTC (rev 6327)
+++ core/branches/2.2.X/src/main/java/org/jboss/cache/UnversionedNode.java 2008-07-18 12:35:11 UTC (rev 6328)
@@ -101,8 +101,8 @@
*/
protected void initFlags()
{
- flags.add(DATA_LOADED);
- flags.add(VALID);
+ setFlag(DATA_LOADED);
+ setFlag(VALID);
}
public NodeSPI getDelegate()
@@ -176,7 +176,7 @@
public boolean isChildrenLoaded()
{
- return flags.contains(CHILDREN_LOADED);
+ return isFlagSet(CHILDREN_LOADED);
}
public void setChildrenLoaded(boolean childrenLoaded)
@@ -685,7 +685,7 @@
*/
public boolean isDataLoaded()
{
- return flags.contains(DATA_LOADED);
+ return isFlagSet(DATA_LOADED);
}
/**
@@ -698,7 +698,7 @@
public boolean isValid()
{
- return flags.contains(VALID);
+ return isFlagSet(VALID);
}
public void setValid(boolean valid, boolean recursive)
@@ -717,7 +717,7 @@
public boolean isLockForChildInsertRemove()
{
- return flags.contains(LOCK_FOR_CHILD_INSERT_REMOVE);
+ return isFlagSet(LOCK_FOR_CHILD_INSERT_REMOVE);
}
public void setLockForChildInsertRemove(boolean lockForChildInsertRemove)
Modified: core/branches/2.2.X/src/main/java/org/jboss/cache/optimistic/WorkspaceNodeImpl.java
===================================================================
--- core/branches/2.2.X/src/main/java/org/jboss/cache/optimistic/WorkspaceNodeImpl.java 2008-07-18 10:27:10 UTC (rev 6327)
+++ core/branches/2.2.X/src/main/java/org/jboss/cache/optimistic/WorkspaceNodeImpl.java 2008-07-18 12:35:11 UTC (rev 6328)
@@ -72,7 +72,7 @@
protected void initFlags()
{
- flags.add(VERSIONING_IMPLICIT);
+ setFlag(VERSIONING_IMPLICIT);
}
protected Set<Fqn> getChildrenAddedSet()
@@ -89,7 +89,7 @@
public boolean isChildrenModified()
{
- return flags.contains(CHILDREN_MODIFIED_IN_WORKSPACE);
+ return isFlagSet(CHILDREN_MODIFIED_IN_WORKSPACE);
}
public boolean isChildrenLoaded()
@@ -99,7 +99,7 @@
public boolean isResurrected()
{
- return flags.contains(RESURRECTED_IN_WORKSPACE);
+ return isFlagSet(RESURRECTED_IN_WORKSPACE);
}
public void markAsResurrected(boolean resurrected)
@@ -123,7 +123,7 @@
*/
public boolean isModified()
{
- return flags.contains(MODIFIED_IN_WORKSPACE);
+ return isFlagSet(MODIFIED_IN_WORKSPACE);
}
/**
@@ -144,7 +144,7 @@
public void putAll(Map<K, V> data)
{
realPut(data, false);
- setFlag(MODIFIED_IN_WORKSPACE, true);
+ setFlag(MODIFIED_IN_WORKSPACE);
}
public void replaceAll(Map<K, V> data)
@@ -155,7 +155,7 @@
public V put(K key, V value)
{
- setFlag(MODIFIED_IN_WORKSPACE, true);
+ setFlag(MODIFIED_IN_WORKSPACE);
if (optimisticDataMap == null) optimisticDataMap = new HashMap<K, V>();
return optimisticDataMap.put(key, value);
@@ -163,7 +163,7 @@
public V remove(K key)
{
- setFlag(MODIFIED_IN_WORKSPACE, true);
+ setFlag(MODIFIED_IN_WORKSPACE);
if (optimisticDataMap == null) return null;
return optimisticDataMap.remove(key);
@@ -211,7 +211,7 @@
private void realPut(Map<K, V> data, boolean eraseData, boolean forceDirtyFlag)
{
- if (forceDirtyFlag) setFlag(MODIFIED_IN_WORKSPACE, true);
+ if (forceDirtyFlag) setFlag(MODIFIED_IN_WORKSPACE);
if (eraseData && optimisticDataMap != null)
{
optimisticDataMap.clear();
@@ -240,13 +240,13 @@
NodeSPI<K, V> child = (NodeSPI<K, V>) factory.createNodeOfType(parent, child_name, parent, null);
getChildrenAddedSet().add(child.getFqn());
if (childrenRemoved != null) childrenRemoved.remove(child.getFqn());
- setFlag(CHILDREN_MODIFIED_IN_WORKSPACE, true);
+ setFlag(CHILDREN_MODIFIED_IN_WORKSPACE);
return child;
}
public boolean isVersioningImplicit()
{
- return flags.contains(VERSIONING_IMPLICIT);
+ return isFlagSet(VERSIONING_IMPLICIT);
}
public void setVersioningImplicit(boolean versioningImplicit)
@@ -307,12 +307,12 @@
public boolean isCreated()
{
- return flags.contains(CREATED_IN_WORKSPACE);
+ return isFlagSet(CREATED_IN_WORKSPACE);
}
public void markAsCreated()
{
- setFlag(CREATED_IN_WORKSPACE, true);
+ setFlag(CREATED_IN_WORKSPACE);
// created != modified!!!
}
@@ -387,7 +387,7 @@
if (optimisticDataMap != null)
{
optimisticDataMap.clear();
- setFlag(MODIFIED_IN_WORKSPACE, true);
+ setFlag(MODIFIED_IN_WORKSPACE);
}
}
@@ -475,7 +475,7 @@
{*/
getChildrenRemovedSet().add(childFqn);
if (childrenAdded != null) childrenAdded.remove(childFqn);
- setFlag(CHILDREN_MODIFIED_IN_WORKSPACE, true);
+ setFlag(CHILDREN_MODIFIED_IN_WORKSPACE);
return node.getChildDirect(childName) != null;
/*}
else
More information about the jbosscache-commits
mailing list