docs: public @CheckForNull R search(final int n, final Direction d) {
          switch (d) {
          case EXACT:
              return getByNumber(n);
          case ASC:
              for (int m : numberOnDisk) {
                  if (m < n) {
                      // TODO could be made more efficient with numberOnDisk.find
                      continue;
                  }
                  R r = getByNumber(m);
                  if (r != null) {
                      return r;
                  }
              }
              return null;
          case DESC:
              // TODO again could be made more efficient
              ListIterator<Integer> iterator = numberOnDisk.listIterator(numberOnDisk.size());
              while(iterator.hasPrevious()) {
                  int m = iterator.previous();
                  if (m > n) {
                      continue;
                  }
                  R r = getByNumber(m);
                  if (r != null) {
                      return r;
                  }
              }
              return null;
          default:
              throw new AssertionError();
          }
      }