code: @Override
  	public final int store(Object obj, int previousHandle) throws DataStoreException
      {
      	byte[] data = asByteArray(obj);
      	
          int lastBlockOfPreviousEntry;
          int firstBlockOfNextEntry;
          
          // Find blocks around insertion point
          if (previousHandle != -1)
          {
              //if (SAFE_MODE) checkHandle(previousHandle); FIXME previousHandle may already be lastBlockOfPreviousEntry
          
              // Find end block
              lastBlockOfPreviousEntry = previousHandle;
              while (lastBlockOfPreviousEntry != -1 && (flags[lastBlockOfPreviousEntry] & FLAG_END_BLOCK) == 0)
                  lastBlockOfPreviousEntry = nextBlock[lastBlockOfPreviousEntry];
              if (lastBlockOfPreviousEntry == -1)
                  throw new DataStoreException("Can't find end block for "+previousHandle);
              
              // Get successor block
              firstBlockOfNextEntry = nextBlock[lastBlockOfPreviousEntry];
          }
          else
          {
              lastBlockOfPreviousEntry = previousHandle;
              firstBlockOfNextEntry = firstBlock;
          }
          
          // Store data in split blocks
          int newHandle = storeData(data,lastBlockOfPreviousEntry,firstBlockOfNextEntry);
          if (newHandle == -1)
          	return -1;
          
          // Update first block index if necessary
          // --> This should be done last for I/O failure reliability : 
          //      if something goes wrong before this, the firstBlock is still consistent
          if (previousHandle == -1)
          {
              firstBlock = newHandle;
              writeFirstBlock();
          }
          
          size++;
  
          flush();
          
          return newHandle;
      }
docs: /*
  (non-Javadoc)
  @see net.timewalker.ffmq4.utils.store.ChainedDataStore#store(byte[], int)