/*! \file RandObjLinker.h \brief Class definitions for RandObjLinker RandObjLinker links (creates) a RandGenerator for each supplied Object (usually its a particle system). Tests/Operators that use randomization have this an instance of this class as a member. A Test/Operator may serve several particle systems. For each particle system the Test/Operator has to keep a dedicated copy of RandGenerator. This copy of RandGenerator is used exclusively for the designated particle system. This scheme allows not to mix randomization for different particle systems. */ /********************************************************************** *< CREATED BY: Oleg Bayborodin HISTORY: created 12-04-2001 *> Copyright (c) 2001, All Rights Reserved. **********************************************************************/ #ifndef _RANDOBJLINKER_H #define _RANDOBJLINKER_H #include "max.h" #include "PFExport.h" #include "RandGenerator.h" class RandObjLinker { public: PFExport RandObjLinker(); PFExport ~RandObjLinker(); // to initialize random generator for a particle container "pCont" PFExport bool Init(IObject* pCont, int randomSeed); // to release random generator for a particle container "pCont" PFExport void Release(IObject* pCont); // to get a random generator associated with a particle container "pCont" PFExport RandGenerator* GetRandGenerator(IObject* pCont) const; // to deallocate all random generators and all data PFExport void FreeAll(); private: bool HasPContainer(IObject* pCont) const; bool AddPContainer(IObject* pCont, int randomSeed); // const access to class members int num() const { return m_num; } const Tab& particleContainers() const { return m_particleContainers; } IObject* particleContainer(int index) const { return m_particleContainers[index]; } const Tab& randGenerators() const { return m_randGenerators; } RandGenerator* randGenerator(int index) const { return m_randGenerators[index]; } // access to class members int& _num() { return m_num; } Tab& _particleContainers() { return m_particleContainers; } IObject*& _particleContainer(int index) { return m_particleContainers[index]; } Tab& _randGenerators() { return m_randGenerators; } RandGenerator*& _randGenerator(int index) { return m_randGenerators[index]; } protected: int m_num; Tab m_particleContainers; Tab m_randGenerators; }; #endif // _RANDOBJLINKER_H_