22 #include <odinseq/seqvec.h>
23 #include <odinseq/seqdriver.h>
24 #include <odinseq/seqtree.h>
145 SeqCounter(
const STD_string& object_label =
"unnamedSeqCounter");
174 int get_counter()
const {
return counter;}
175 bool counter_is_active()
const {
return counter!=-1;}
176 void init_counter(
unsigned int start=0)
const;
177 void increment_counter()
const {counter++;}
178 void disable_counter()
const {counter=-1;}
181 bool prep_veciterations()
const;
187 mutable STD_list<const SeqVector*>::const_iterator veciter;
188 STD_list<const SeqVector*>::const_iterator get_vecbegin()
const {
return vectors.
get_const_begin();}
189 STD_list<const SeqVector*>::const_iterator get_vecend()
const {
return vectors.
get_const_end();}
190 unsigned int n_vectors()
const {
return vectors.
size();}
195 void clear_vectorlist() {vectors.
clear();}
210 virtual bool unroll_program(
programContext& context)
const {
return true;}
212 void set_vechandler_for_all()
const;
unsigned int size() const
constiter get_const_end() const
constiter get_const_begin() const
virtual double get_postduration_inloop() const =0
virtual double get_preduration_inloop() const =0
virtual STD_string get_program_head(programContext &context, const STD_string &loopkernel, unsigned int times) const =0
virtual double get_postduration() const =0
virtual bool prep_driver()=0
virtual STD_string get_program_tail(programContext &context, const STD_string &loopkernel, unsigned int times) const =0
virtual void update_driver(const SeqCounter *counter, const SeqObjList *seqlist, const List< SeqVector, const SeqVector *, const SeqVector & > *vectors) const =0
virtual void pre_vecprepevent(eventContext &context) const =0
virtual STD_string get_program_head_unrolled(programContext &context, unsigned int index) const =0
virtual bool create_program(programContext &context, const STD_string &loopkernel) const =0
virtual void outdate_cache() const =0
virtual STD_string get_program_iterator(programContext &context) const =0
virtual bool unroll_program(const SeqCounter *counter, const SeqObjList *seqlist, const List< SeqVector, const SeqVector *, const SeqVector & > *vectors, programContext &context) const =0
virtual void post_vecprepevent(eventContext &context, int repcounter) const =0
virtual double get_preduration() const =0
virtual SeqCounterDriver * clone_driver() const =0
SeqCounter(const SeqCounter &sc)
virtual int get_times() const
SeqCounter(const STD_string &object_label="unnamedSeqCounter")
virtual void add_vector(const SeqVector &seqvector)
SeqCounter & operator=(const SeqCounter &sc)
Container for sequence objects.