/** * @param keyIdx Key index. * @param ttl TTL for near cache update. * @param expireTime Expire time for near cache update. */ void addNearTtl(int keyIdx, long ttl, long expireTime) { if (ttl >= 0) { if (nearTtls == null) { nearTtls = new GridLongList(16); for (int i = 0; i < keyIdx; i++) nearTtls.add(-1L); } } if (nearTtls != null) nearTtls.add(ttl); if (expireTime >= 0) { if (nearExpireTimes == null) { nearExpireTimes = new GridLongList(16); for (int i = 0; i < keyIdx; i++) nearExpireTimes.add(-1); } } if (nearExpireTimes != null) nearExpireTimes.add(expireTime); }
/** * @param to To list. * @param from From list. * @return To list (passed in or created). */ public static GridLongList addAll(@Nullable GridLongList to, GridLongList from) { if (to == null) { GridLongList res = new GridLongList(from.size()); res.addAll(from); return res; } else { to.addAll(from); return to; } }
GridLongList ptrs = new GridLongList(chunkSize); GridLongList list = seg.loadedPages.removeIf(base, boundary, clearPred); ptrs.addAll(list); for (int i = 0; i < ptrs.size(); i++) { long relPtr = ptrs.get(i); ptrs.clear();
/** * @param part Partition. * @param primaryId Primary ID. * @param futId Future ID. */ private void sendDeferredUpdateResponse(int part, UUID primaryId, long futId) { Map<UUID, GridDhtAtomicDeferredUpdateResponse> resMap = defRes.get(); GridDhtAtomicDeferredUpdateResponse msg = resMap.get(primaryId); if (msg == null) { msg = new GridDhtAtomicDeferredUpdateResponse(ctx.cacheId(), new GridLongList(DEFERRED_UPDATE_RESPONSE_BUFFER_SIZE)); if (DEFERRED_UPDATE_RESPONSE_TIMEOUT > 0) { GridTimeoutObject timeoutSnd = new DeferredUpdateTimeout(part, primaryId); msg.timeoutSender(timeoutSnd); ctx.time().addTimeoutObject(timeoutSnd); } resMap.put(primaryId, msg); } GridLongList futIds = msg.futureIds(); assert futIds.size() < DEFERRED_UPDATE_RESPONSE_BUFFER_SIZE : futIds.size(); futIds.add(futId); if (futIds.size() >= DEFERRED_UPDATE_RESPONSE_BUFFER_SIZE) { resMap.remove(primaryId); sendDeferredUpdateResponse(primaryId, msg); } }
/** * @param nodeId Sender node ID. * @param res Deferred atomic update response. */ private void processDhtAtomicDeferredUpdateResponse(UUID nodeId, GridDhtAtomicDeferredUpdateResponse res) { GridLongList futIds = res.futureIds(); assert futIds != null && !futIds.isEmpty() : futIds; for (int i = 0; i < futIds.size(); i++) { long id = futIds.get(i); GridDhtAtomicAbstractUpdateFuture updateFut = (GridDhtAtomicAbstractUpdateFuture)ctx.mvcc().atomicFuture(id); if (updateFut != null) { if (msgLog.isDebugEnabled()) { msgLog.debug("Received DHT atomic deferred update response [futId=" + id + ", writeVer=" + res + ", node=" + nodeId + ']'); } updateFut.onDeferredResponse(nodeId); } else { U.warn(msgLog, "Failed to find DHT update future for deferred update response [futId=" + id + ", nodeId=" + nodeId + ", res=" + res + ']'); } } }
/** * Returns (possibly reordered) copy of this list, excluding all elements of given list. * * @param l List of elements to remove. * @return New list without all elements from {@code l}. */ public GridLongList copyWithout(GridLongList l) { assert l != null; if (idx == 0) return new GridLongList(); if (l.idx == 0) return new GridLongList(Arrays.copyOf(arr, idx)); long[] newArr = Arrays.copyOf(arr, idx); int newIdx = idx; for (int i = 0; i < l.size(); i++) { long rmVal = l.get(i); for (int j = 0; j < newIdx; j++) { if (newArr[j] == rmVal) { while (newIdx > 0 && newArr[newIdx - 1] == rmVal) newIdx--; if (newIdx > 0) { newArr[j] = newArr[newIdx - 1]; newIdx--; } } } } return new GridLongList(newArr, newIdx); }
/** * @return Copy of this list. */ public GridLongList copy() { if (idx == 0) return new GridLongList(); return new GridLongList(Arrays.copyOf(arr, idx)); }
GridLongList collisions = new GridLongList(16); collisions.add(meta); meta = collisions.remove(); while (!collisions.isEmpty());
/** * */ @Test public void testSort() { assertEquals(new GridLongList(), new GridLongList().sort()); assertEquals(asList(1), asList(1).sort()); assertEquals(asList(1, 2), asList(2, 1).sort()); assertEquals(asList(1, 2, 3), asList(2, 1, 3).sort()); GridLongList list = new GridLongList(); list.add(4); list.add(3); list.add(5); list.add(1); assertEquals(asList(1, 3, 4, 5), list.sort()); list.add(0); assertEquals(asList(1, 3, 4, 5, 0), list); assertEquals(asList(0, 1, 3, 4, 5), list.sort()); }
private GridLongList sorted(Collection<Integer> col) { GridLongList lst = new GridLongList(col.size()); for (Integer i : col) lst.add(i); return lst.sort(); } }
/** * Assert {@link GridLongList#copyWithout(GridLongList)} on given lists. * * @param lst Source lists. * @param rmv Exclude list. */ private void assertCopy(GridLongList lst, GridLongList rmv) { GridLongList res = lst.copyWithout(rmv); for (int i = 0; i < lst.size(); i++) { long v = lst.get(i); if (rmv.contains(v)) assertFalse(res.contains(v)); else assertTrue(res.contains(v)); } }
/** * */ @Test public void testArray() { GridLongList list = new GridLongList(); long[] array = list.array(); assertNotNull(array); assertEquals(0, array.length); list.add(1L); array = list.array(); assertNotNull(array); assertEquals(1, array.length); assertEquals(1L, array[0]); } }
/** {@inheritDoc} */ @Override public boolean next() { if (prevKey == null) { // First call. if (!in.next()) return false; prevKey = in.key(); assert prevKey != null; in.keyReader.resetReusedObject(null); // We need 2 instances of key object for comparison. vals.add(value(in.metaPtr)); } else { if (in.metaPtr == 0) // We reached the end of the input. return false; vals.clear(); vals.add(value(in.metaPtr)); in.keyReader.resetReusedObject(prevKey); // Switch key instances. prevKey = nextKey; } while (in.next()) { // Fill with head value pointers with equal keys. if (grpCmp.compare(prevKey, nextKey = in.key()) == 0) vals.add(value(in.metaPtr)); else break; } assert !vals.isEmpty(); return true; }
/** * @param l List to add all elements of. */ public void addAll(GridLongList l) { assert l != null; if (l.isEmpty()) return; if (arr == null) arr = new long[4]; int len = arr.length; while (len < idx + l.size()) len <<= 1; arr = Arrays.copyOf(arr, len); System.arraycopy(l.arr, 0, arr, idx, l.size()); idx += l.size(); }
/** {@inheritDoc} */ @Override public Iterator<?> values() { assert !vals.isEmpty(); final ValueIterator valIter = new ValueIterator(vals.get(0), in.valReader); return new Iterator<Object>() { /** */ private int idx; @Override public boolean hasNext() { if (!valIter.hasNext()) { if (++idx == vals.size()) return false; valIter.head(vals.get(idx)); assert valIter.hasNext(); } return true; } @Override public Object next() { return valIter.next(); } @Override public void remove() { valIter.remove(); } }; }
/** * */ @Test public void testTruncate() { GridLongList list = asList(1, 2, 3, 4, 5, 6, 7, 8); list.truncate(4, true); assertEquals(asList(1, 2, 3, 4), list); list.truncate(2, false); assertEquals(asList(3, 4), list); list = new GridLongList(); list.truncate(0, false); list.truncate(0, true); assertEquals(new GridLongList(), list); }