1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.hadoop.hbase.hbql.impl;
22
23 import org.apache.hadoop.hbase.hbql.util.AtomicReferences;
24
25 import java.util.NavigableMap;
26 import java.util.TreeMap;
27 import java.util.concurrent.atomic.AtomicReference;
28
29 public class CurrentAndVersionValue<T> extends Value {
30
31 private final AtomicReference<NavigableMap<Long, T>> atomicVersionMap = AtomicReferences.newAtomicReference();
32 private boolean currentValueSet = false;
33 private T currentValue = null;
34 private long currentValueTimestamp = -1;
35
36 public CurrentAndVersionValue(final String name) {
37 super(name);
38 }
39
40 public T getCurrentValue() {
41 return this.currentValue;
42 }
43
44 public boolean isValueSet() {
45 return currentValueSet;
46 }
47
48 private AtomicReference<NavigableMap<Long, T>> getAtomicVersionMap() {
49 return this.atomicVersionMap;
50 }
51
52 public void setCurrentValue(final long timestamp, final T val) {
53 if (timestamp >= this.currentValueTimestamp) {
54 this.currentValueSet = true;
55 this.currentValueTimestamp = timestamp;
56 this.currentValue = val;
57 }
58 }
59
60 public NavigableMap<Long, T> getVersionMap() {
61 if (this.getAtomicVersionMap().get() == null) {
62 synchronized (this) {
63 if (this.getAtomicVersionMap().get() == null)
64 this.setVersionMap(new TreeMap<Long, T>());
65 }
66 }
67
68 return this.getAtomicVersionMap().get();
69 }
70
71 public void setVersionMap(final NavigableMap<Long, T> versionMap) {
72 this.getAtomicVersionMap().set(versionMap);
73 }
74 }