public static int getTypeBufferCount()

in vector/src/main/java/org/apache/arrow/vector/TypeLayout.java [294:459]


  public static int getTypeBufferCount(final ArrowType arrowType) {
    return arrowType.accept(
        new ArrowTypeVisitor<Integer>() {

          /**
           * All fixed width vectors have a common number of buffers 2: one validity buffer, plus a
           * data buffer.
           */
          static final int FIXED_WIDTH_BUFFER_COUNT = 2;

          /**
           * All variable width vectors have a common number of buffers 3: a validity buffer, an
           * offset buffer, and a data buffer.
           */
          static final int VARIABLE_WIDTH_BUFFER_COUNT = 3;

          @Override
          public Integer visit(Int type) {
            return FIXED_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(Union type) {
            switch (type.getMode()) {
              case Dense:
                // TODO: validate this
                return 2;
              case Sparse:
                // type buffer
                return 1;
              default:
                throw new UnsupportedOperationException(
                    "Unsupported Union Mode: " + type.getMode());
            }
          }

          @Override
          public Integer visit(Struct type) {
            // validity buffer
            return 1;
          }

          @Override
          public Integer visit(Timestamp type) {
            return FIXED_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(ArrowType.List type) {
            // validity buffer + offset buffer
            return 2;
          }

          @Override
          public Integer visit(ArrowType.ListView type) {
            // validity buffer + offset buffer + size buffer
            return 3;
          }

          @Override
          public Integer visit(ArrowType.LargeList type) {
            // validity buffer + offset buffer
            return 2;
          }

          @Override
          public Integer visit(ArrowType.LargeListView type) {
            // validity buffer + offset buffer + size buffer
            return 3;
          }

          @Override
          public Integer visit(FixedSizeList type) {
            // validity buffer
            return 1;
          }

          @Override
          public Integer visit(Map type) {
            // validity buffer + offset buffer
            return 2;
          }

          @Override
          public Integer visit(FloatingPoint type) {
            return FIXED_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(Decimal type) {
            return FIXED_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(FixedSizeBinary type) {
            return FIXED_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(Bool type) {
            return FIXED_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(Binary type) {
            return VARIABLE_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(BinaryView type) {
            // NOTE: only consider the validity and view buffers
            return 2;
          }

          @Override
          public Integer visit(Utf8 type) {
            return VARIABLE_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(Utf8View type) {
            // NOTE: only consider the validity and view buffers
            return 2;
          }

          @Override
          public Integer visit(LargeUtf8 type) {
            return VARIABLE_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(LargeBinary type) {
            return VARIABLE_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(Null type) {
            return 0;
          }

          @Override
          public Integer visit(Date type) {
            return FIXED_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(Time type) {
            return FIXED_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(Interval type) {
            return FIXED_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(Duration type) {
            return FIXED_WIDTH_BUFFER_COUNT;
          }

          @Override
          public Integer visit(RunEndEncoded type) {
            return 0;
          }
        });
  }