.. Licensed to the Apache Software Foundation (ASF) under one
.. or more contributor license agreements.  See the NOTICE file
.. distributed with this work for additional information
.. regarding copyright ownership.  The ASF licenses this file
.. to you under the Apache License, Version 2.0 (the
.. "License"); you may not use this file except in compliance
.. with the License.  You may obtain a copy of the License at

..   http://www.apache.org/licenses/LICENSE-2.0

.. Unless required by applicable law or agreed to in writing,
.. software distributed under the License is distributed on an
.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
.. KIND, either express or implied.  See the License for the
.. specific language governing permissions and limitations
.. under the License.

.. _cpp-api-array-builders:

==============
Array Builders
==============

.. seealso:: :ref:`cpp-api-buffer-builders` for direct construction of array buffers

.. doxygenclass:: arrow::ArrayBuilder
   :members:

Concrete builder subclasses
===========================

Primitive
---------

.. doxygenclass:: arrow::NullBuilder
   :members:

.. doxygenclass:: arrow::BooleanBuilder
   :members:

.. doxygengroup:: numeric-builders
   :content-only:
   :members:

Temporal
--------

.. doxygengroup:: temporal-builders
   :content-only:
   :members:

Binary-like
-----------

.. doxygengroup:: binary-builders
   :content-only:
   :members:

Nested
------

.. doxygengroup:: nested-builders
   :content-only:
   :members:

Dictionary-encoded
------------------

.. doxygenclass:: arrow::DictionaryBuilder
   :members:


Record Batch Builder
====================

.. doxygenclass:: arrow::RecordBatchBuilder
   :members:
