12 #ifndef IMPKERNEL_PAIR_CONTAINER_H
13 #define IMPKERNEL_PAIR_CONTAINER_H
15 #include <IMP/kernel_config.h>
16 #include "internal/IndexingIterator.h"
19 #include "internal/container_helpers.h"
29 #include <cereal/access.hpp>
30 #include <cereal/types/base_class.hpp>
32 IMPKERNEL_BEGIN_NAMESPACE
73 if (get_provides_access())
77 if (contents_hash_ != nhash || !cache_initialized_) {
78 contents_hash_ = nhash;
79 cache_initialized_ =
true;
80 get_indexes_in_place(contents_cache_);
82 return contents_cache_;
98 return IMP::internal::get_particle(get_model(),
get_indexes());
102 return IMP::internal::get_particle(get_model(),
get_indexes()[i]);
108 unsigned int get_number()
const {
return get_indexes().size(); }
110 bool get_provides_access()
const;
115 template <
class Functor>
116 Functor for_each(Functor f) {
119 return std::for_each(vs.begin(), vs.end(), f);
127 std::string name =
"PairContainer %1%");
130 virtual void do_apply(
const PairModifier *sm)
const = 0;
138 virtual bool do_get_provides_access()
const {
return false; }
140 #if !defined(SWIG) && !defined(IMP_DOXYGEN)
152 mutable std::size_t contents_hash_;
154 mutable bool cache_initialized_;
156 friend class cereal::access;
158 template<
class Archive>
void serialize(Archive &ar) {
159 ar(cereal::base_class<Container>(
this));
161 if (std::is_base_of<cereal::detail::InputArchiveBase, Archive>::value) {
163 cache_initialized_ =
false;
173 #if !defined(SWIG) && !defined(IMP_DOXYGEN)
207 void set_name_if_default(std::string name);
210 IMPKERNEL_END_NAMESPACE
A shared container for Pairs.
Control display of deprecation information.
Macros to help with reference counting.
A class to store a fixed array of same-typed values.
Class for adding derivatives from restraints to the model.
std::size_t get_contents_hash() const
A smart pointer to a reference counted object.
A base class for modifiers of ParticlePairsTemp.
Class for storing model, its restraints, constraints, and particles.
#define IMP_UNUSED(variable)
Various general useful macros for IMP.
An exception for a request for an invalid member of a container.
Classes to handle individual model particles. (Note that implementation of inline functions is in int...
Abstract base class for containers of particles.
#define IMP_THROW(message, exception_name)
Throw an exception with a message.
A nullptr-initialized pointer to an IMP Object.
Helper macros for throwing and handling exceptions.
#define IMP_REF_COUNTED_NONTRIVIAL_DESTRUCTOR(Name)
ParticleIndexes get_indexes(const ParticlesTemp &ps)
Get the indexes from a list of particles.
Abstract class for containers of particles.
PairContainerAdaptor(IMP::internal::PointerBase< C > c)