[c++]代码库#ifndef min

#define min(a,b) (((a) < (b)) ? (a) : (b))

#endif

#ifndef max

#define max(a,b) (((a) > (b)) ? (a) : (b))

#endif

// 无锁缓冲队列.

class circular_buffer

{

public:

circular_buffer ( int buf_size )

: m_buffer_size ( buf_size )

, m_circle_buffer ( NULL )

, m_write_p ( 0 )

, m_read_p ( 0 )

{

m_circle_buffer = new char[m_buffer_size];

}

~circular_buffer()

{

if ( m_circle_buffer )

delete[] m_circle_buffer;

m_circle_buffer = NULL;

}

void clear()

{

m_write_p = 0;

m_read_p = 0;

}

unsigned int size()

{

return m_buffer_size - ( m_write_p - m_read_p );

}

unsigned int used()

{

return m_write_p - m_read_p;

}

unsigned int put_data ( char* buffer, unsigned int len )

{

unsigned int l;

len = _min ( len, m_buffer_size - m_write_p + m_read_p );

/* first put the data starting from fifo->in to buffer end */

l = _min ( len, m_buffer_size - ( m_write_p & ( m_buffer_size - 1 ) ) );

memcpy ( m_circle_buffer + ( m_write_p & ( m_buffer_size - 1 ) ), buffer, l );

/* then put the rest (if any) at the beginning of the buffer */

memcpy ( m_circle_buffer, buffer + l, len - l );

m_write_p += len;

return len;

}

unsigned int get_data ( char* buffer, unsigned int len )

{

unsigned int l;

len = _min ( len, m_write_p - m_read_p );

/* first get the data from fifo->out until the end of the buffer */

l = _min ( len, m_buffer_size - ( m_read_p & ( m_buffer_size - 1 ) ) );

memcpy ( buffer, m_circle_buffer + ( m_read_p & ( m_buffer_size - 1 ) ), l );

/* then get the rest (if any) from the beginning of the buffer */

memcpy ( buffer + l, m_circle_buffer, len - l );

m_read_p += len;

return len;

}

protected:

inline unsigned int _max ( unsigned int a, unsigned int b )

{

return max ( a, b );

}

inline unsigned int _min ( unsigned int a, unsigned int b )

{

return min ( a, b );

}

private:

int m_buffer_size;

char* m_circle_buffer;

unsigned int m_write_p;

unsigned int m_read_p;

};

694748ed64b9390909c0d88230893790.png

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐