Пример #1
0
//-----------------------------------------------------------------------------
// name: UINT__ join()
// desc: shred can call this to get an index into the vector of read pointers
//-----------------------------------------------------------------------------
UINT__ CBufferAdvance::join( Chuck_Event * event )
{
    // TODO: necessary?
    ACQUIRE_MUTEX

    // index of new pointer that will be pushed back
    UINT__ read_offset_index;

    // add new pointer pointing (as pointers do) to current write offset
    // (shreds don't get interrupted, so m_write_offset will always be correct, right?)
    // (uh, hope so...)
    if( !m_free.empty() )
    {
        read_offset_index = m_free.front();
        m_free.pop();
        //assert( read_offset_index < m_read_offsets.size() );
        m_read_offsets[read_offset_index] = ReadOffset( m_write_offset, event );
    }
    else
    {
        read_offset_index = m_read_offsets.size();
        m_read_offsets.push_back( ReadOffset( m_write_offset, event ) );
    }

    // TODO: necessary?
    RELEASE_MUTEX

    // return index
    return read_offset_index;
}
Пример #2
0
	int File::ReadOffsetAlloc(FILE *file, u32 offset, u32 length, u8 **outbuf)
	{
		u8 *buffer = NULL;
		int ret;

		/* Allocate memory */
		buffer = (u8*)Tools::AllocateMemory(length);
		if (!buffer) return -1;

		/* Read file */
		ret = ReadOffset(file, offset, length, &buffer);
		if (ret < 0) 
		{
			delete buffer; buffer = NULL;
			return ret;
		}
		DCFlushRange(buffer, length);

		/* Set pointer */
		*outbuf = buffer;
		return 0;
	}