示例#1
0
文件: ringbuffer.c 项目: jtuki/sakuc
int rbuf_push_back(ringbuffer_t *rb, void *data, size_t len)
{
    if (!rb || !data
        || len != rb->block_size)
        return -1;
    
    char *rbuf = rb->buffer;
    if (!rbuf)
      return -1;

    osal_memcpy(rbuf + rb->end * rb->block_size, data, len);
    AdvanceIndex(rb->end, rb->capacity);

    if (rb->length == rb->capacity) {
        AdvanceIndex(rb->start, rb->capacity);
    }
    else {
        rb->length += 1;
    }
    return 0;
}
示例#2
0
	void UpdatePerfStats( void )
	{
		float flCurTime = Plat_FloatTime();
		if (
			( m_flLastSampleTime == -1 ) || 
			( flCurTime - m_flLastSampleTime >= STATS_RECORD_INTERVAL ) )
		{
			if ( ( m_flLastRealTime > 0 ) && ( flCurTime > m_flLastRealTime ) )
			{
				float flFrameRate = 1.0 / ( flCurTime - m_flLastRealTime );
				StatsBufferRecord_t &stat = m_StatsBuffer[m_nWriteIndex];
				stat.m_flFrameRate = flFrameRate;
				AdvanceIndex();
				m_flLastSampleTime = flCurTime;
			}
		}
		m_flLastRealTime = flCurTime;
	}
示例#3
0
文件: ringbuffer.c 项目: jtuki/sakuc
void *rbuf_pop_front(ringbuffer_t *rb, void *pop_value, size_t len)
{
    if (!rb || !pop_value
        || len != rb->block_size)
        return 0;
    
    char *rbuf = rb->buffer;
    if (!rbuf)
      return 0;

    // empty FIFO, nothing pop out.
    if (rb->length > 0) {
        osal_memcpy(pop_value, rbuf + rb->start * len, len);
        AdvanceIndex(rb->start, rb->capacity);

        rb->length -= 1;
        return pop_value;
    }
    
    return nullptr;
}