微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

com.google.common.collect.MapMakerInternalMap.ReferenceEntry的实例源码

项目:codebuff    文件Interners.java   
@Override
public E intern(E sample) {
  while (true) {
    // trying to read the canonical...
    ReferenceEntry<E,Dummy> entry = map.getEntry(sample);
    if (entry != null) {
      E canonical = entry.getKey();
      if (canonical != null) { // only matters if weak/soft keys are used
        return canonical;
      }
    }

    // didn't see it,trying to put it instead...
    Dummy sneaky = map.putIfAbsent(sample,Dummy.VALUE);
    if (sneaky == null) {
      return sample;
    } else {
      /* Someone beat us to it! Trying again...
       *
       * Technically this loop not guaranteed to terminate,so theoretically (extremely
       * unlikely) this thread might starve,but even then,there is always going to be another
       * thread doing progress here.
       */}
  }
}
项目:codebuff    文件Interners.java   
@Override
public E intern(E sample) {
  while (true) {
    // trying to read the canonical...
    ReferenceEntry<E,there is always going to be another
       * thread doing progress here.
       */
    }
  }
}
项目:bts    文件Interners.java   
@Override public E intern(E sample) {
  while (true) {
    // trying to read the canonical...
    ReferenceEntry<E,there is always going to be another
       * thread doing progress here.
       */
    }
  }
}
项目:j2objc    文件Interners.java   
@Override public E intern(E sample) {
  while (true) {
    // trying to read the canonical...
    ReferenceEntry<E,there is always going to be another
       * thread doing progress here.
       */
    }
  }
}
项目:guava-libraries    文件Interners.java   
@Override public E intern(E sample) {
  while (true) {
    // trying to read the canonical...
    ReferenceEntry<E,there is always going to be another
       * thread doing progress here.
       */
    }
  }
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testRemovalListener_collected() {
  QueuingRemovalListener<Object,Object> listener =
      new QueuingRemovalListener<Object,Object>();
  MapMakerInternalMap<Object,Object> map = makeMap(createMapMaker()
      .concurrencyLevel(1)
      .softValues()
      .removalListener(listener));
  Segment<Object,Object> segment = map.segments[0];
  assertTrue(listener.isEmpty());

  Object one = new Object();
  Object two = new Object();
  Object three = new Object();

  map.put(one,two);
  map.put(two,three);
  assertTrue(listener.isEmpty());

  int hash = map.hash(one);
  ReferenceEntry<Object,Object> entry = segment.getEntry(one,hash);
  map.reclaimValue(entry.getValueReference());
  assertNotified(listener,one,two,RemovalCause.COLLECTED);

  assertTrue(listener.isEmpty());
}
项目:VectorAttackScanner    文件Interners.java   
@Override public E intern(E sample) {
  while (true) {
    // trying to read the canonical...
    ReferenceEntry<E,there is always going to be another
       * thread doing progress here.
       */
    }
  }
}
项目:My-Wallet-Android    文件Interners.java   
@Override public E intern(E sample) {
  while (true) {
    // trying to read the canonical...
    ReferenceEntry<E,there is always going to be another
       * thread doing progress here.
       */
    }
  }
}
项目:cnGuava    文件Interners.java   
@Override public E intern(E sample) {
  while (true) {
    // trying to read the canonical...
    ReferenceEntry<E,there is always going to be another
       * thread doing progress here.
       */
    }
  }
}
项目:org.openntf.domino    文件Interners.java   
@Override public E intern(E sample) {
  while (true) {
    // trying to read the canonical...
    ReferenceEntry<E,there is always going to be another
       * thread doing progress here.
       */
    }
  }
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testNewEntry() {
  for (MapMaker maker : allEntryTypeMakers()) {
    MapMakerInternalMap<Object,Object> map = makeMap(maker);

    Object keyOne = new Object();
    Object valueOne = new Object();
    int hashOne = map.hash(keyOne);
    ReferenceEntry<Object,Object> entryOne = map.newEntry(keyOne,hashOne,null);
    ValueReference<Object,Object> valueRefOne = map.newValueReference(entryOne,valueOne);
    assertSame(valueOne,valueRefOne.get());
    entryOne.setValueReference(valueRefOne);

    assertSame(keyOne,entryOne.getKey());
    assertEquals(hashOne,entryOne.getHash());
    assertNull(entryOne.getNext());
    assertSame(valueRefOne,entryOne.getValueReference());

    Object keyTwo = new Object();
    Object valueTwo = new Object();
    int hashTwo = map.hash(keyTwo);
    ReferenceEntry<Object,Object> entryTwo = map.newEntry(keyTwo,hashTwo,entryOne);
    ValueReference<Object,Object> valueRefTwo = map.newValueReference(entryTwo,valueTwo);
    assertSame(valueTwo,valueRefTwo.get());
    entryTwo.setValueReference(valueRefTwo);

    assertSame(keyTwo,entryTwo.getKey());
    assertEquals(hashTwo,entryTwo.getHash());
    assertSame(entryOne,entryTwo.getNext());
    assertSame(valueRefTwo,entryTwo.getValueReference());
  }
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testcopyEntry() {
  for (MapMaker maker : allEntryTypeMakers()) {
    MapMakerInternalMap<Object,null);
    entryOne.setValueReference(map.newValueReference(entryOne,valueOne));

    Object keyTwo = new Object();
    Object valueTwo = new Object();
    int hashTwo = map.hash(keyTwo);
    ReferenceEntry<Object,entryOne);
    entryTwo.setValueReference(map.newValueReference(entryTwo,valueTwo));
    if (map.evictsBySize()) {
      MapMakerInternalMap.connectevictables(entryOne,entryTwo);
    }
    if (map.expires()) {
      MapMakerInternalMap.connectExpirables(entryOne,entryTwo);
    }
    assertConnected(map,entryOne,entryTwo);

    ReferenceEntry<Object,Object> copyOne = map.copyEntry(entryOne,null);
    assertSame(keyOne,entryOne.getHash());
    assertNull(entryOne.getNext());
    assertSame(valueOne,copyOne.getValueReference().get());
    assertConnected(map,copyOne,Object> copyTwo = map.copyEntry(entryTwo,copyOne);
    assertSame(keyTwo,copyTwo.getKey());
    assertEquals(hashTwo,copyTwo.getHash());
    assertSame(copyOne,copyTwo.getNext());
    assertSame(valueTwo,copyTwo.getValueReference().get());
    assertConnected(map,copyTwo);
  }
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
private static <K,V> void assertConnected(
    MapMakerInternalMap<K,V> map,ReferenceEntry<K,V> one,V> two) {
  if (map.evictsBySize()) {
    assertSame(two,one.getNextevictable());
  }
  if (map.expires()) {
    assertSame(two,one.getNextExpirable());
  }
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testSegmentReplace() {
  MapMakerInternalMap<Object,Object> map =
      makeMap(createMapMaker().concurrencyLevel(1).expireAfteraccess(99999,SECONDS));
  Segment<Object,Object> segment = map.segments[0];
  // Todo(fry): check recency ordering

  Object key = new Object();
  int hash = map.hash(key);
  Object oldValue = new Object();
  Object newValue = new Object();
  atomicreferenceArray<ReferenceEntry<Object,Object>> table = segment.table;
  int index = hash & (table.length() - 1);

  DummyEntry<Object,Object> entry = DummyEntry.create(key,hash,null);
  DummyValueReference<Object,Object> oldValueRef = DummyValueReference.create(oldValue,entry);
  entry.setValueReference(oldValueRef);

  // no entry
  assertNull(segment.replace(key,newValue));
  assertEquals(0,segment.count);

  // same key
  table.set(index,entry);
  segment.count++;
  assertEquals(1,segment.count);
  assertSame(oldValue,segment.get(key,hash));
  assertSame(oldValue,segment.replace(key,newValue));
  assertEquals(1,segment.count);
  assertSame(newValue,hash));

  // cleared
  entry.setValueReference(oldValueRef);
  assertSame(oldValue,hash));
  oldValueRef.clear(null);
  assertNull(segment.replace(key,segment.count);
  assertNull(segment.get(key,hash));
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testSegmentPut() {
  MapMakerInternalMap<Object,Object> segment = map.segments[0];
  // Todo(fry): check recency ordering

  Object key = new Object();
  int hash = map.hash(key);
  Object oldValue = new Object();
  Object newValue = new Object();

  // no entry
  assertEquals(0,segment.count);
  assertNull(segment.put(key,oldValue,false));
  assertEquals(1,segment.count);

  // same key
  assertSame(oldValue,segment.put(key,newValue,hash));

  // cleared
  ReferenceEntry<Object,Object> entry = segment.getEntry(key,hash);
  DummyValueReference<Object,entry);
  entry.setValueReference(oldValueRef);
  assertSame(oldValue,hash));
  oldValueRef.clear(null);
  assertNull(segment.put(key,hash));
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testSegmentPutIfAbsent() {
  MapMakerInternalMap<Object,true));
  assertEquals(1,hash));
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testSegmentRemove() {
  MapMakerInternalMap<Object,Object> map = makeMap(createMapMaker().concurrencyLevel(1));
  Segment<Object,Object> segment = map.segments[0];

  Object key = new Object();
  int hash = map.hash(key);
  Object oldValue = new Object();
  atomicreferenceArray<ReferenceEntry<Object,entry);
  entry.setValueReference(oldValueRef);

  // no entry
  assertEquals(0,segment.count);
  assertNull(segment.remove(key,hash));
  assertEquals(0,segment.remove(key,hash));

  // cleared
  table.set(index,hash));
  oldValueRef.clear(null);
  assertNull(segment.remove(key,hash));
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testExpand() {
  MapMakerInternalMap<Object,Object> map =
      makeMap(createMapMaker().concurrencyLevel(1).initialCapacity(1));
  Segment<Object,Object> segment = map.segments[0];
  assertEquals(1,segment.table.length());

  // manually add elements to avoid expansion
  int originalCount = 1024;
  ReferenceEntry<Object,Object> entry = null;
  for (int i = 0; i < originalCount; i++) {
    Object key = new Object();
    Object value = new Object();
    int hash = map.hash(key);
    // chain all entries together as we only have a single bucket
    entry = map.newEntry(key,entry);
    ValueReference<Object,Object> valueRef = map.newValueReference(entry,value);
    entry.setValueReference(valueRef);
  }
  segment.table.set(0,entry);
  segment.count = originalCount;
  ImmutableMap<Object,Object> originalMap = ImmutableMap.copyOf(map);
  assertEquals(originalCount,originalMap.size());
  assertEquals(originalMap,map);

  for (int i = 1; i <= originalCount * 2; i *= 2) {
    if (i > 1) {
      segment.expand();
    }
    assertEquals(i,segment.table.length());
    assertEquals(originalCount,countLiveEntries(map));
    assertEquals(originalCount,segment.count);
    assertEquals(originalMap,map);
  }
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
private static <K,V> int countLiveEntries(MapMakerInternalMap<K,V> map) {
  int result = 0;
  for (Segment<K,V> segment : map.segments) {
    atomicreferenceArray<ReferenceEntry<K,V>> table = segment.table;
    for (int i = 0; i < table.length(); i++) {
      for (ReferenceEntry<K,V> e = table.get(i); e != null; e = e.getNext()) {
        if (map.isLive(e)) {
          result++;
        }
      }
    }
  }
  return result;
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testClear() {
  MapMakerInternalMap<Object,Object> map = makeMap(createMapMaker()
      .concurrencyLevel(1)
      .initialCapacity(1)
      .maximumSize(SMALL_MAX_SIZE)
      .expireAfterWrite(99999,Object> segment = map.segments[0];
  atomicreferenceArray<ReferenceEntry<Object,Object>> table = segment.table;
  assertEquals(1,table.length());

  Object key = new Object();
  Object value = new Object();
  int hash = map.hash(key);
  DummyEntry<Object,Object> entry = createDummyEntry(key,value,null);
  segment.recordWrite(entry);
  segment.table.set(0,entry);
  segment.readCount.incrementAndGet();
  segment.count = 1;

  assertSame(entry,table.get(0));
  assertSame(entry,segment.evictionQueue.peek());
  assertSame(entry,segment.expirationQueue.peek());

  segment.clear();
  assertNull(table.get(0));
  assertTrue(segment.evictionQueue.isEmpty());
  assertTrue(segment.expirationQueue.isEmpty());
  assertEquals(0,segment.readCount.get());
  assertEquals(0,segment.count);
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testRemoveEntry() {
  MapMakerInternalMap<Object,SECONDS)
      .removalListener(new CountingRemovalListener<Object,Object>()));
  Segment<Object,null);

  // remove absent
  assertFalse(segment.removeEntry(entry,RemovalCause.COLLECTED));

  // remove live
  segment.recordWrite(entry);
  table.set(0,entry);
  segment.count = 1;
  assertTrue(segment.removeEntry(entry,RemovalCause.COLLECTED));
  assertNotificationEnqueued(map,key,value);
  assertTrue(map.removalNotificationQueue.isEmpty());
  assertFalse(segment.evictionQueue.contains(entry));
  assertFalse(segment.expirationQueue.contains(entry));
  assertEquals(0,segment.count);
  assertNull(table.get(0));
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
static <K,V> void checkAndDrainRecencyQueue(MapMakerInternalMap<K,Segment<K,V> segment,List<ReferenceEntry<K,V>> reads) {
  if (map.evictsBySize() || map.expiresAfteraccess()) {
    assertSameEntries(reads,ImmutableList.copyOf(segment.recencyQueue));
  }
  segment.drainRecencyQueue();
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
static <K,V> void checkevictionQueues(MapMakerInternalMap<K,V>> readOrder,V>> writeOrder) {
  if (map.evictsBySize()) {
    assertSameEntries(readOrder,ImmutableList.copyOf(segment.evictionQueue));
  }
  if (map.expiresAfteraccess()) {
    assertSameEntries(readOrder,ImmutableList.copyOf(segment.expirationQueue));
  }
  if (map.expiresAfterWrite()) {
    assertSameEntries(writeOrder,ImmutableList.copyOf(segment.expirationQueue));
  }
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
private static <K,V> void assertSameEntries(List<ReferenceEntry<K,V>> expectedEntries,V>> actualEntries) {
  int size = expectedEntries.size();
  assertEquals(size,actualEntries.size());
  for (int i = 0; i < size; i++) {
    ReferenceEntry<K,V> expectedEntry = expectedEntries.get(0);
    ReferenceEntry<K,V> actualEntry = actualEntries.get(0);
    assertSame(expectedEntry.getKey(),actualEntry.getKey());
    assertSame(expectedEntry.getValueReference().get(),actualEntry.getValueReference().get());
  }
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testevictEntries() {
  int maxSize = 10;
  MapMakerInternalMap<Object,Object> map =
      makeMap(createMapMaker().concurrencyLevel(1).maximumSize(maxSize));
  Segment<Object,Object> segment = map.segments[0];

  // manually add elements to avoid eviction
  int originalCount = 1024;
  ReferenceEntry<Object,Object> entry = null;
  LinkedHashMap<Object,Object> originalMap = Maps.newLinkedHashMap();
  for (int i = 0; i < originalCount; i++) {
    Object key = new Object();
    Object value = new Object();
    atomicreferenceArray<ReferenceEntry<Object,Object>> table = segment.table;
    int hash = map.hash(key);
    int index = hash & (table.length() - 1);
    ReferenceEntry<Object,Object> first = table.get(index);
    entry = map.newEntry(key,first);
    ValueReference<Object,value);
    entry.setValueReference(valueRef);
    segment.recordWrite(entry);
    table.set(index,entry);
    originalMap.put(key,value);
  }
  segment.count = originalCount;
  assertEquals(originalCount,map);

  for (int i = maxSize - 1; i < originalCount; i++) {
    assertTrue(segment.evictEntries());
    Iterator<Object> it = originalMap.keySet().iterator();
    it.next();
    it.remove();
    assertEquals(originalMap,map);
  }
  assertFalse(segment.evictEntries());
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testDrainKeyReferenceQueueOnWrite() {
  for (MapMaker maker : allkeyvalueStrengthMakers()) {
    MapMakerInternalMap<Object,Object> map =
        makeMap(maker.concurrencyLevel(1));
    if (map.usesKeyReferences()) {
      Segment<Object,Object> segment = map.segments[0];

      Object keyOne = new Object();
      int hashOne = map.hash(keyOne);
      Object valueOne = new Object();
      Object keyTwo = new Object();
      Object valueTwo = new Object();

      map.put(keyOne,valueOne);
      ReferenceEntry<Object,Object> entry = segment.getEntry(keyOne,hashOne);

      @SuppressWarnings("unchecked")
      Reference<Object> reference = (Reference) entry;
      reference.enqueue();

      map.put(keyTwo,valueTwo);
      assertFalse(map.containsKey(keyOne));
      assertFalse(map.containsValue(valueOne));
      assertNull(map.get(keyOne));
      assertEquals(1,map.size());
      assertNull(segment.keyReferenceQueue.poll());
    }
  }
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testDrainValueReferenceQueueOnWrite() {
  for (MapMaker maker : allkeyvalueStrengthMakers()) {
    MapMakerInternalMap<Object,Object> map =
        makeMap(maker.concurrencyLevel(1));
    if (map.usesValueReferences()) {
      Segment<Object,hashOne);
      ValueReference<Object,Object> valueReference = entry.getValueReference();

      @SuppressWarnings("unchecked")
      Reference<Object> reference = (Reference) valueReference;
      reference.enqueue();

      map.put(keyTwo,map.size());
      assertNull(segment.valueReferenceQueue.poll());
    }
  }
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testDrainKeyReferenceQueueOnRead() {
  for (MapMaker maker : allkeyvalueStrengthMakers()) {
    MapMakerInternalMap<Object,Object> segment = map.segments[0];

      Object keyOne = new Object();
      int hashOne = map.hash(keyOne);
      Object valueOne = new Object();
      Object keyTwo = new Object();

      map.put(keyOne,hashOne);

      @SuppressWarnings("unchecked")
      Reference<Object> reference = (Reference) entry;
      reference.enqueue();

      for (int i = 0; i < SMALL_MAX_SIZE; i++) {
        map.get(keyTwo);
      }
      assertFalse(map.containsKey(keyOne));
      assertFalse(map.containsValue(valueOne));
      assertNull(map.get(keyOne));
      assertEquals(0,map.size());
      assertNull(segment.keyReferenceQueue.poll());
    }
  }
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testDrainValueReferenceQueueOnRead() {
  for (MapMaker maker : allkeyvalueStrengthMakers()) {
    MapMakerInternalMap<Object,Object> valueReference = entry.getValueReference();

      @SuppressWarnings("unchecked")
      Reference<Object> reference = (Reference) valueReference;
      reference.enqueue();

      for (int i = 0; i < SMALL_MAX_SIZE; i++) {
        map.get(keyTwo);
      }
      assertFalse(map.containsKey(keyOne));
      assertFalse(map.containsValue(valueOne));
      assertNull(map.get(keyOne));
      assertEquals(0,map.size());
      assertNull(segment.valueReferenceQueue.poll());
    }
  }
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
private static <K,V> DummyEntry<K,V> createDummyEntry(
    K key,int hash,V value,V> next) {
  DummyEntry<K,V> entry = DummyEntry.create(key,next);
  DummyValueReference<K,V> valueRef = DummyValueReference.create(value,entry);
  entry.setValueReference(valueRef);
  return entry;
}
项目:guava-libraries    文件ComputingConcurrentHashMapTest.java   
public void testComputePartiallyCollectedKey() throws ExecutionException {
  MapMaker maker = createMapMaker().concurrencyLevel(1);
  CountingFunction computingFunction = new CountingFunction();
  ComputingConcurrentHashMap<Object,Object> map = makeComputingMap(maker,computingFunction);
  Segment<Object,Object>> table = segment.table;
  assertEquals(0,computingFunction.getCount());

  Object key = new Object();
  int hash = map.hash(key);
  Object value = new Object();
  int index = hash & (table.length() - 1);

  DummyEntry<Object,Object> valueRef = DummyValueReference.create(value,entry);
  entry.setValueReference(valueRef);
  table.set(index,entry);
  segment.count++;

  assertSame(value,map.getorCompute(key));
  assertEquals(0,computingFunction.getCount());
  assertEquals(1,segment.count);

  entry.clearKey();
  assertNotSame(value,map.getorCompute(key));
  assertEquals(1,computingFunction.getCount());
  assertEquals(2,segment.count);
}
项目:guava-libraries    文件ComputingConcurrentHashMapTest.java   
public void testComputePartiallyCollectedValue() throws ExecutionException {
  MapMaker maker = createMapMaker().concurrencyLevel(1);
  CountingFunction computingFunction = new CountingFunction();
  ComputingConcurrentHashMap<Object,segment.count);

  valueRef.clear(null);
  assertNotSame(value,segment.count);
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testSegmentGetAndContains() {
  MapMakerInternalMap<Object,Object> segment = map.segments[0];
  // Todo(fry): check recency ordering

  Object key = new Object();
  int hash = map.hash(key);
  Object value = new Object();
  atomicreferenceArray<ReferenceEntry<Object,Object>> table = segment.table;
  int index = hash & (table.length() - 1);

  ReferenceEntry<Object,Object> entry = map.newEntry(key,null);
  ValueReference<Object,value);
  entry.setValueReference(valueRef);

  assertNull(segment.get(key,hash));

  // count == 0
  table.set(index,entry);
  assertNull(segment.get(key,hash));
  assertFalse(segment.containsKey(key,hash));
  assertFalse(segment.containsValue(value));

  // count == 1
  segment.count++;
  assertSame(value,hash));
  assertTrue(segment.containsKey(key,hash));
  assertTrue(segment.containsValue(value));
  // don't see absent values Now that count > 0
  assertNull(segment.get(new Object(),hash));

  // null key
  DummyEntry<Object,Object> nullEntry = DummyEntry.create(null,entry);
  Object nullValue = new Object();
  ValueReference<Object,Object> nullValueRef = map.newValueReference(nullEntry,nullValue);
  nullEntry.setValueReference(nullValueRef);
  table.set(index,nullEntry);
  // skip the null key
  assertSame(value,hash));
  assertTrue(segment.containsValue(value));
  assertFalse(segment.containsValue(nullValue));

  // hash collision
  DummyEntry<Object,Object> dummy = DummyEntry.create(new Object(),entry);
  Object dummyValue = new Object();
  ValueReference<Object,Object> dummyValueRef = map.newValueReference(dummy,dummyValue);
  dummy.setValueReference(dummyValueRef);
  table.set(index,dummy);
  assertSame(value,hash));
  assertTrue(segment.containsValue(value));
  assertTrue(segment.containsValue(dummyValue));

  // key collision
  dummy = DummyEntry.create(key,entry);
  dummyValue = new Object();
  dummyValueRef = map.newValueReference(dummy,dummy);
  // returns the most recent entry
  assertSame(dummyValue,hash));
  assertTrue(segment.containsValue(value));
  assertTrue(segment.containsValue(dummyValue));

  // expired
  dummy.setExpirationTime(0);
  assertNull(segment.get(key,hash));
  assertTrue(segment.containsValue(value));
  assertFalse(segment.containsValue(dummyValue));
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testSegmentReplaceValue() {
  MapMakerInternalMap<Object,entry);
  entry.setValueReference(oldValueRef);

  // no entry
  assertFalse(segment.replace(key,segment.count);

  // same value
  table.set(index,hash));
  assertTrue(segment.replace(key,hash));

  // different value
  assertFalse(segment.replace(key,hash));
  oldValueRef.clear(null);
  assertFalse(segment.replace(key,hash));
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testSegmentRemoveValue() {
  MapMakerInternalMap<Object,Object> segment = map.segments[0];

  Object key = new Object();
  int hash = map.hash(key);
  Object oldValue = new Object();
  Object newValue = new Object();
  atomicreferenceArray<ReferenceEntry<Object,hash));
  assertTrue(segment.remove(key,oldValue));
  assertEquals(0,hash));

  // different value
  table.set(index,hash));
  assertFalse(segment.remove(key,hash));

  // cleared
  assertSame(oldValue,hash));
  oldValueRef.clear(null);
  assertFalse(segment.remove(key,hash));
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testReclaimKey() {
  CountingRemovalListener<Object,Object> listener =
      new CountingRemovalListener<Object,SECONDS)
      .removalListener(listener));
  Segment<Object,table.length());

  // create 3 objects and chain them together
  Object keyOne = new Object();
  Object valueOne = new Object();
  int hashOne = map.hash(keyOne);
  DummyEntry<Object,Object> entryOne = createDummyEntry(keyOne,valueOne,null);
  Object keyTwo = new Object();
  Object valueTwo = new Object();
  int hashTwo = map.hash(keyTwo);
  DummyEntry<Object,Object> entryTwo = createDummyEntry(keyTwo,valueTwo,entryOne);
  Object keyThree = new Object();
  Object valueThree = new Object();
  int hashThree = map.hash(keyThree);
  DummyEntry<Object,Object> entryThree =
      createDummyEntry(keyThree,hashThree,valueThree,entryTwo);

  // absent
  assertEquals(0,listener.getCount());
  assertFalse(segment.reclaimKey(entryOne,hashOne));
  assertEquals(0,listener.getCount());
  table.set(0,entryOne);
  assertFalse(segment.reclaimKey(entryTwo,hashTwo));
  assertEquals(0,entryTwo);
  assertFalse(segment.reclaimKey(entryThree,hashThree));
  assertEquals(0,listener.getCount());

  // present
  table.set(0,entryOne);
  segment.count = 1;
  assertTrue(segment.reclaimKey(entryOne,hashOne));
  assertEquals(1,listener.getCount());
  assertSame(keyOne,listener.getLastevictedKey());
  assertSame(valueOne,listener.getLastevictedValue());
  assertTrue(map.removalNotificationQueue.isEmpty());
  assertFalse(segment.evictionQueue.contains(entryOne));
  assertFalse(segment.expirationQueue.contains(entryOne));
  assertEquals(0,segment.count);
  assertNull(table.get(0));
}
项目:guava-libraries    文件MapMakerInternalMapTest.java   
public void testRemoveFromChain() {
  MapMakerInternalMap<Object,Object> segment = map.segments[0];

  // create 3 objects and chain them together
  Object keyOne = new Object();
  Object valueOne = new Object();
  int hashOne = map.hash(keyOne);
  DummyEntry<Object,entryTwo);

  // alone
  assertNull(segment.removeFromChain(entryOne,entryOne));

  // head
  assertSame(entryOne,segment.removeFromChain(entryTwo,entryTwo));

  // middle
  ReferenceEntry<Object,Object> newFirst = segment.removeFromChain(entryThree,entryTwo);
  assertSame(keyThree,newFirst.getKey());
  assertSame(valueThree,newFirst.getValueReference().get());
  assertEquals(hashThree,newFirst.getHash());
  assertSame(entryOne,newFirst.getNext());

  // tail (remaining entries are copied in reverse order)
  newFirst = segment.removeFromChain(entryThree,entryOne);
  assertSame(keyTwo,newFirst.getKey());
  assertSame(valueTwo,newFirst.getValueReference().get());
  assertEquals(hashTwo,newFirst.getHash());
  newFirst = newFirst.getNext();
  assertSame(keyThree,newFirst.getHash());
  assertNull(newFirst.getNext());
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。