# Class datablock

- Defined in File datablock.hpp

## Inheritance Relationships

### Base Type

- `public std::list< category >`

## Class Documentation

class datablock : public std::list<category>

  A datablock is a list of category objects with some additional features.

  Public Functions

  datablock() = default
  inline datablock(std::string_view name)

    Construct a new datablock object with name name.

    Parameters:

      name – The name for the new datablock

  inline const std::string &name() const

    Return the name of this datablock.

  inline void set_name(std::string_view name)

    Set the name of this datablock to name.

    Parameters:

      name – The new name

  void load_dictionary()

    Attempt to load the dictionary specified in audit_conform category.

  void set_validator(const validator *v)

    Set the validator object to v.

    Parameters:

      v – The new validator object, may be null

  const validator *get_validator() const

    Get the validator object.

    Returns:

      const validator* The validator or nullptr if there is none

  bool is_valid() const

    Validates the content of this datablock and all its content.

    Returns:

      true If the content is valid

    Returns:

      false If the content is not valid

  bool validate_links() const

    Validates all contained data for valid links between parents and children as defined in the validator.

    Returns:

      true If all links are valid

    Returns:

      false If all links are not valid

  bool strip()

    Strip removes all categories and items that are invalid according to the assigned validator. Will also add a valid audit_conform block.

    Returns:

      true if the remaining datablock is valid

  category &operator[](std::string_view name)

    Return the category named name, will create a new and empty category named name if it does not exist.

    Parameters:

      name – The name of the category to return

    Returns:

      category& Reference to the named category

  const category &operator[](std::string_view name) const

    Return the const category named name, will return a reference to a static empty category if it was not found.

    Parameters:

      name – The name of the category to return

    Returns:

      category& Reference to the named category

  category *get(std::string_view name)

    Return a pointer to the category named name or nullptr if it does not exist.

    Parameters:

      name – The name of the category

    Returns:

      category* Pointer to the category found or nullptr

  const category *get(std::string_view name) const

    Return a pointer to the category named name or nullptr if it does not exist.

    Parameters:

      name – The name of the category

    Returns:

      category* Pointer to the category found or nullptr

  inline bool contains(std::string_view name) const

    Return true if this datablock contains a non-empty category.

  std::tuple<iterator, bool> emplace(std::string_view name)

    Tries to find a category with name name and will create a new one if it is not found. The result is a tuple of an iterator pointing to the category and a boolean indicating whether the category was created or not.

    Parameters:

      name – The name for the category

    Returns:

      std::tuple<iterator, bool> A tuple containing an iterator pointing at the category and a boolean indicating whether the category was newly created.

  inline std::vector<std::string> get_tag_order() const

    Get the preferred order of the categories when writing them.

  std::vector<std::string> get_item_order() const

    Get the preferred order of the categories when writing them.

  void write(std::ostream &os) const

    Write out the contents to os.

  void write(std::ostream &os, const std::vector<std::string> &item_name_order)

    Write out the contents to os using the order defined in item_name_order.

  bool operator==(const datablock &rhs) const

    Comparison operator to compare two datablock for equal content.

  Friends

  inline friend void swap_(datablock &a, datablock &b) noexcept
  inline friend std::ostream &operator<<(std::ostream &os, const datablock &db)

    Friend operator<< to write datablock db to std::ostream os.