private boolean hasMoreElements() {
    switch (state()) {
    case END_OF_DOCUMENT:
    case END_OF_ARRAY:
    case DONE:
      return false;
    default:
      return true;
    }
  }
In order to be able to get current location of the BSON "cursor" (document or array start/end)
enforcing clients to
provide {@link AbstractBsonReader} which exposes this information via {@code getState()}
method, instead of more generic interface {@link BsonReader}.
@param delegate
@see AbstractBsonReader#getState()
mongo/src/org/immutables/mongo/bson4gson/BsonReader.java