Esempio n. 1
0
/***************************************************************************
** Return elements written. */
ring_buffer_size_t PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, ring_buffer_size_t elementCount, const int hopsize, const int offset )
{
    ring_buffer_size_t size1, size2, numWritten;
    void *data1, *data2;
    numWritten = PaUtil_GetRingBufferWriteRegions( rbuf, elementCount, &data1, &size1, &data2, &size2 );

	if(hopsize == 1) {
		if( size2 > 0 )
		{

			memcpy( data1, data, size1*rbuf->elementSizeBytes );
			data = ((char *)data) + size1*rbuf->elementSizeBytes;
			memcpy( data2, data, size2*rbuf->elementSizeBytes );
		}
		else
		{
			memcpy( data1, data, size1*rbuf->elementSizeBytes );
		}
	} else {
		int i, j, k;
		data = ((char *)data) + offset*rbuf->elementSizeBytes;
		if( size2 > 0) {
			for(i = 0; i < size1; i++) {
				for(k = 0; k < rbuf->elementSizeBytes; k++) {
					((char *)data1)[i*rbuf->elementSizeBytes+k] = ((char *)data)[i*rbuf->elementSizeBytes*hopsize+k];
				}
			}
			data = ((char *)data) + size1*rbuf->elementSizeBytes;
			for(j = 0; j < size2; j++) {
				for(k = 0; k < rbuf->elementSizeBytes; k++) {
					((char *)data2)[j*rbuf->elementSizeBytes+k] = ((char *)data)[j*rbuf->elementSizeBytes*hopsize+k];
				}
			}
		} else {
			for(i = 0; i < size1; i++) {
				for(k = 0; k < rbuf->elementSizeBytes; k++) {
					((char *)data1)[i*rbuf->elementSizeBytes+k] = ((char *)data)[i*rbuf->elementSizeBytes*hopsize+k];
				}
			}
		}
	}

    PaUtil_AdvanceRingBufferWriteIndex( rbuf, numWritten );
    return numWritten;
}
Esempio n. 2
0
/***************************************************************************
** Return elements written. */
ring_buffer_size_t PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, ring_buffer_size_t elementCount )
{
    ring_buffer_size_t size1, size2, numWritten;
    void *data1, *data2;
    numWritten = PaUtil_GetRingBufferWriteRegions( rbuf, elementCount, &data1, &size1, &data2, &size2 );
    if( size2 > 0 )
    {

        memcpy( data1, data, size1*rbuf->elementSizeBytes );
        data = ((char *)data) + size1*rbuf->elementSizeBytes;
        memcpy( data2, data, size2*rbuf->elementSizeBytes );
    }
    else
    {
        memcpy( data1, data, size1*rbuf->elementSizeBytes );
    }
    PaUtil_AdvanceRingBufferWriteIndex( rbuf, numWritten );
    return numWritten;
}
Esempio n. 3
0
/***************************************************************************
** Return bytes written. */
long PaUtil_WriteRingBuffer( PaUtilRingBuffer *rbuf, const void *data, long numBytes )
{
    long size1, size2, numWritten;
    void *data1, *data2;
    numWritten = PaUtil_GetRingBufferWriteRegions( rbuf, numBytes, &data1, &size1, &data2, &size2 );
    if( size2 > 0 )
    {

        memcpy( data1, data, size1 );
        data = ((char *)data) + size1;
        memcpy( data2, data, size2 );
    }
    else
    {
        memcpy( data1, data, size1 );
    }
    PaUtil_AdvanceRingBufferWriteIndex( rbuf, numWritten );
    return numWritten;
}