20 #ifndef EQFABRIC_CONFIG_H
21 #define EQFABRIC_CONFIG_H
23 #include <eq/fabric/api.h>
24 #include <eq/fabric/types.h>
25 #include <eq/fabric/object.h>
32 template<
class S,
class C,
class O,
class L,
class CV,
class N,
class V >
39 typedef std::vector< N* >
Nodes;
44 EQFABRIC_INL lunchbox::RefPtr< S >
getServer();
47 EQFABRIC_INL lunchbox::RefPtr< const S >
getServer()
const;
62 EQFABRIC_INL uint32_t getTimeout()
const;
70 EQFABRIC_INL N* findAppNode();
71 EQFABRIC_INL
const N* findAppNode()
const;
80 EQFABRIC_INL VisitorResult
accept( V& visitor );
83 EQFABRIC_INL VisitorResult
accept( V& visitor )
const;
86 template<
typename T > EQFABRIC_INL T*
find(
const uint128_t&
id );
89 template<
typename T >
90 EQFABRIC_INL
const T*
find(
const uint128_t&
id )
const;
93 template<
typename T >
94 EQFABRIC_INL T*
find(
const std::string& name );
97 template<
typename T >
98 EQFABRIC_INL
const T*
find(
const std::string& name )
const;
101 O* getObserver(
const ObserverPath& path );
104 L* getLayout(
const LayoutPath& path );
107 CV* getCanvas(
const CanvasPath& path );
110 template<
typename T >
void find(
const uint128_t&
id, T** result );
113 template<
typename T >
void find(
const std::string& name,
114 const T** result )
const;
117 virtual void updateCanvas( CV* ) { }
120 virtual void exitCanvas( CV* ) { }
133 FATTR_ALL = FATTR_LAST + 5
141 IATTR_ALL = IATTR_LAST + 5
145 void setFAttribute(
const FAttribute attr,
const float value )
146 { _fAttributes[attr] = value; }
148 void setIAttribute(
const IAttribute attr,
const int32_t value )
149 { _iAttributes[attr] = value; }
153 {
return _fAttributes[attr]; }
157 {
return _iAttributes[attr]; }
160 static const std::string& getFAttributeString(
const FAttribute attr );
162 static const std::string& getIAttributeString(
const IAttribute attr );
179 virtual void setLatency(
const uint32_t latency );
185 EQFABRIC_INL
virtual void restore();
188 virtual void output( std::ostream& )
const {}
189 void create( O** observer );
190 void release( O* observer );
191 void create( L** layout );
192 void release( L* layout );
193 void create( CV** canvas );
194 void release( CV* canvas );
195 void create( N** node );
196 void release( N* node );
200 EQFABRIC_INL
Config( lunchbox::RefPtr< S > parent );
203 EQFABRIC_INL
virtual ~
Config();
206 EQFABRIC_INL
virtual void attach(
const uint128_t&
id,
207 const uint32_t instanceID );
210 EQFABRIC_INL
virtual void serialize( co::DataOStream& os,
211 const uint64_t dirtyBits );
212 EQFABRIC_INL
virtual void deserialize( co::DataIStream& is,
213 const uint64_t dirtyBits );
214 EQFABRIC_INL
virtual void notifyDetach();
217 virtual void _removeChild(
const uint128_t& )
220 template<
class,
class,
class,
class,
class,
class >
223 void setAppNodeID(
const co::NodeID& nodeID );
225 const co::NodeID& getAppNodeID()
const {
return _appNodeID; }
228 EQFABRIC_INL EventOCommand sendError( co::NodePtr node,
229 const uint32_t event,
230 const Error& error );
232 virtual void changeLatency(
const uint32_t ) { }
233 virtual bool mapViewObjects()
const {
return false; }
234 virtual bool mapNodeObjects()
const {
return false; }
237 virtual VisitorResult _acceptCompounds( V& )
238 {
return TRAVERSE_CONTINUE; }
240 virtual VisitorResult _acceptCompounds( V& )
const
241 {
return TRAVERSE_CONTINUE; }
242 template<
class C2,
class V2 >
243 friend VisitorResult _acceptImpl( C2*, V2& );
245 N* _findNode(
const uint128_t&
id );
248 EQFABRIC_INL
virtual uint128_t commit(
const uint32_t incarnation =
254 lunchbox::RefPtr< S > _server;
257 float _fAttributes[FATTR_ALL];
260 int32_t _iAttributes[IATTR_ALL];
275 co::NodeID _appNodeID;
279 BackupData() : latency( 1 ) {}
291 DIRTY_MEMBER = Object::DIRTY_CUSTOM << 0,
292 DIRTY_LATENCY = Object::DIRTY_CUSTOM << 1,
293 DIRTY_ATTRIBUTES = Object::DIRTY_CUSTOM << 2,
294 DIRTY_NODES = Object::DIRTY_CUSTOM << 3,
295 DIRTY_OBSERVERS = Object::DIRTY_CUSTOM << 4,
296 DIRTY_LAYOUTS = Object::DIRTY_CUSTOM << 5,
297 DIRTY_CANVASES = Object::DIRTY_CUSTOM << 6,
299 DIRTY_MEMBER | DIRTY_ATTRIBUTES | DIRTY_OBSERVERS |
300 DIRTY_LAYOUTS | DIRTY_CANVASES | DIRTY_NODES | DIRTY_LATENCY
304 virtual uint64_t getRedistributableBits()
const
305 {
return DIRTY_CONFIG_BITS; }
307 template<
class,
class >
friend class Observer;
308 void _addObserver( O* observer );
309 bool _removeObserver( O* observer );
311 template<
class,
class,
class >
friend class Layout;
312 void _addLayout( L* layout );
313 bool _removeLayout( L* layout );
315 template<
class,
class,
class,
class >
friend class Canvas;
316 void _addCanvas( CV* canvas );
317 bool _removeCanvas( CV* canvas );
319 template<
class,
class,
class,
class >
friend class Node;
320 void _addNode( N* node );
321 EQFABRIC_INL
bool _removeNode( N* node );
323 typedef co::CommandFunc< Config< S, C, O, L, CV, N, V > > CmdFunc;
324 bool _cmdNewLayout( co::ICommand& command );
325 bool _cmdNewCanvas( co::ICommand& command );
326 bool _cmdNewObserver( co::ICommand& command );
327 bool _cmdNewEntityReply( co::ICommand& command );
330 template<
class S,
class C,
class O,
class L,
class CV,
class N,
class V >
331 EQFABRIC_INL std::ostream& operator << ( std::ostream& os,
332 const Config< S, C, O, L, CV, N, V >& config );
335 #endif // EQFABRIC_CONFIG_H
std::vector< L * > Layouts
A vector of layouts.
const Observers & getObservers() const
IAttribute
Possible values for integer attributes.
A configuration is a visualization session driven by an application.
EQFABRIC_INL VisitorResult accept(V &visitor)
Perform a depth-first traversal of this config.
std::vector< CV * > Canvases
A vector of canvases.
const Nodes & getNodes() const
EQFABRIC_INL T * find(const uint128_t &id)
float getFAttribute(const FAttribute attr) const
std::vector< N * > Nodes
A vector of nodes.
const Layouts & getLayouts() const
const Canvases & getCanvases() const
int32_t getIAttribute(const IAttribute attr) const
The default interocular distance in meters.
The version of the file loaded.
IAttribute
Integer attributes.
EQFABRIC_INL lunchbox::RefPtr< S > getServer()
Base data class for a configuration.
Internal base class for all distributed, inheritable Equalizer objects.
FAttribute
Floating-point attributes.
std::vector< O * > Observers
A vector of observers.
virtual void setLatency(const uint32_t latency)
Set the maximum accepted latency for this config.
uint32_t getLatency() const
Tolerate resource failures.