[beast/devel: 12/15] BSE: compile bseengine, bseenginemaster, bseengineschedule and bseengineutils as C++



commit 79464841948c030bc87dcccc38dd8372f344498e
Author: Tim Janik <timj gnu org>
Date:   Mon Dec 17 02:55:16 2012 +0100

    BSE: compile bseengine, bseenginemaster, bseengineschedule and bseengineutils as C++

 bse/Makefile.am                                   |    2 +-
 bse/{bseengine.c => bseengine.cc}                 |   14 ++--
 bse/{bseenginemaster.c => bseenginemaster.cc}     |   38 +++++------
 bse/{bseengineschedule.c => bseengineschedule.cc} |   71 ++++++---------------
 bse/{bseengineutils.c => bseengineutils.cc}       |   44 +++++--------
 5 files changed, 62 insertions(+), 107 deletions(-)
---
diff --git a/bse/Makefile.am b/bse/Makefile.am
index c6f108f..6e4aa5a 100644
--- a/bse/Makefile.am
+++ b/bse/Makefile.am
@@ -66,7 +66,7 @@ bse_sources = $(strip \
 	gsldatahandle-mad.cc	           	gslfilehash.cc	gsldatautils.cc	\
 	gslwaveosc.cc		gslosctable.cc	gslmagic.cc	                 \
 	\
-	bseengine.c		bseenginemaster.c	bseengineschedule.c		bseengineutils.c \
+	bseengine.cc		bseenginemaster.cc	bseengineschedule.cc		bseengineutils.cc \
 	bsebus.cc		bsecategories.cc 	\
 	bsefilter.cc   		bsebiquadfilter.cc	bsefilter-ellf.cc	\
 	bseconstant.cc		bseconstvalues.cc	bsecontainer.cc			bsecontextmerger.cc \
diff --git a/bse/bseengine.c b/bse/bseengine.cc
similarity index 99%
rename from bse/bseengine.c
rename to bse/bseengine.cc
index 97a710f..d569563 100644
--- a/bse/bseengine.c
+++ b/bse/bseengine.cc
@@ -540,7 +540,7 @@ bse_job_probe_request (BseModule         *module,
   EngineNode *node = ENGINE_NODE (module);
   g_return_val_if_fail (probe_func != NULL, NULL);
   
-  EngineTimedJob *tjob = g_malloc0 (sizeof (tjob->probe));
+  EngineTimedJob *tjob = (EngineTimedJob*) g_malloc0 (sizeof (tjob->probe));
   tjob->type = ENGINE_JOB_PROBE_JOB;
   tjob->tick_stamp = 0;
   tjob->probe.data = data;
@@ -588,7 +588,7 @@ bse_job_flow_access (BseModule    *module,
   g_return_val_if_fail (tick_stamp < GSL_MAX_TICK_STAMP, NULL);
   g_return_val_if_fail (access_func != NULL, NULL);
   
-  EngineTimedJob *tjob = g_malloc0 (sizeof (tjob->access));
+  EngineTimedJob *tjob = (EngineTimedJob*) g_malloc0 (sizeof (tjob->access));
   tjob->type = ENGINE_JOB_FLOW_JOB;
   tjob->tick_stamp = tick_stamp;
   tjob->access.free_func = free_func;
@@ -634,7 +634,7 @@ bse_job_boundary_access (BseModule    *module,
   g_return_val_if_fail (tick_stamp < GSL_MAX_TICK_STAMP, NULL);
   g_return_val_if_fail (access_func != NULL, NULL);
   
-  EngineTimedJob *tjob = g_malloc0 (sizeof (tjob->access));
+  EngineTimedJob *tjob = (EngineTimedJob*) g_malloc0 (sizeof (tjob->access));
   tjob->type = ENGINE_JOB_BOUNDARY_JOB;
   tjob->tick_stamp = tick_stamp;
   tjob->access.free_func = free_func;
@@ -675,7 +675,7 @@ bse_job_boundary_discard (BseModule *module)
 {
   g_return_val_if_fail (module != NULL, NULL);
 
-  EngineTimedJob *tjob = g_malloc0 (sizeof (tjob->access));
+  EngineTimedJob *tjob = (EngineTimedJob*) g_malloc0 (sizeof (tjob->access));
   tjob->type = ENGINE_JOB_BOUNDARY_JOB;
   tjob->tick_stamp = 0;
   tjob->access.free_func = NULL;
@@ -800,7 +800,7 @@ bse_job_add_poll (BseEnginePollFunc    poll_func,
   job->poll.data = data;
   job->poll.free_func = free_func;
   job->poll.n_fds = n_fds;
-  job->poll.fds = g_memdup (fds, sizeof (fds[0]) * n_fds);
+  job->poll.fds = (GPollFD*) g_memdup (fds, sizeof (fds[0]) * n_fds);
   
   return job;
 }
@@ -1026,7 +1026,7 @@ static gboolean
 dtrans_timer (gpointer timer_data,
 	      guint64  stamp)
 {
-  DTrans *data = timer_data;
+  DTrans *data = (DTrans*) timer_data;
   if (data->tick_stamp <= stamp)
     {
       if (!data->trans->jobs_head)
@@ -1209,7 +1209,7 @@ bse_module_new_virtual (guint       n_iostreams,
   
   g_return_val_if_fail (n_iostreams > 0, NULL);
   
-  vclass = g_memdup (&virtual_module_class, sizeof (virtual_module_class));
+  vclass = (VirtualModuleClass*) g_memdup (&virtual_module_class, sizeof (virtual_module_class));
   vclass->klass.n_istreams = n_iostreams;
   vclass->klass.n_ostreams = n_iostreams;
   vclass->free_data = free_data;
diff --git a/bse/bseenginemaster.c b/bse/bseenginemaster.cc
similarity index 96%
rename from bse/bseenginemaster.c
rename to bse/bseenginemaster.cc
index 542443b..3e8b8f7 100644
--- a/bse/bseenginemaster.c
+++ b/bse/bseenginemaster.cc
@@ -81,7 +81,6 @@ static void	master_schedule_discard	(void);
 static gboolean	       master_need_reflow = FALSE;
 static gboolean	       master_need_process = FALSE;
 static EngineNode     *master_consumer_list = NULL;
-const gfloat           bse_engine_master_zero_block[BSE_STREAM_MAX_VALUES + 16 /* SIMD alignment */] = { 0, }; /* FIXME: move elsewhere? join? */
 static Timer	      *master_timer_list = NULL;
 static Poll	      *master_poll_list = NULL;
 static guint           master_n_pollfds = 0;
@@ -194,16 +193,13 @@ master_jdisconnect_node (EngineNode *node,
 }
 
 static void
-master_disconnect_node_outputs (EngineNode *src_node,
-				EngineNode *dest_node)
+master_disconnect_node_outputs (EngineNode *src_node, EngineNode *dest_node)
 {
-  gint i, j;
-  
-  for (i = 0; i < ENGINE_NODE_N_ISTREAMS (dest_node); i++)
+  for (int i = 0; i < ENGINE_NODE_N_ISTREAMS (dest_node); i++)
     if (dest_node->inputs[i].src_node == src_node)
       master_idisconnect_node (dest_node, i);
-  for (j = 0; j < ENGINE_NODE_N_JSTREAMS (dest_node); j++)
-    for (i = 0; i < dest_node->module.jstreams[j].jcount; i++)
+  for (int j = 0; j < ENGINE_NODE_N_JSTREAMS (dest_node); j++)
+    for (uint i = 0; i < dest_node->module.jstreams[j].jcount; i++)
       if (dest_node->jinputs[j][i].src_node == src_node)
 	master_jdisconnect_node (dest_node, j, i--);
 }
@@ -357,7 +353,7 @@ master_process_job (BseJob *job)
       JOB_DEBUG ("kill_outputs(%p)", node);
       g_return_if_fail (node->integrated == TRUE);
       while (node->output_nodes)
-	master_disconnect_node_outputs (node, node->output_nodes->data);
+	master_disconnect_node_outputs (node, (EngineNode*) node->output_nodes->data);
       master_need_reflow |= TRUE;
       break;
     case ENGINE_JOB_DISCARD:
@@ -377,7 +373,7 @@ master_process_job (BseJob *job)
 	  master_jdisconnect_node (node, jstream, node->module.jstreams[jstream].jcount - 1);
       /* kill outputs */
       while (node->output_nodes)
-	master_disconnect_node_outputs (node, node->output_nodes->data);
+	master_disconnect_node_outputs (node, (EngineNode*) node->output_nodes->data);
       /* remove from consumer list */
       if (ENGINE_NODE_IS_CONSUMER (node))
 	{
@@ -428,7 +424,7 @@ master_process_job (BseJob *job)
     case ENGINE_JOB_SUSPEND:
       node = job->tick.node;
       stamp = job->tick.stamp;
-      JOB_DEBUG ("suspend(%p,%llu)", node, stamp);
+      JOB_DEBUG ("suspend(%p,%llu)", node, (long long unsigned int) stamp);
       g_return_if_fail (node->integrated == TRUE);
       if (node->local_active < stamp)
 	{
@@ -441,7 +437,7 @@ master_process_job (BseJob *job)
     case ENGINE_JOB_RESUME:
       node = job->tick.node;
       stamp = job->tick.stamp;
-      JOB_DEBUG ("resume(%p,%llu)", node, stamp);
+      JOB_DEBUG ("resume(%p,%llu)", node, (long long unsigned int) stamp);
       g_return_if_fail (node->integrated == TRUE);
       if (node->local_active > stamp)
 	{
@@ -791,7 +787,7 @@ master_update_node_state (EngineNode *node,
     do
       {
         TJOB_DEBUG ("flow-access for (%p:s=%u) at:%lld current:%lld\n",
-                    node, node->sched_tag, tjob->tick_stamp, node->counter);
+                    node, node->sched_tag, (long long unsigned int) tjob->tick_stamp, (long long unsigned int) node->counter);
         tjob->access.access_func (&node->module, tjob->access.data);
         tjob = node_pop_flow_job (node, max_tick);
       }
@@ -835,7 +831,7 @@ master_process_locked_node (EngineNode *node,
 	      ENGINE_NODE_UNLOCK (inode);
 	    }
 	  else
-	    node->module.istreams[i].values = bse_engine_master_zero_block;
+	    node->module.istreams[i].values = bse_engine_const_zeros (BSE_STREAM_MAX_VALUES);
 	}
       /* ensure all jstream inputs have n_values available */
       for (j = 0; j < ENGINE_NODE_N_JSTREAMS (node); j++)
@@ -863,7 +859,7 @@ master_process_locked_node (EngineNode *node,
 	  /* suspended node processing behaviour */
 	  for (i = 0; i < ENGINE_NODE_N_OSTREAMS (node); i++)
 	    if (node->module.ostreams[i].connected)
-	      node->module.ostreams[i].values = (gfloat*) bse_engine_master_zero_block;
+	      node->module.ostreams[i].values = bse_engine_const_zeros (BSE_STREAM_MAX_VALUES);
           node->needs_reset = TRUE;
 	}
       else
@@ -946,7 +942,7 @@ master_process_flow (void)
       SfiRing *ring = probe_node_list;
       while (ring)
         {
-          node = ring->data; /* current ring may be removed during master_take_probes() */
+          node = (EngineNode*) ring->data; /* current ring may be removed during master_take_probes() */
           ring = sfi_ring_walk (ring, probe_node_list);
           if (!ENGINE_NODE_IS_SCHEDULED (node))
             master_take_probes (node, current_stamp, n_values, PROBE_UNSCHEDULED);
@@ -960,12 +956,12 @@ master_process_flow (void)
 	{
 	  if (profile_node)
 	    {
-	      if (profile_maxtime > profile_modules)
+	      if (profile_maxtime > guint64 (profile_modules))
 		g_print ("Excess Node: %p  Duration: %llu usecs     ((void(*)())%p)         \n",
-			 profile_node, profile_maxtime, profile_node->module.klass->process);
+			 profile_node, (long long unsigned int) profile_maxtime, profile_node->module.klass->process);
 	      else
 		g_print ("Slowest Node: %p  Duration: %llu usecs     ((void(*)())%p)         \r",
-			 profile_node, profile_maxtime, profile_node->module.klass->process);
+			 profile_node, (long long unsigned int) profile_maxtime, profile_node->module.klass->process);
 	    }
 	}
       
@@ -1097,7 +1093,7 @@ _engine_master_dispatch_jobs (void)
         while (ring)
           {
             SfiRing *current = ring;
-            EngineNode *node = ring->data;
+            EngineNode *node = (EngineNode*) ring->data;
             ring = sfi_ring_walk (ring, boundary_node_list);
             EngineTimedJob *tjob = node_pop_boundary_job (node, last_block_tick, current);
             if (tjob)
@@ -1105,7 +1101,7 @@ _engine_master_dispatch_jobs (void)
             while (tjob)
               {
                 TJOB_DEBUG ("boundary-access for (%p:s=%u) at:%lld current:%lld\n",
-                            node, node->sched_tag, tjob->tick_stamp, node->counter);
+                            node, node->sched_tag, (long long int) tjob->tick_stamp, (long long int) node->counter);
                 tjob->access.access_func (&node->module, tjob->access.data);
                 tjob = node_pop_boundary_job (node, last_block_tick, current);
               }
diff --git a/bse/bseengineschedule.c b/bse/bseengineschedule.cc
similarity index 95%
rename from bse/bseengineschedule.c
rename to bse/bseengineschedule.cc
index cd21a1d..7dbb68e 100644
--- a/bse/bseengineschedule.c
+++ b/bse/bseengineschedule.cc
@@ -52,8 +52,7 @@ _engine_schedule_new (void)
 }
 
 static inline void
-unschedule_virtual (EngineSchedule *sched,
-		    EngineNode     *vnode)
+unschedule_virtual (EngineSchedule *sched, EngineNode *vnode)
 {
   g_return_if_fail (ENGINE_NODE_IS_SCHEDULED (vnode) == TRUE);
   g_return_if_fail (sched->n_items > 0);
@@ -65,8 +64,7 @@ unschedule_virtual (EngineSchedule *sched,
 }
 
 static inline void
-unschedule_node (EngineSchedule *sched,
-		 EngineNode *node)
+unschedule_node (EngineSchedule *sched, EngineNode *node)
 {
   guint leaf_level;
   
@@ -100,8 +98,7 @@ unschedule_cycle (EngineSchedule *sched,
   sched->nodes[leaf_level] = sfi_ring_remove (sched->nodes[leaf_level], ring);
   for (walk = ring; walk; walk = sfi_ring_walk (walk, ring))
     {
-      EngineNode *node = walk->data;
-      
+      EngineNode *node = (EngineNode*) walk->data;
       if (!ENGINE_NODE_IS_SCHEDULED (node))
 	g_warning ("node(%p) in schedule ring(%p) is untagged", node, ring);
       node->sched_leaf_level = 0;
@@ -159,13 +156,13 @@ _engine_schedule_clear (EngineSchedule *sched)
   g_return_if_fail (sched->in_pqueue == FALSE);
   
   while (sched->vnodes)
-    unschedule_virtual (sched, sched->vnodes->data);
+    unschedule_virtual (sched, (EngineNode*) sched->vnodes->data);
   for (i = 0; i < sched->leaf_levels; i++)
     {
       while (sched->nodes[i])
-	unschedule_node (sched, sched->nodes[i]->data);
+	unschedule_node (sched, (EngineNode*) sched->nodes[i]->data);
       while (sched->cycles[i])
-	unschedule_cycle (sched, sched->cycles[i]->data);
+	unschedule_cycle (sched, (SfiRing*) sched->cycles[i]->data);
     }
   g_return_if_fail (sched->n_items == 0);
 }
@@ -256,15 +253,13 @@ schedule_cycle (EngineSchedule *sched,
 		guint           leaf_level)
 {
   SfiRing *walk;
-  
   g_return_if_fail (sched != NULL);
   g_return_if_fail (sched->secured == FALSE);
   g_return_if_fail (cycle_nodes != NULL);
-  
+
   for (walk = cycle_nodes; walk; walk = sfi_ring_walk (walk, cycle_nodes))
     {
-      EngineNode *node = walk->data;
-      
+      EngineNode *node = (EngineNode*) walk->data;
       g_return_if_fail (!ENGINE_NODE_IS_SCHEDULED (node));
       node->sched_leaf_level = leaf_level;
       node->sched_tag = TRUE;
@@ -327,22 +322,18 @@ _engine_schedule_pop_node (EngineSchedule *sched)
   g_return_val_if_fail (sched != NULL, NULL);
   g_return_val_if_fail (sched->secured == TRUE, NULL);
   g_return_val_if_fail (sched->cur_leaf_level <= sched->leaf_levels, NULL);
-  
   do
     {
-      guint leaf_level = sched->cur_leaf_level;
-      
+      uint leaf_level = sched->cur_leaf_level;
       if (sched->cur_node)
 	{
-	  EngineNode *node = sched->cur_node->data;
-	  
+	  EngineNode *node = (EngineNode*) sched->cur_node->data;
 	  sched->cur_node = sfi_ring_walk (sched->cur_node, sched->nodes[leaf_level]);
 	  return node;
 	}
       schedule_advance (sched);
     }
   while (sched->cur_node);
-  
   /* nothing to hand out, either we're empty or still have cycles pending */
   return NULL;
 }
@@ -353,22 +344,18 @@ _engine_schedule_pop_cycle (EngineSchedule *sched)
   g_return_val_if_fail (sched != NULL, NULL);
   g_return_val_if_fail (sched->secured == TRUE, NULL);
   g_return_val_if_fail (sched->cur_leaf_level <= sched->leaf_levels, NULL);
-  
   do
     {
       guint leaf_level = sched->cur_leaf_level;
-      
       if (sched->cur_cycle)
 	{
-	  SfiRing *cycle = sched->cur_cycle->data;
-	  
+	  SfiRing *cycle = (SfiRing*) sched->cur_cycle->data;
 	  sched->cur_cycle = sfi_ring_walk (sched->cur_cycle, sched->cycles[leaf_level]);
 	  return cycle;
 	}
       schedule_advance (sched);
     }
   while (sched->cur_cycle);
-  
   /* nothing to hand out, either we're empty or still have nodes pending */
   return NULL;
 }
@@ -421,7 +408,7 @@ determine_suspension_reset (EngineNode *node)
   node->in_suspend_call = TRUE;
   for (ring = node->output_nodes; ring && !keep_state; ring = sfi_ring_walk (ring, node->output_nodes))
     {
-      EngineNode *dest_node = ring->data;
+      EngineNode *dest_node = (EngineNode*) ring->data;
       if (!dest_node->in_suspend_call)          /* break cycles (consisting of purely virtual nodes) */
         keep_state |= !determine_suspension_reset (dest_node);
     }
@@ -446,7 +433,7 @@ determine_suspension_state (EngineNode *node,
       gboolean keep_state = FALSE;
       for (ring = node->output_nodes; ring; ring = sfi_ring_walk (ring, node->output_nodes))
         {
-          EngineNode *dest_node = ring->data;
+          EngineNode *dest_node = (EngineNode*) ring->data;
           if (!dest_node->in_suspend_call)      /* catch cycles */
             {
               guint64 ostamp = determine_suspension_state (dest_node, &seen_cycle, &keep_state);
@@ -494,44 +481,35 @@ merge_untagged_node_lists_uniq (SfiRing *ring1,
 				SfiRing *ring2)
 {
   SfiRing *walk;
-  
   /* paranoid, ensure all nodes are untagged (ring2) */
   for (walk = ring2; walk; walk = sfi_ring_walk (walk, ring2))
     {
-      EngineNode *node = walk->data;
-      
+      EngineNode *node = (EngineNode*) walk->data;
       g_assert (node->sched_recurse_tag == FALSE);
     }
-  
   /* tag all nodes in ring1 first */
   for (walk = ring1; walk; walk = sfi_ring_walk (walk, ring1))
     {
-      EngineNode *node = walk->data;
-      
+      EngineNode *node = (EngineNode*) walk->data;
       g_assert (node->sched_recurse_tag == FALSE);	/* paranoid check */
       node->sched_recurse_tag = TRUE;
     }
-  
   /* merge list with missing (untagged) nodes */
   for (walk = ring2; walk; walk = sfi_ring_walk (walk, ring2))
     {
-      EngineNode *node = walk->data;
-      
+      EngineNode *node = (EngineNode*) walk->data;
       if (node->sched_recurse_tag == FALSE)
 	ring1 = sfi_ring_append (ring1, node);
     }
-  
   /* untag all nodes */
   for (walk = ring1; walk; walk = sfi_ring_walk (walk, ring1))
     {
-      EngineNode *node = walk->data;
-      
+      EngineNode *node = (EngineNode*) walk->data;
       node->sched_recurse_tag = FALSE;
     }
   for (walk = ring2; walk; walk = sfi_ring_walk (walk, ring2))
     {
-      EngineNode *node = walk->data;
-      
+      EngineNode *node = (EngineNode*) walk->data;
       node->sched_recurse_tag = FALSE;
     }
   sfi_ring_free (ring2);
@@ -561,20 +539,16 @@ master_resolve_cycles (EngineQuery *query,
 {
   SfiRing *walk;
   gboolean all_resolved = TRUE;
-  
   g_assert (query->cycles != NULL);	/* paranoid */
-  
   walk = query->cycles;
   while (walk)
     {
       SfiRing *next = sfi_ring_walk (walk, query->cycles);
-      EngineCycle *cycle = walk->data;
-      
+      EngineCycle *cycle = (EngineCycle*) walk->data;
       if (resolve_cycle (cycle, node, &query->cycle_nodes))
 	{
 	  g_assert (cycle->last == NULL);	/* paranoid */
 	  g_assert (cycle->nodes == NULL);	/* paranoid */
-	  
 	  sfi_delete_struct (EngineCycle, cycle);
 	  query->cycles = sfi_ring_remove_node (query->cycles, walk);
 	}
@@ -606,22 +580,17 @@ query_merge_cycles (EngineQuery *query,
 		    EngineNode  *node)
 {
   SfiRing *walk;
-  
   g_assert (child_query->cycles != NULL);	/* paranoid */
-  
   /* add node to all child cycles */
   for (walk = child_query->cycles; walk; walk = sfi_ring_walk (walk, child_query->cycles))
     {
-      EngineCycle *cycle = walk->data;
-      
+      EngineCycle *cycle = (EngineCycle*) walk->data;
       cycle->nodes = sfi_ring_prepend (cycle->nodes, node);
       cycle->seen_deferred_node |= ENGINE_NODE_IS_DEFERRED (node);
     }
-  
   /* merge child cycles into our cycle list */
   query->cycles = sfi_ring_concat (query->cycles, child_query->cycles);
   child_query->cycles = NULL;
-  
   /* merge child's cycle nodes from resolved cycles into ours */
   query->cycle_nodes = merge_untagged_node_lists_uniq (query->cycle_nodes, child_query->cycle_nodes);
   child_query->cycle_nodes = NULL;
diff --git a/bse/bseengineutils.c b/bse/bseengineutils.cc
similarity index 96%
rename from bse/bseengineutils.c
rename to bse/bseengineutils.cc
index 88d3ada..2416538 100644
--- a/bse/bseengineutils.c
+++ b/bse/bseengineutils.cc
@@ -38,9 +38,8 @@ _engine_alloc_ostreams (guint n)
   if (n)
     {
       guint i = sizeof (BseOStream) * n + sizeof (gfloat) * bse_engine_block_size () * n;
-      BseOStream *streams = g_malloc0 (i);
-      gfloat *buffers = (gfloat*) (streams + n);
-      
+      BseOStream *streams = (BseOStream*) g_malloc0 (i);
+      float *buffers = (float*) (streams + n);
       for (i = 0; i < n; i++)
 	{
 	  streams[i].values = buffers;
@@ -678,13 +677,13 @@ _engine_mnl_node_changed (EngineNode *node)
 
 
 /* --- const value blocks --- */
-extern const gfloat bse_engine_master_zero_block[];
-gfloat*
+float*
 bse_engine_const_zeros (guint smaller_than_BSE_STREAM_MAX_VALUES)
 {
+  static const float engine_const_zero_block[BSE_STREAM_MAX_VALUES + 16 /* SIMD alignment */] = { 0, };
   /* this function is callable from any thread */
   g_assert (smaller_than_BSE_STREAM_MAX_VALUES <= BSE_STREAM_MAX_VALUES);
-  return (gfloat*) bse_engine_master_zero_block;
+  return (float*) engine_const_zero_block;
 }
 
 typedef struct
@@ -747,52 +746,43 @@ const_values_insert (ConstValuesArray *array,
 {
   if (array->n_nodes == 0)
     {
-      guint new_size = upper_power2 (sizeof (gfloat*));
-      
-      array->nodes = g_realloc (array->nodes, new_size);
-      array->nodes_used = g_realloc (array->nodes_used, new_size / sizeof (gfloat*));
+      uint new_size = upper_power2 (sizeof (float*));
+      array->nodes = (float**) g_realloc (array->nodes, new_size);
+      array->nodes_used = (guint8*) g_realloc (array->nodes_used, new_size / sizeof (gfloat*));
       array->n_nodes = 1;
-      
       g_assert (index == 0);
     }
   else
     {
-      guint n_nodes = array->n_nodes++;
-      
+      uint n_nodes = array->n_nodes++;
       if (*array->nodes[index] < *value_block)
 	index++;
-      
       if (1)
 	{
-	  guint new_size = upper_power2 (array->n_nodes * sizeof (gfloat*));
-	  guint old_size = upper_power2 (n_nodes * sizeof (gfloat*));
-	  
+	  uint new_size = upper_power2 (array->n_nodes * sizeof (gfloat*));
+	  uint old_size = upper_power2 (n_nodes * sizeof (gfloat*));
 	  if (new_size != old_size)
 	    {
-	      array->nodes = g_realloc (array->nodes, new_size);
-	      array->nodes_used = g_realloc (array->nodes_used, new_size / sizeof(gfloat*));
+	      array->nodes = (float**) g_realloc (array->nodes, new_size);
+	      array->nodes_used = (guint8*) g_realloc (array->nodes_used, new_size / sizeof (float*));
 	    }
 	}
       g_memmove (array->nodes + index + 1, array->nodes + index, (n_nodes - index) * sizeof (array->nodes[0]));
       g_memmove (array->nodes_used + index + 1, array->nodes_used + index, (n_nodes - index) * sizeof (array->nodes_used[0]));
     }
-  
   array->nodes[index] = value_block;
   array->nodes_used[index] = CONST_VALUES_EXPIRE;
 }
 
 static ConstValuesArray cvalue_array = { 0, NULL, NULL };
 
-gfloat*
+float*
 bse_engine_const_values (gfloat value)
 {
-  gfloat **block;
-  
   if (fabs (value) < BSE_SIGNAL_EPSILON)
-    return (gfloat*) bse_engine_master_zero_block;
-  
-  block = const_values_lookup_nextmost (&cvalue_array, value);
-  
+    return bse_engine_const_zeros (BSE_STREAM_MAX_VALUES);
+
+  float **block = const_values_lookup_nextmost (&cvalue_array, value);
   /* found correct match? */
   if (block && fabs (**block - value) < BSE_SIGNAL_EPSILON)
     {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]