.. _cpp_core_data:

In-Memory Representation of Data
================================

Vector data is at the core of the SVS similarity search library.
Several specific classes are provided to implement in-memory vector datasets with different semantics.

* :cpp:class:`svs::data::SimpleData` - General allocator-aware dense representation of embedding vectors.
* :cpp:type:`svs::data::SimpleDataView` - Non-owning view over a dense representation of embedding vectors.
* :cpp:type:`svs::data::ConstSimpleDataView` - Constant version of :cpp:type:`svs::data::SimpleDataView`.
  Useful for crossing virtual function boundaries where templates can't be used.

Detailed documentation for these classes is given below.

.. doxygenclass:: svs::data::SimpleData
   :project: SVS
   :members:

.. doxygentypedef:: svs::data::ConstSimpleDataView
   :project: SVS

.. doxygentypedef:: svs::data::SimpleDataView
   :project: SVS

Data Loading
------------

The :cpp:class:`svs::VectorDataLoader` class provides a way to instantiate a :cpp:class:`svs::data::SimplePolymorphicData` object from multiple different kinds of file types.

.. doxygenclass:: svs::VectorDataLoader
   :project: SVS
   :members:


.. NOTE::

   The various data implementations given above are all instances of the more general concept :cpp:concept:`svs::data::ImmutableMemoryDataset`.
   Where possible, this concept is use to constrain template arguments, allowing for future custom implementations.