/// <summary>Reads all objects in the file</summary> /// <returns></returns> /// <exception cref="Logic::FileFormatException">File contains a syntax error</exception> /// <exception cref="Logic::IOException">An I/O error occurred</exception> TFilePtr ReadFile(MainType t, GameVersion v) { // Skip comments while (ReadComment()) {} // Parse header int ver = ReadInt(L"File version"); int count = ReadInt(L"Number of objects"); // TODO: Validate version // Create file TFile<OBJ>* file = new TFile<OBJ>(count); TFilePtr output(file); // Parse objects for (int i = 0; i < count; ++i) { OBJ obj(t); // Read header/contents/footer ReadHeader(obj); ReadObject(obj, v); ReadFooter(obj); // Add to file file->Objects.push_back(obj); } // Return non-generic file return output; }
// Serializable's functions const bool AreaLight::Read(std::istream &stream) { // Read the base if( !ReadHeader( stream, "Light" ) || !Light::Read( stream ) ) return false; Vector<float> vertex1, vertex2, vertex3; int numHorizontalSamples, numVerticalSamples; if( !ReadVariable( stream, "vertex1", vertex1 ) || !ReadVariable( stream, "vertex2", vertex2 ) || !ReadVariable( stream, "vertex3", vertex3 ) || !ReadVariable( stream, "numHorizontalSamples", numHorizontalSamples ) || !ReadVariable( stream, "numVerticalSamples", numVerticalSamples ) ) return false; SetRectangularArea( vertex1, vertex2, vertex3, numHorizontalSamples, numVerticalSamples ); if( !ReadFooter( stream, "AreaLight" ) ) return false; return true; }