20 #ifndef EQFABRIC_CONFIG_H 21 #define EQFABRIC_CONFIG_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 >
40 typedef std::vector< N* >
Nodes;
45 EQFABRIC_INL lunchbox::RefPtr< S >
getServer();
48 EQFABRIC_INL lunchbox::RefPtr< const S >
getServer()
const;
63 EQFABRIC_INL uint32_t getTimeout()
const;
69 const Nodes&
getNodes()
const {
return _nodes; }
71 EQFABRIC_INL N* findAppNode();
72 EQFABRIC_INL
const N* findAppNode()
const;
81 EQFABRIC_INL VisitorResult
accept( V& visitor );
84 EQFABRIC_INL VisitorResult
accept( V& visitor )
const;
87 template<
typename T > EQFABRIC_INL T*
find(
const uint128_t&
id );
90 template<
typename T >
91 EQFABRIC_INL
const T*
find(
const uint128_t&
id )
const;
94 template<
typename T >
95 EQFABRIC_INL T*
find(
const std::string& name );
98 template<
typename T >
99 EQFABRIC_INL
const T*
find(
const std::string& name )
const;
102 O* getObserver(
const ObserverPath& path );
105 L* getLayout(
const LayoutPath& path );
108 CV* getCanvas(
const CanvasPath& path );
111 template<
typename T >
void find(
const uint128_t&
id, T** result );
114 template<
typename T >
void find(
const std::string& name,
115 const T** result )
const;
118 virtual void updateCanvas( CV* ) { }
121 virtual void exitCanvas( CV* ) { }
134 FATTR_ALL = FATTR_LAST + 5
142 IATTR_ALL = IATTR_LAST + 5
146 void setFAttribute(
const FAttribute attr,
const float value )
147 { _fAttributes[attr] = value; }
149 void setIAttribute(
const IAttribute attr,
const int32_t value )
150 { _iAttributes[attr] = value; }
154 {
return _fAttributes[attr]; }
158 {
return _iAttributes[attr]; }
161 static const std::string& getFAttributeString(
const FAttribute attr );
163 static const std::string& getIAttributeString(
const IAttribute attr );
180 virtual void setLatency(
const uint32_t latency );
186 EQFABRIC_INL
virtual void restore();
189 virtual void output( std::ostream& )
const {}
190 void create( O** observer );
191 void release( O* observer );
192 void create( L** layout );
193 void release( L* layout );
194 void create( CV** canvas );
195 void release( CV* canvas );
196 void create( N** node );
197 void release( N* node );
201 EQFABRIC_INL
explicit Config( lunchbox::RefPtr< S > parent );
204 EQFABRIC_INL
virtual ~Config();
207 EQFABRIC_INL
virtual void attach(
const uint128_t&
id,
208 const uint32_t instanceID );
211 EQFABRIC_INL
virtual void serialize( co::DataOStream& os,
212 const uint64_t dirtyBits );
213 EQFABRIC_INL
virtual void deserialize( co::DataIStream& is,
214 const uint64_t dirtyBits );
215 EQFABRIC_INL
virtual void notifyDetach();
218 virtual void _removeChild(
const uint128_t& )
221 template<
class,
class,
class,
class,
class,
class >
224 void setAppNodeID(
const co::NodeID& nodeID );
226 const co::NodeID& getAppNodeID()
const {
return _appNodeID; }
229 EQFABRIC_INL EventOCommand sendError( co::NodePtr node,
230 const uint32_t event,
231 const Error& error );
233 virtual void changeLatency(
const uint32_t ) { }
234 virtual bool mapViewObjects()
const {
return false; }
235 virtual bool mapNodeObjects()
const {
return false; }
238 virtual VisitorResult _acceptCompounds( V& )
239 {
return TRAVERSE_CONTINUE; }
241 virtual VisitorResult _acceptCompounds( V& )
const 242 {
return TRAVERSE_CONTINUE; }
243 template<
class C2,
class V2 >
244 friend VisitorResult _acceptImpl( C2*, V2& );
246 N* _findNode(
const uint128_t&
id );
249 EQFABRIC_INL
virtual uint128_t commit(
const uint32_t incarnation =
255 lunchbox::RefPtr< S > _server;
258 float _fAttributes[FATTR_ALL];
261 int32_t _iAttributes[IATTR_ALL];
264 Observers _observers;
276 co::NodeID _appNodeID;
280 BackupData() : latency( 1 ) {}
292 DIRTY_MEMBER = Object::DIRTY_CUSTOM << 0,
293 DIRTY_LATENCY = Object::DIRTY_CUSTOM << 1,
294 DIRTY_ATTRIBUTES = Object::DIRTY_CUSTOM << 2,
295 DIRTY_NODES = Object::DIRTY_CUSTOM << 3,
296 DIRTY_OBSERVERS = Object::DIRTY_CUSTOM << 4,
297 DIRTY_LAYOUTS = Object::DIRTY_CUSTOM << 5,
298 DIRTY_CANVASES = Object::DIRTY_CUSTOM << 6,
300 DIRTY_MEMBER | DIRTY_ATTRIBUTES | DIRTY_OBSERVERS |
301 DIRTY_LAYOUTS | DIRTY_CANVASES | DIRTY_NODES | DIRTY_LATENCY
305 virtual uint64_t getRedistributableBits()
const 306 {
return DIRTY_CONFIG_BITS; }
308 template<
class,
class >
friend class Observer;
309 void _addObserver( O* observer );
310 bool _removeObserver( O* observer );
312 template<
class,
class,
class >
friend class Layout;
313 void _addLayout( L* layout );
314 bool _removeLayout( L* layout );
316 template<
class,
class,
class,
class >
friend class Canvas;
317 void _addCanvas( CV* canvas );
318 bool _removeCanvas( CV* canvas );
320 template<
class,
class,
class,
class >
friend class Node;
321 void _addNode( N* node );
322 EQFABRIC_INL
bool _removeNode( N* node );
324 typedef co::CommandFunc< Config< S, C, O, L, CV, N, V > > CmdFunc;
325 bool _cmdNewLayout( co::ICommand& command );
326 bool _cmdNewCanvas( co::ICommand& command );
327 bool _cmdNewObserver( co::ICommand& command );
328 bool _cmdNewEntityReply( co::ICommand& command );
331 template<
class S,
class C,
class O,
class L,
class CV,
class N,
class V >
332 EQFABRIC_INL std::ostream&
operator << ( std::ostream& os,
336 #endif // EQFABRIC_CONFIG_H std::vector< L * > Layouts
A vector of layouts.
const Observers & getObservers() const
EQFABRIC_INL VisitorResult accept(V &visitor)
Perform a depth-first traversal of this config.
Defines export visibility macros for library EqualizerFabric.
std::vector< CV * > Canvases
A vector of canvases.
Base data transport class for observers.
const Nodes & getNodes() const
DirtyBits
The changed parts of the object since the last pack().
EQFABRIC_INL T * find(const uint128_t &id)
Base co::Node class for a server.
float getFAttribute(const FAttribute attr) const
std::vector< N * > Nodes
A vector of nodes.
A wrapper for error codes to allow intuitive bool-like usage.
Base data transport class for nodes.
const Layouts & getLayouts() const
const Canvases & getCanvases() const
int32_t getIAttribute(const IAttribute attr) const
The Equalizer client library.
The default interocular distance in meters.
std::ostream & operator<<(std::ostream &os, const AxisEvent &event)
Print the axis event to the given output stream.
The version of the file loaded.
A canvas represents a logical 2D projection surface.
IAttribute
Integer attributes.
EQFABRIC_INL lunchbox::RefPtr< S > getServer()
Base data transport class for layouts.
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.