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

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

项目:guava-mock    文件Interners.java   
@Override
public E intern(E sample) {
  while (true) {
    // trying to read the canonical...
    InternalEntry<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.
       */
    }
  }
}
项目:guava-mock    文件MapMakerInternalMapTest.java   
public void testClear() {
  MapMakerInternalMap<Object,Object,?,?> map =
      makeMap(createMapMaker().concurrencyLevel(1).initialCapacity(1));
  Segment<Object,?> segment = map.segments[0];
  atomicreferenceArray<? extends InternalEntry<Object,?>> table = segment.table;
  assertEquals(1,table.length());

  Object key = new Object();
  Object value = new Object();
  int hash = map.hash(key);
  InternalEntry<Object,?> entry = segment.newEntryForTesting(key,hash,null);
  segment.setValueForTesting(entry,value);

  segment.setTableEntryForTesting(0,entry);
  segment.readCount.incrementAndGet();
  segment.count = 1;

  assertSame(entry,table.get(0));

  segment.clear();
  assertNull(table.get(0));
  assertEquals(0,segment.readCount.get());
  assertEquals(0,segment.count);
}
项目:guava-mock    文件MapMakerInternalMapTest.java   
public void testRemoveEntry() {
  MapMakerInternalMap<Object,value);

  // remove absent
  assertFalse(segment.removeTableEntryForTesting(entry));

  segment.setTableEntryForTesting(0,entry);
  segment.count = 1;
  assertTrue(segment.removeTableEntryForTesting(entry));
  assertEquals(0,segment.count);
  assertNull(table.get(0));
}
项目:googles-monorepo-demo    文件Interners.java   
@Override
public E intern(E sample) {
  while (true) {
    // trying to read the canonical...
    InternalEntry<E,there is always going to be another
       * thread doing progress here.
       */
    }
  }
}
项目:googles-monorepo-demo    文件MapMakerInternalMapTest.java   
public void testClear() {
  MapMakerInternalMap<Object,segment.count);
}
项目:googles-monorepo-demo    文件MapMakerInternalMapTest.java   
public void testRemoveEntry() {
  MapMakerInternalMap<Object,segment.count);
  assertNull(table.get(0));
}
项目:guava    文件Interners.java   
@Override
public E intern(E sample) {
  while (true) {
    // trying to read the canonical...
    InternalEntry<E,there is always going to be another
       * thread doing progress here.
       */
    }
  }
}
项目:guava    文件MapMakerInternalMapTest.java   
public void testClear() {
  MapMakerInternalMap<Object,segment.count);
}
项目:guava    文件MapMakerInternalMapTest.java   
public void testRemoveEntry() {
  MapMakerInternalMap<Object,segment.count);
  assertNull(table.get(0));
}
项目:guava-mock    文件MapMakerInternalMapTest.java   
public void testNewEntry() {
  for (MapMaker maker : allWeakValueStrengthMakers()) {
    MapMakerInternalMap<Object,?> map = makeMap(maker);
    Segment<Object,?> segment = map.segments[0];

    Object keyOne = new Object();
    Object valueOne = new Object();
    int hashOne = map.hash(keyOne);
    InternalEntry<Object,?> entryOne = segment.newEntryForTesting(keyOne,hashOne,null);
    WeakValueReference<Object,?> valueRefOne =
        segment.newWeakValueReferenceForTesting(entryOne,valueOne);
    assertSame(valueOne,valueRefOne.get());
    segment.setWeakValueReferenceForTesting(entryOne,valueRefOne);

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

    Object keyTwo = new Object();
    Object valueTwo = new Object();
    int hashTwo = map.hash(keyTwo);

    InternalEntry<Object,?> entryTwo =
        segment.newEntryForTesting(keyTwo,hashTwo,entryOne);
    WeakValueReference<Object,?> valueRefTwo =
        segment.newWeakValueReferenceForTesting(entryTwo,valueTwo);
    assertSame(valueTwo,valueRefTwo.get());
    segment.setWeakValueReferenceForTesting(entryTwo,valueRefTwo);

    assertSame(keyTwo,entryTwo.getKey());
    assertEquals(hashTwo,entryTwo.getHash());
    assertSame(entryOne,entryTwo.getNext());
    assertSame(valueRefTwo,segment.getWeakValueReferenceForTesting(entryTwo));
  }
}
项目:guava-mock    文件MapMakerInternalMapTest.java   
public void testcopyEntry() {
  for (MapMaker maker : allWeakValueStrengthMakers()) {
    MapMakerInternalMap<Object,null);
    segment.setValueForTesting(entryOne,valueOne);

    Object keyTwo = new Object();
    Object valueTwo = new Object();
    int hashTwo = map.hash(keyTwo);
    InternalEntry<Object,?> entryTwo = segment.newEntryForTesting(keyTwo,null);
    segment.setValueForTesting(entryTwo,valueTwo);

    InternalEntry<Object,?> copyOne = segment.copyForTesting(entryOne,null);
    assertSame(keyOne,entryOne.getHash());
    assertNull(entryOne.getNext());
    assertSame(valueOne,copyOne.getValue());

    InternalEntry<Object,?> copyTwo = segment.copyForTesting(entryTwo,copyOne);
    assertSame(keyTwo,copyTwo.getKey());
    assertEquals(hashTwo,copyTwo.getHash());
    assertSame(copyOne,copyTwo.getNext());
    assertSame(valueTwo,copyTwo.getValue());
  }
}
项目:guava-mock    文件MapMakerInternalMapTest.java   
public void testSegmentReplace() {
  MapMakerInternalMap<Object,?> map =
      makeMap(createMapMaker().concurrencyLevel(1).weakValues());
  Segment<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<? extends InternalEntry<Object,?>> table = segment.table;
  int index = hash & (table.length() - 1);

  InternalEntry<Object,null);
  WeakValueReference<Object,?> oldValueRef =
      segment.newWeakValueReferenceForTesting(entry,oldValue);
  segment.setWeakValueReferenceForTesting(entry,oldValueRef);

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

  // same key
  segment.setTableEntryForTesting(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
  segment.setWeakValueReferenceForTesting(entry,oldValueRef);
  oldValueRef.clear();
  assertNull(segment.replace(key,segment.count);
  assertNull(segment.get(key,hash));
}
项目:guava-mock    文件MapMakerInternalMapTest.java   
public void testSegmentPut() {
  MapMakerInternalMap<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
  InternalEntry<Object,?> entry = segment.getEntry(key,hash);
  WeakValueReference<Object,oldValueRef);
  assertSame(oldValue,hash));
  oldValueRef.clear();
  assertNull(segment.put(key,hash));
}
项目:guava-mock    文件MapMakerInternalMapTest.java   
public void testSegmentPutIfAbsent() {
  MapMakerInternalMap<Object,true));
  assertEquals(1,hash));
}
项目:guava-mock    文件MapMakerInternalMapTest.java   
public void testSegmentRemove() {
  MapMakerInternalMap<Object,?> segment = map.segments[0];

  Object key = new Object();
  int hash = map.hash(key);
  Object oldValue = new Object();
  atomicreferenceArray<? extends InternalEntry<Object,oldValueRef);

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

  // cleared
  segment.setTableEntryForTesting(index,hash));
  oldValueRef.clear();
  assertNull(segment.remove(key,hash));
}
项目:guava-mock    文件MapMakerInternalMapTest.java   
public void testExpand() {
  MapMakerInternalMap<Object,?> segment = map.segments[0];
  assertEquals(1,segment.table.length());

  // manually add elements to avoid expansion
  int originalCount = 1024;
  InternalEntry<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 = segment.newEntryForTesting(key,entry);
    segment.setValueForTesting(entry,value);
  }
  segment.setTableEntryForTesting(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-mock    文件MapMakerInternalMapTest.java   
private static <K,V> int countLiveEntries(MapMakerInternalMap<K,V,?> map) {
  int result = 0;
  for (Segment<K,?> segment : map.segments) {
    atomicreferenceArray<? extends InternalEntry<K,?>> table = segment.table;
    for (int i = 0; i < table.length(); i++) {
      for (InternalEntry<K,?> e = table.get(i); e != null; e = e.getNext()) {
        if (map.isLiveForTesting(e)) {
          result++;
        }
      }
    }
  }
  return result;
}
项目:guava-mock    文件MapMakerInternalMapTest.java   
public void testClearValue() {
  MapMakerInternalMap<Object,?> map =
      makeMap(createMapMaker().concurrencyLevel(1).initialCapacity(1).weakValues());
  Segment<Object,value);
  WeakValueReference<Object,?> valueRef = segment.getWeakValueReferenceForTesting(entry);

  // clear absent
  assertFalse(segment.clearValueForTesting(key,valueRef));

  segment.setTableEntryForTesting(0,entry);
  // don't increment count; this is used during computation
  assertTrue(segment.clearValueForTesting(key,valueRef));
  // no notification sent with clearValue
  assertEquals(0,segment.count);
  assertNull(table.get(0));

  // clear wrong value reference
  segment.setTableEntryForTesting(0,entry);
  WeakValueReference<Object,?> otherValueRef =
      segment.newWeakValueReferenceForTesting(entry,value);
  segment.setWeakValueReferenceForTesting(entry,otherValueRef);
  assertFalse(segment.clearValueForTesting(key,valueRef));
  segment.setWeakValueReferenceForTesting(entry,valueRef);
  assertTrue(segment.clearValueForTesting(key,valueRef));
}
项目:guava-mock    文件MapMakerInternalMapTest.java   
public void testDrainKeyReferenceQueueOnWrite() {
  for (MapMaker maker : allWeakKeyStrengthMakers()) {
    MapMakerInternalMap<Object,?> map = makeMap(maker.concurrencyLevel(1));
    if (maker.getKeyStrength() == Strength.WEAK) {
      Segment<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);
      InternalEntry<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.getKeyReferenceQueueForTesting().poll());
    }
  }
}
项目:guava-mock    文件MapMakerInternalMapTest.java   
public void testDrainKeyReferenceQueueOnRead() {
  for (MapMaker maker : allWeakKeyStrengthMakers()) {
    MapMakerInternalMap<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++) {
        Object unused = map.get(keyTwo);
      }
      assertFalse(map.containsKey(keyOne));
      assertFalse(map.containsValue(valueOne));
      assertNull(map.get(keyOne));
      assertEquals(0,map.size());
      assertNull(segment.getKeyReferenceQueueForTesting().poll());
    }
  }
}
项目:googles-monorepo-demo    文件MapMakerInternalMapTest.java   
public void testNewEntry() {
  for (MapMaker maker : allWeakValueStrengthMakers()) {
    MapMakerInternalMap<Object,segment.getWeakValueReferenceForTesting(entryTwo));
  }
}
项目:googles-monorepo-demo    文件MapMakerInternalMapTest.java   
public void testcopyEntry() {
  for (MapMaker maker : allWeakValueStrengthMakers()) {
    MapMakerInternalMap<Object,copyTwo.getValue());
  }
}
项目:googles-monorepo-demo    文件MapMakerInternalMapTest.java   
public void testSegmentReplace() {
  MapMakerInternalMap<Object,hash));
}
项目:googles-monorepo-demo    文件MapMakerInternalMapTest.java   
public void testSegmentPut() {
  MapMakerInternalMap<Object,hash));
}
项目:googles-monorepo-demo    文件MapMakerInternalMapTest.java   
public void testSegmentPutIfAbsent() {
  MapMakerInternalMap<Object,hash));
}
项目:googles-monorepo-demo    文件MapMakerInternalMapTest.java   
public void testSegmentRemove() {
  MapMakerInternalMap<Object,hash));
}
项目:googles-monorepo-demo    文件MapMakerInternalMapTest.java   
public void testExpand() {
  MapMakerInternalMap<Object,map);
  }
}
项目:googles-monorepo-demo    文件MapMakerInternalMapTest.java   
private static <K,?> e = table.get(i); e != null; e = e.getNext()) {
        if (map.isLiveForTesting(e)) {
          result++;
        }
      }
    }
  }
  return result;
}
项目:googles-monorepo-demo    文件MapMakerInternalMapTest.java   
public void testClearValue() {
  MapMakerInternalMap<Object,valueRef));
}
项目:googles-monorepo-demo    文件MapMakerInternalMapTest.java   
public void testDrainKeyReferenceQueueOnWrite() {
  for (MapMaker maker : allWeakKeyStrengthMakers()) {
    MapMakerInternalMap<Object,map.size());
      assertNull(segment.getKeyReferenceQueueForTesting().poll());
    }
  }
}
项目:googles-monorepo-demo    文件MapMakerInternalMapTest.java   
public void testDrainKeyReferenceQueueOnRead() {
  for (MapMaker maker : allWeakKeyStrengthMakers()) {
    MapMakerInternalMap<Object,map.size());
      assertNull(segment.getKeyReferenceQueueForTesting().poll());
    }
  }
}
项目:guava    文件MapMakerInternalMapTest.java   
public void testNewEntry() {
  for (MapMaker maker : allWeakValueStrengthMakers()) {
    MapMakerInternalMap<Object,segment.getWeakValueReferenceForTesting(entryTwo));
  }
}
项目:guava    文件MapMakerInternalMapTest.java   
public void testcopyEntry() {
  for (MapMaker maker : allWeakValueStrengthMakers()) {
    MapMakerInternalMap<Object,copyTwo.getValue());
  }
}
项目:guava    文件MapMakerInternalMapTest.java   
public void testSegmentReplace() {
  MapMakerInternalMap<Object,hash));
}
项目:guava    文件MapMakerInternalMapTest.java   
public void testSegmentPut() {
  MapMakerInternalMap<Object,hash));
}
项目:guava    文件MapMakerInternalMapTest.java   
public void testSegmentPutIfAbsent() {
  MapMakerInternalMap<Object,hash));
}
项目:guava    文件MapMakerInternalMapTest.java   
public void testSegmentRemove() {
  MapMakerInternalMap<Object,hash));
}

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