// Autogenerated by tools\build\make_containers.py
// from tools\build\container_templates\container\DynamicListClassnameContainer.h
// Do not edit - any changes will be lost!

/**
 *  \file IMP/container/DynamicListQuadContainer.h
 *  \brief Store a list of ParticleQuadsTemp
 *
 *  Copyright 2007-2021 IMP Inventors. All rights reserved.
 */

#ifndef IMPCONTAINER_DYNAMIC_LIST_QUAD_CONTAINER_H
#define IMPCONTAINER_DYNAMIC_LIST_QUAD_CONTAINER_H

#include <IMP/container/container_config.h>
#include <IMP/object_macros.h>
#include <IMP/internal/DynamicListContainer.h>

IMPCONTAINER_BEGIN_NAMESPACE

//! Store a ParticleIndexQuads
/** In contrast to ListQuadContainer, this list is designed to act
    as the output of a ScoreState or another container. The key difference
    is that it uses the passed Container to define the list of all
    possible contents of the container.
 */
class IMPCONTAINEREXPORT DynamicListQuadContainer :
#if defined(IMP_DOXYGEN) || defined(SWIG)
    public QuadContainer
#else
    public IMP::internal::DynamicListContainer<QuadContainer>
#endif
    {
  typedef IMP::internal::DynamicListContainer<QuadContainer> P;

 public:
  /** Constructs the dynamic list

      @param scope a container with a list of all possible particles that
                   are allowed to be dynamically added or removed in this
                   container
      @param name  the name of this container
  */
  DynamicListQuadContainer(Container *scope, std::string name =
                                                  "ListQuadContainer %1%");

  /** @name Methods to control the contained objects

      This container stores a list of Quad objects. To manipulate
      the list use these methods.
   */
  /**@{*/
#if defined(SWIG) || defined(IMP_DOXYGEN)
  //! Add a single const ParticleIndexQuad& to the container.
  void add(const ParticleIndexQuad& vt);

  //! Add ParticleIndexQuads to the container.
  void add(const ParticleIndexQuads &c);

  //! Set the contents of the container to the given ParticleIndexQuads.
  void set(ParticleIndexQuads cp);

  //! Clear the contents of the container.
  void clear();
#endif

/**@}*/
#ifdef SWIG
  ParticleIndexQuads get_indexes() const;
  ParticleIndexQuads get_range_indexes() const;
  ModelObjectsTemp do_get_inputs() const;
  void do_apply(const QuadModifier *sm) const;
  void do_apply_moved(const QuadModifier *sm,
                      const ParticleIndexes &moved_pis,
                      const ParticleIndexes &reset_pis) const;
  ParticleIndexes get_all_possible_indexes() const;
#endif
  IMP_OBJECT_METHODS(DynamicListQuadContainer);
};

IMP_OBJECTS(DynamicListQuadContainer, DynamicListQuadContainers);

IMPCONTAINER_END_NAMESPACE

#endif /* IMPCONTAINER_DYNAMIC_LIST_QUAD_CONTAINER_H */
