8 #ifndef IMPKERNEL_DECORATOR_H
9 #define IMPKERNEL_DECORATOR_H
11 #include <IMP/kernel_config.h>
19 #include "internal/utility.h"
23 #include <cereal/access.hpp>
25 IMPKERNEL_BEGIN_NAMESPACE
26 class ParticleAdaptor;
125 friend class cereal::access;
126 template<
class Archive>
void serialize(Archive &ar) {
129 if (std::is_base_of<cereal::detail::OutputArchiveBase, Archive>::value) {
130 uint32_t model_id = get_model_id();
135 set_model_from_id(model_id);
141 void set_model_from_id(uint32_t model_id);
142 uint32_t get_model_id()
const;
145 if (o < get_particle())
147 else if (o > get_particle())
155 : model_(m), pi_(pi), is_valid_(
true) {}
168 bool __eq__(
Object* o)
const {
return operator==(o); }
169 bool __ne__(
Object* o)
const {
return operator!=(o); }
170 bool __lt__(
Object* o)
const {
return operator<(o); }
171 bool __gt__(
Object* o)
const {
return operator>(o); }
172 bool __ge__(
Object* o)
const {
return operator>=(o); }
173 bool __le__(
Object* o)
const {
return operator<=(o); }
177 bool operator==(
Object* o)
const {
return (
compare(o) == 0); }
178 bool operator!=(
Object* o)
const {
return (
compare(o) != 0); }
181 bool operator>=(
Object* o)
const {
return !(
compare(o) < 0); }
182 bool operator<=(
Object* o)
const {
return !(
compare(o) > 0); }
199 "Particle " << pi_ <<
" is no longer part of the model.");
200 return model_->get_particle(pi_);
205 operator Particle*()
const {
return get_particle(); }
206 Particle* operator->()
const {
return get_particle(); }
207 operator ParticleIndex()
const {
return get_particle_index(); }
227 #if !defined(IMP_DOXYGEN) && !defined(SWIG)
228 typedef std::false_type DecoratorHasTraits;
234 IMPKERNELEXPORT
void check_particle(Model *m,
ParticleIndex pi);
237 IMPKERNEL_END_NAMESPACE
ParticleIndex get_particle_index() const
Returns the particle index decorated by this decorator.
Smart pointer to Object-derived classes that does not refcount.
#define IMP_HASHABLE_INLINE(name, hashret)
Model * get_model() const
Returns the Model containing the particle.
Storage of a model, its restraints, constraints and particles.
Index< ParticleIndexTag > ParticleIndex
Class for storing model, its restraints, constraints, and particles.
Base class for a simple primitive-like type.
Common base class for heavy weight IMP objects.
int compare(const VectorD< D > &a, const VectorD< D > &b)
lexicographic comparison of two vectors
Various general useful macros for IMP.
A weak pointer to an Object or RefCountedObject.
A base class for constraints.
A class for storing lists of IMP items.
Various general useful functions for IMP.
bool get_is_valid() const
Returns true if constructed with a non-default constructor.
Particle * get_particle() const
Returns the particle decorated by this decorator.
Interface to specialized Particle types (e.g. atoms)
Classes to handle individual model particles. (Note that implementation of inline functions is in int...
A shared base class to help in debugging and things.
Base class for a simple primitive-like type.
Class to handle individual particles of a Model object.
#define IMP_USAGE_CHECK(expr, message)
A runtime test for incorrect usage of a class or method.