# Class file

- Defined in File file.hpp

## Inheritance Relationships

### Base Type

- `public std::list< datablock >`

## Class Documentation

class file : public std::list<datablock>

  The class file is actually a list of datablock objects.

  Public Functions

  file() = default
  inline explicit file(const std::filesystem::path &p)

    Construct a new file object using the data in the file p as content.

    Parameters:

      p – Path to a file containing the data to load

  inline explicit file(std::istream &is)

    Construct a new file object using the data in the std::istream is.

    Parameters:

      is – The istream containing the data to load

  inline explicit file(const char *data, std::size_t length)

    Construct a new file object with data in the constant string defined by data and length.

    Parameters:

      - data – The pointer to the character string with data to load

      - length – The length of the data

  void set_validator(const validator *v)

    Set the validator object to v.

  inline const validator *get_validator() const

    Get the validator object.

  bool is_valid() const

    Validate the content and return true if everything was valid.

    Will throw an exception if there is no validator defined.

    If each category was valid, validate_links will also be called.

    Returns:

      true If the content is valid

    Returns:

      false If the content is not valid

  bool is_valid()

    Validate the content and return true if everything was valid.

    Will attempt to load the referenced dictionary if none was specified.

    If each category was valid, validate_links will also be called.

    Returns:

      true If the content is valid

    Returns:

      false If the content is not valid

  bool validate_links() const

    Validate the links for all datablocks contained.

    Will throw an exception if no validator was specified.

    Returns:

      true If all links were valid

    Returns:

      false If all links were not valid

  void load_dictionary()

    Attempt to load a dictionary (validator) based on the contents of the audit_conform category, if available.

  void load_dictionary(std::string_view name)

    Attempt to load the named dictionary name and create a validator based on it.

    Tje name can be the name of a single file, or even the stem of that filename. So, e.g. mmcif_pdbx is valid.

    Since libcifpp can use extensions to validators, you can add them to the name. So if you would like to add the dssp extensions you would have to write:

        file.load_dictionary("mmcif_pdbx;dssp-extension");

    Parameters:

      name – The name of the dictionary to load

  bool contains(std::string_view name) const

    Return true if a datablock with the name name is part of this file.

  inline datablock &front()

    return a reference to the first datablock in the file

  inline const datablock &front() const

    return a const reference to the first datablock in the file

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

    return a reference to the datablock named name

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

    return a const reference to the datablock named name

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

    Tries to find a datablock 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 datablock and a boolean indicating whether the datablock was created or not.

    Parameters:

      name – The name for the datablock

    Returns:

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

  void load(const std::filesystem::path &p)

    Load the data from the file specified by p

  void load(std::istream &is)

    Load the data from is

  void save(const std::filesystem::path &p) const

    Save the data to the file specified by p

  void save(std::ostream &os) const

    Save the data to is

  Friends

  inline friend std::ostream &operator<<(std::ostream &os, const file &f)

    Friend operator<< to write file f to std::ostream os.