8 #ifndef IMPKERNEL_REFINER_H
9 #define IMPKERNEL_REFINER_H
11 #include <IMP/kernel_config.h>
14 #include "internal/IndexingIterator.h"
19 IMPKERNEL_BEGIN_NAMESPACE
22 class DerivativeAccumulator;
47 Refiner(std::string name =
"Refiner %1%",
bool is_by_ref =
false);
84 "This refiner does not support"
85 " get_refined_indexes_by_ref()",
99 return get_refined(a)[i];
105 return get_refined(a).size();
115 typedef internal::IndexingIterator<Accessor> RefinedIterator;
116 RefinedIterator refined_begin(
Particle *a)
const;
117 RefinedIterator refined_end(
Particle *a)
const;
124 #if !defined(SWIG) && !defined(IMP_DOXYGEN)
125 struct Refiner::Accessor {
131 typedef Particle *result_type;
132 Particle *operator()(
unsigned int i)
const {
return r_->get_refined(p_, i); }
133 bool operator==(
const Accessor &o)
const {
return p_ == o.p_ && r_ == o.r_; }
137 inline Refiner::RefinedIterator Refiner::refined_begin(Particle *a)
const {
138 return RefinedIterator(Accessor(a,
this), 0);
140 inline Refiner::RefinedIterator Refiner::refined_end(Particle *a)
const {
141 return RefinedIterator(Accessor(a,
this), get_number_of_refined(a));
144 IMPKERNEL_END_NAMESPACE
Control display of deprecation information.
virtual Particle * get_refined(Particle *a, unsigned int i) const
Get the ith refined particle.
Base class for objects that take particle arguments and read from them.
A more IMP-like version of the std::vector.
Class for storing model, its restraints, constraints, and particles.
virtual bool get_can_refine(Particle *) const
Return true if this refiner can refine that particle.
Common base class for heavy weight IMP objects.
#define IMP_UNUSED(variable)
Classes used in the construction of ModelObjects.
virtual unsigned int get_number_of_refined(Particle *a) const
Classes to handle individual model particles. (Note that implementation of inline functions is in int...
#define IMP_OBJECTS(Name, PluralName)
Define the types for storing lists of object pointers.
Exception definitions and assertions.
Abstract class to implement hierarchical methods.
Class to handle individual particles of a Model object.
bool get_is_by_ref_supported()
#define IMP_ALWAYS_CHECK(condition, message, exception_name)
Throw an exception if a check fails.
An exception for an invalid value being passed to IMP.