Beispiel #1
0
	void FormatData::load( LoadContextPtr context )
	{
		Data::load( context );
		assert( ( sizeof( FormatData::ValueType ) / sizeof( FormatData::BaseType ) ) == 4 );
		const IndexedIO *container;
		FormatData::BaseType *p = FormatData::baseWritable();
		
		try
		{
			container = context->rawContainer();
			container->read( "window", (int*&)p, 4 );
		}
		catch( ... )
		{
			unsigned int v = 0;
			container = context->container( staticTypeName(), v );
			container->read( "window", (int*&)p, 4 );
		}
		
		const IndexedIO *rawContainer = context->rawContainer();
	
		double aspect = 1.;
		rawContainer->read( "aspect", aspect );
		
		writable().setPixelAspect( aspect );
	}
void DateTimeData::load( LoadContextPtr context )
{
	Data::load( context );
	const IndexedIO *container = context->rawContainer();

	std::string t;
	container->read( g_valueEntry, t );

	try
	{
		writable() = boost::posix_time::from_iso_string( t );
	}
	catch ( boost::bad_lexical_cast )
	{
		/// Do these checks here instead of first as they're likely to be the least-used cases.
		if ( t == "not-a-date-time" )
		{
			writable() = boost::posix_time::not_a_date_time;
		}
		else if ( t == "+infinity" )
		{
			writable() = boost::posix_time::pos_infin;
		}
		else if ( t == "-infinity" )
		{
			writable() = boost::posix_time::neg_infin;
		}
		else
		{
			throw;
		}
	}
}
void TimeCodeData::load( LoadContextPtr context )
{
	Data::load( context );
	const IndexedIO *container = context->rawContainer();
	
	unsigned data[2];
	unsigned *dataPtr = &data[0];
	container->read( g_valueEntry, dataPtr, 2 );
	
	Imf::TimeCode &timeCode = writable();
	timeCode.setTimeAndFlags( data[0] );
	timeCode.setUserData( data[1] );
}