code: @Override
      public DataBuffer create(Pointer pointer, DataType type, long length, @NonNull Indexer indexer) {
          switch (type) {
              case BOOL:
                  return new BoolBuffer(pointer, indexer, length);
              case BYTE:
                  return new Int8Buffer(pointer, indexer, length);
              case UBYTE:
                  return new UInt8Buffer(pointer, indexer, length);
              case SHORT:
                  return new Int16Buffer(pointer, indexer, length);
              case INT:
                  return new IntBuffer(pointer, indexer, length);
              case LONG:
                  return new LongBuffer(pointer, indexer, length);
              case HALF:
                  return new HalfBuffer(pointer, indexer, length);
              case FLOAT:
                  return new FloatBuffer(pointer, indexer, length);
              case DOUBLE:
                  return new DoubleBuffer(pointer, indexer, length);
          }
          throw new IllegalArgumentException("Invalid opType " + type);
      }
docs: Create a data buffer based on the
  given pointer, data buffer opType,
  and length of the buffer
  
  @param pointer the pointer to use
  @param type    the opType of buffer
  @param length  the length of the buffer
  @param indexer the indexer for the pointer
  @return the data buffer
  backed by this pointer with the given
  opType and length.