src/Sim/Dependency/Dependency.h

説明を見る。
00001 // 
00002 // Copyright (c) 2005-2008 Kenichi Watanabe.
00003 // Copyright (c) 2005-2008 Yasuhiro Watari.
00004 // Copyright (c) 2005-2008 Hironori Ichibayashi.
00005 // Copyright (c) 2008-2009 Kazuo Horio.
00006 // Copyright (c) 2009-2013 Naruki Kurata.
00007 // Copyright (c) 2005-2013 Ryota Shioya.
00008 // Copyright (c) 2005-2013 Masahiro Goshima.
00009 // 
00010 // This software is provided 'as-is', without any express or implied
00011 // warranty. In no event will the authors be held liable for any damages
00012 // arising from the use of this software.
00013 // 
00014 // Permission is granted to anyone to use this software for any purpose,
00015 // including commercial applications, and to alter it and redistribute it
00016 // freely, subject to the following restrictions:
00017 // 
00018 // 1. The origin of this software must not be misrepresented; you must not
00019 // claim that you wrote the original software. If you use this software
00020 // in a product, an acknowledgment in the product documentation would be
00021 // appreciated but is not required.
00022 // 
00023 // 2. Altered source versions must be plainly marked as such, and must not be
00024 // misrepresented as being the original software.
00025 // 
00026 // 3. This notice may not be removed or altered from any source
00027 // distribution.
00028 // 
00029 // 
00030 
00031 
00032 #ifndef SIM_DEPENDENCY_DEPENDENCY_H
00033 #define SIM_DEPENDENCY_DEPENDENCY_H
00034 
00035 #include "Types.h"
00036 
00037 #include "Sim/Op/OpArray/OpArray.h"
00038 
00039 
00040 namespace Onikiri {
00041 
00042     /* 
00043     W\NX
00044     */
00045     class Dependency 
00046     {
00047     public:
00048         typedef pool_list<OpIterator> ConsumerListType;
00049         typedef 
00050             ConsumerListType::iterator
00051             ConsumerListIterator;
00052         typedef 
00053             ConsumerListType::const_iterator
00054             ConsumerListConstIterator;
00055 
00056 
00057         Dependency();
00058         Dependency(int numScheduler);
00059         virtual ~Dependency();
00060 
00061         void AddConsumer( OpIterator op );
00062         void RemoveConsumer( OpIterator op );
00063 
00064         void Set();
00065         void Reset();
00066 
00067         void Clear();
00068 
00069         // accessors
00070         const ConsumerListType& GetConsumers() const
00071         {
00072             return m_consumer;
00073         }
00074 
00075         bool GetReadiness( const int index) const
00076         {
00077             return m_readiness.test( index );
00078         }
00079 
00080         bool IsFullyReady() const
00081         {
00082             for( size_t i = 0; i < m_readiness.size(); ++i ){
00083                 if( !m_readiness.test(i) )
00084                     return false;
00085             }
00086             return true;
00087         }
00088 
00089         void SetReadiness( const bool readiness, const int index )
00090         {
00091             m_readiness.set( index, readiness );
00092         }
00093 
00094     protected:
00095 
00096         // XPW[ ready tO
00097         boost::dynamic_bitset<
00098             u32, boost::fast_pool_allocator<u32> 
00099         > m_readiness;  
00100 
00101         // 
00102         ConsumerListType    m_consumer;
00103     };
00104 
00105     enum DependencySetMaxSize { MAX_DEPENDENCY_SET_SIZE = 1024 };
00106     class DependencySet :
00107         public fixed_sized_buffer< Dependency*, MAX_DEPENDENCY_SET_SIZE, DependencySetMaxSize >
00108         //public pool_vector< Dependency* >
00109     {
00110     public:
00111 
00112         // Returns whether 'dep' is included in this set or not.
00113         bool IsIncluded( const Dependency* dep ) const
00114         {
00115             for( const_iterator i = begin(); i != end(); ++i ){
00116                 if( *i == dep ){
00117                     return true;
00118                 }
00119             }
00120             return false;
00121         }
00122     };
00123 
00124 };
00125 
00126 #endif // SIM_DEPENDENCY_DEPENDENCY_H
00127 

Onikiri2に対してTue Jun 18 14:34:22 2013に生成されました。  doxygen 1.4.7