Ejemplo n.º 1
0
int CBlockMember::ReadMember( char **stream, int *streamPos )
{
	m_id = LittleLong(*(int *) (*stream + *((int *)streamPos)));
	*streamPos += sizeof( int );

	if ( m_id == ID_RANDOM )
	{//special case, need to initialize this member's data to Q3_INFINITE so we can randomize the number only the first time random is checked when inside a wait
		m_size = sizeof( float );
		*streamPos += sizeof( int );
		m_data = ICARUS_Malloc( m_size );
		float infinite = Q3_INFINITE;
		memcpy( m_data, &infinite, m_size );
	}
	else
	{
		m_size = LittleLong(*(int *) (*stream + *streamPos));
		*streamPos += sizeof( int );
		m_data = ICARUS_Malloc( m_size );
		memcpy( m_data, (*stream + *streamPos), m_size );
#ifdef Q3_BIG_ENDIAN
		// only TK_INT, TK_VECTOR and TK_FLOAT has to be swapped, but just in case
		if (m_size == 4 && m_id != TK_STRING && m_id != TK_IDENTIFIER && m_id != TK_CHAR)
			*(int *)m_data = LittleLong(*(int *)m_data);
#endif
	}
	*streamPos += m_size;
	
	return true;
}
Ejemplo n.º 2
0
void CBlockMember::SetData( void *data, int size )
{
	if ( m_data )
		ICARUS_Free( m_data );

	m_data = ICARUS_Malloc( size );
	memcpy( m_data, data, size );
	m_size = size;
}
Ejemplo n.º 3
0
int CBlockMember::ReadMember( char **stream, int *streamPos )
{
	m_id = *(int *) (*stream + *((int *)streamPos));
	*streamPos += sizeof( int );

	if ( m_id == ID_RANDOM )
	{//special case, need to initialize this member's data to Q3_INFINITE so we can randomize the number only the first time random is checked when inside a wait
		m_size = sizeof( float );
		*streamPos += sizeof( int );
		m_data = ICARUS_Malloc( m_size );
		float infinite = Q3_INFINITE;
		memcpy( m_data, &infinite, m_size );
	}
	else
	{
		m_size = *(int *) (*stream + *streamPos);
		*streamPos += sizeof( int );
		m_data = ICARUS_Malloc( m_size );
		memcpy( m_data, (*stream + *streamPos), m_size );
	}
	*streamPos += m_size;
	
	return true;
}