@Override public int[] get(int index) { int val = mainArray.get(index); if(val < 0) { int dbIndex = dbIndexDecode(val); if(internalDB.hasIndex(dbIndex)) { byte[] dat = internalDB.get(dbIndex); if(dat == null || dat.length == 0) { return new int[0]; } int[] result = new int[dat.length / NUM_BYTES_IN_INT]; ByteBuffer bb = ByteBuffer.wrap(dat); for(int i = 0; i < result.length; i++) { result[i] = bb.getInt(); } return result; } } if(val > 0) { return new int[] { val }; } return new int[0]; }
/** * Sync-up the high water mark to a given value. * * @param endOfPeriod */ @Override public void saveHWMark(long endOfPeriod) { if (getHWMark() < endOfPeriod) { try { set(0, get(0), endOfPeriod); } catch(Exception e) { _log.error("Failed to saveHWMark " + endOfPeriod, e); } } else if(0 < endOfPeriod && endOfPeriod < getLWMark()) { try { _entryManager.sync(); } catch(Exception e) { _log.error("Failed to saveHWMark" + endOfPeriod, e); } _entryManager.setWaterMarks(endOfPeriod, endOfPeriod); } }
/** * Sync-up the high water mark to a given value. * * @param endOfPeriod */ @Override public void saveHWMark(long endOfPeriod) { if (getHWMark() < endOfPeriod) { try { set(0, get(0), endOfPeriod); } catch(Exception e) { _log.error("Failed to saveHWMark " + endOfPeriod, e); } } else if(0 < endOfPeriod && endOfPeriod < getLWMark()) { try { _entryManager.sync(); } catch(Exception e) { _log.error("Failed to saveHWMark" + endOfPeriod, e); } _entryManager.setWaterMarks(endOfPeriod, endOfPeriod); } }
@Override public int getCount(int index) { if(mainArray.hasIndex(index)) { int val = mainArray.get(index); if (val > 0) { return 1; } if (val < 0) { int dbIndex = dbIndexDecode(val); return internalDB.hasIndex(dbIndex) ? (Math.max(0, internalDB.getLength(dbIndex)) / NUM_BYTES_IN_INT) : 0; } } return 0; }
@Override public void delete(int index, long scn) throws Exception { if(!mainArray.hasIndex(index)) { return; } int val = mainArray.get(index); if(val < 0) { int dbIndex = dbIndexDecode(val); if(internalDB.hasIndex(dbIndex)) { internalDB.set(dbIndex, null, scn); } } mainArray.set(index, 0, scn); internalPersist(scn); }
@Override public synchronized void remove(int index, int elemId, long scn) throws Exception { if(!mainArray.hasIndex(index)) { return; } int val = mainArray.get(index); if(val < 0) { int dbIndex = dbIndexDecode(val); if(internalDB.hasIndex(dbIndex)) { removeInternal(index, dbIndex, elemId, scn); internalPersist(scn); return; } } if(val < 0 || val == elemId) { mainArray.set(index, 0, scn); } internalPersist(scn); }
@Override public synchronized void add(int index, int elemId, long scn) throws Exception { assertPositive(elemId); mainArray.expandCapacity(index); int val = mainArray.get(index); if(val < 0) { int dbIndex = dbIndexDecode(val); if(internalDB.hasIndex(dbIndex)) { addInternal(dbIndex, elemId, scn); internalPersist(scn); return; } } if(val <= 0) { mainArray.set(index, elemId, scn); } else if(val != elemId) { int[] elems = { val, elemId }; int dbIndex = internalDB.add(bytes(elems), scn); mainArray.set(index, dbIndexEncode(dbIndex), scn); } internalPersist(scn); }
mainArray.expandCapacity(index); int val = mainArray.get(index); if(val < 0) { int dbIndex = dbIndexDecode(val);