//C++ #ifndef COMPCOMBINER_H #define COMPCOMBINER_H 1 #include #include #include #include #include class CompCombiner; class Model; class Component; class ComponentGroup; class SumComponent; class CombineIterator { public: friend class CompCombiner; CombineIterator(const CombineIterator &right); CombineIterator & operator=(const CombineIterator &right); CombineIterator& operator ++ (); // Equality operators are currently valid only for comparing 'end' condition. bool operator == (const CombineIterator& right) const; bool operator != (const CombineIterator& right) const; ~CombineIterator(); private: // General constructor CombineIterator(const CompCombiner* combiner); // Constructor for creating 'empty' end iterator. CombineIterator(); struct CompLocInfo { CompLocInfo(ComponentListConstIterator itComp, size_t iComp) : m_itComp(itComp), m_iComp(iComp) {} ComponentListConstIterator m_itComp; size_t m_iComp; }; void initForComponentGroup(); void initForSubgroup(); void postfixOperatorLocs (size_t skipIdx, size_t nSkip); void setToEnd(); const CompCombiner* m_combiner; const size_t m_nGroups; size_t m_iCurModel; // These vectors will all be sized to m_nGroups. std::vector::const_iterator> m_itCurCompGroups; std::vector m_iCalcSubgroups; std::vector > > m_subgroupLocs; std::vector m_curCompLocs; std::vector > m_compStacks; std::vector m_totalAccumulated; std::vector m_starLocs; size_t m_iCurStarLoc; // Members for handling parentheses sum. std::vector m_parenFluxes; // also sized to m_nGroups size_t m_insIdx; size_t m_nSkip; // Member for calculating individual component sources // (ie. eqwidth, setplot add). // Vector elements are: m_indivStacks[iModel_obj][iAdditiveSources]. // This is not to be used unless CompCombiner's doStoreSources = True. typedef std::vector > > AddCompStacks; AddCompStacks m_indivStacks; }; class CompCombiner { public: CompCombiner(const std::vector& models, bool storeSources=false); ~CompCombiner(); typedef CombineIterator iterator; iterator begin(); iterator end(); const std::vector& models() const; bool doStoreSources() const; private: CompCombiner(const CompCombiner &right); CompCombiner & operator=(const CompCombiner &right); const std::vector m_models; const bool m_doStoreSources; }; inline const std::vector& CompCombiner::models() const { return m_models; } inline bool CompCombiner::doStoreSources() const { return m_doStoreSources; } #endif