code: public synchronized boolean add(AbstractKVStorable toAdd) {
          if (memorySizeInBytes >= gp.MAX_MEMORY_PER_BUCKET) {
              return false;
          }
          // no memory is available
          try {
              if (lastChunkIndex == -1 || position_in_chunk == memory[lastChunkIndex].length) {
                  boolean allocatingSuccessful = enlargeMemory();
  
                  // No more memory was left so we don't add the element and return false.
                  if (!allocatingSuccessful) {
                      return false;
                  }
              }
          } catch (InterruptedException e) {
              // TODO: error log
              e.printStackTrace();
          }
  
          byte[] b = toAdd.toByteBuffer().array();
          for (int i = 0; i < b.length; i++, position_in_chunk++) {
              memory[lastChunkIndex][position_in_chunk] = b[i];
          }
          elementsInBucket++;
          return true;
      }
docs: Adds one {@link AbstractKVStorable}-object. This method have to be synchronized, because it is possible to access
  the backend in the same moment with the function {@link #getBackend()}.
  
  @param toAdd
  the Data to add
  @return true, if adding the element to the buffer was successful