BEAST/BSE - Better Audio System and Sound Engine
0.8.2
|
00001 // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html 00002 #ifndef __BSE_ENGINE_SCHEDULE_H__ 00003 #define __BSE_ENGINE_SCHEDULE_H__ 00004 00005 #include <bse/bseenginenode.hh> 00006 00007 G_BEGIN_DECLS 00008 00009 typedef struct 00010 { 00011 EngineNode *last; /* resolve node */ 00012 SfiRing *nodes; /* of type EngineNode* */ 00013 guint seen_deferred_node : 1; 00014 } EngineCycle; 00015 typedef struct 00016 { 00017 guint leaf_level; 00018 SfiRing *cycles; /* of type Cycle* */ 00019 SfiRing *cycle_nodes; /* of type EngineNode* */ 00020 } EngineQuery; 00021 struct _EngineSchedule 00022 { 00023 guint n_items; 00024 guint leaf_levels; 00025 SfiRing **nodes; /* EngineNode* */ 00026 SfiRing **cycles; /* SfiRing* */ 00027 guint secured : 1; 00028 guint in_pqueue : 1; 00029 guint cur_leaf_level; 00030 SfiRing *cur_node; 00031 SfiRing *cur_cycle; 00032 SfiRing *vnodes; /* virtual modules */ 00033 }; 00034 #define BSE_ENGINE_SCHEDULE_NONPOPABLE(schedule) ((schedule)->cur_leaf_level >= (schedule)->leaf_levels) 00035 00036 00037 /* --- MasterThread --- */ 00038 EngineSchedule* _engine_schedule_new (void); 00039 void _engine_schedule_clear (EngineSchedule *schedule); 00040 void _engine_schedule_destroy (EngineSchedule *schedule); 00041 void _engine_schedule_consumer_node (EngineSchedule *schedule, 00042 EngineNode *node); 00043 void _engine_schedule_secure (EngineSchedule *schedule); 00044 EngineNode* _engine_schedule_pop_node (EngineSchedule *schedule); 00045 SfiRing* _engine_schedule_pop_cycle (EngineSchedule *schedule); 00046 void _engine_schedule_restart (EngineSchedule *schedule); 00047 void _engine_schedule_unsecure (EngineSchedule *schedule); 00048 00049 G_END_DECLS 00050 00051 #endif /* __BSE_ENGINE_SCHEDULE_H__ */