annotate src/treecms/memory/OnMemoryTree.java @ 15:22cd920986c5

commit
author misaka
date Tue, 17 May 2011 21:25:17 +0900
parents fbbb7e414346
children 168deb591f21
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
1 package treecms.memory;
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
2
9
shoshi
parents: 8
diff changeset
3 import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
4 import treecms.api.Tree;
11
shoshi
parents: 9
diff changeset
5 import treecms.api.TreeNode;
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
6
7
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
7 /**
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
8 * オンメモリのTree実装です。
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
9 * 木構造のルートとなるNodeをメンバーとして持ち、操作はすべて転送します。
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
10 * @author shoshi
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
11 */
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
12 final class OnMemoryTree implements Tree
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
13 {
9
shoshi
parents: 8
diff changeset
14 private static final AtomicReferenceFieldUpdater<OnMemoryTree,OnMemoryNode> m_refUpdater = AtomicReferenceFieldUpdater.newUpdater(OnMemoryTree.class,OnMemoryNode.class,"m_root");
shoshi
parents: 8
diff changeset
15 private volatile OnMemoryNode m_root;
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
16
7
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
17 /**
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
18 * コンストラクタです。
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
19 * @param _newRoot 木構造のルートノードです。
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
20 */
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
21 public OnMemoryTree(OnMemoryNode _newRoot)
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
22 {
9
shoshi
parents: 8
diff changeset
23 m_root = _newRoot;
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
24 }
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
25
7
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
26 /**
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
27 * この木構造のルートNodeを取得します.
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
28 * @return ルートNode
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
29 */
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
30 @Override
11
shoshi
parents: 9
diff changeset
31 public TreeNode getRoot()
7
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
32 {
11
shoshi
parents: 9
diff changeset
33 return new OnMemoryTreeNode(m_root,null);
8
f96193babac0 changed byte[] to ByteBuffer
shoshi
parents: 7
diff changeset
34 }
f96193babac0 changed byte[] to ByteBuffer
shoshi
parents: 7
diff changeset
35
f96193babac0 changed byte[] to ByteBuffer
shoshi
parents: 7
diff changeset
36 /**
7
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
37 * ルートNodeを比較して置き換えます.
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
38 * @param _except 比較する対象
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
39 * @param _newRoot 一致した場合置き換える対象
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
40 */
9
shoshi
parents: 8
diff changeset
41 public boolean compareAndSwapRootNode(OnMemoryNode _expect,OnMemoryNode _newRoot,boolean _force)
7
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
42 {
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
43 if(_force){
9
shoshi
parents: 8
diff changeset
44 m_root = _newRoot;
7
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
45 }
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
46
9
shoshi
parents: 8
diff changeset
47 m_refUpdater.compareAndSet(this,_expect,_newRoot);
7
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
48 return true;
fc19e38b669b added concurrent access client for cassandr
shoshi
parents: 6
diff changeset
49 }
8
f96193babac0 changed byte[] to ByteBuffer
shoshi
parents: 7
diff changeset
50
2
4a5ee88f02cf added OnMemoryForest
shoshi
parents:
diff changeset
51 }