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);
85 "This refiner does not support"
86 " get_refined_indexes_by_ref()",
100 return get_refined(a)[i];
106 return get_refined(a).size();
116 typedef internal::IndexingIterator<Accessor> RefinedIterator;
117 RefinedIterator refined_begin(
Particle *a)
const;
118 RefinedIterator refined_end(
Particle *a)
const;
125 #if !defined(SWIG) && !defined(IMP_DOXYGEN)
126 struct Refiner::Accessor {
132 typedef Particle *result_type;
133 Particle *operator()(
unsigned int i)
const {
return r_->get_refined(p_, i); }
134 bool operator==(
const Accessor &o)
const {
return p_ == o.p_ && r_ == o.r_; }
138 inline Refiner::RefinedIterator Refiner::refined_begin(Particle *a)
const {
139 return RefinedIterator(Accessor(a,
this), 0);
141 inline Refiner::RefinedIterator Refiner::refined_end(Particle *a)
const {
142 return RefinedIterator(Accessor(a,
this), get_number_of_refined(a));
145 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.
Helper macros for throwing and handling exceptions.
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.