Example #1
0
static void
qsampler_dcache_filler (gpointer     data,
			guint        voffset,
			guint        n_values,
			gint16      *values,
			BstQSampler *qsampler)
{
  GslDataCache *dcache = data;
  GslDataCacheNode *dnode;
  glong dcache_length, dnode_length;
  gint i;

  dnode = gsl_data_cache_ref_node (dcache, voffset, TRUE);
  dcache_length = gsl_data_handle_length (dcache->dhandle);
  dnode_length = dcache->node_size;
  for (i = 0; i < n_values; i++)
    {
      glong offset = voffset + i;

      if (offset < 0 || offset >= dcache_length)
	values[i] = 0;
      else
	{
	  if (offset < dnode->offset || offset >= dnode->offset + dnode_length)
	    {
	      gsl_data_cache_unref_node (dcache, dnode);
	      dnode = gsl_data_cache_ref_node (dcache, offset, TRUE);
	    }
	  values[i] = dnode->data[offset - dnode->offset] * 32768.0;
	}
    }
  gsl_data_cache_unref_node (dcache, dnode);
}
Example #2
0
static GslLong
dcache_handle_read (GslDataHandle *data_handle,
		    GslLong        voffset,
		    GslLong        n_values,
		    gfloat        *values)
{
  DCacheHandle *dhandle = (DCacheHandle*) data_handle;
  GslDataCacheNode *node;
  
  node = gsl_data_cache_ref_node (dhandle->dcache, voffset, TRUE);
  voffset -= node->offset;
  n_values = MIN (n_values, dhandle->node_size - voffset);
  memcpy (values, node->data + voffset, sizeof (values[0]) * n_values);
  
  return n_values;
}