void TestNode::deserialize(BundleIO& bundle) { { std::ifstream& f = bundle.getInputStream("main"); // There is more than one way to do this. We could serialize to YAML, which // would make a readable format, or we could serialize directly to the stream // Choose the easier one. std::string versionString; f >> versionString; if (versionString != "TestNode-v1") { NTA_THROW << "Bad serialization for region '" << region_->getName() << "' of type TestNode. Main serialization file must start " << "with \"TestNode-v1\" but instead it starts with '" << versionString << "'"; } f >> nodeCount_; f >> int32Param_; f >> uint32Param_; f >> int64Param_; f >> uint64Param_; f >> real32Param_; f >> real64Param_; f >> outputElementCount_; f >> delta_; f >> iter_; arrayIn(f, real32ArrayParam_, "real32ArrayParam_"); arrayIn(f, int64ArrayParam_, "int64ArrayParam_"); arrayIn(f, unclonedParam_, "unclonedParam_"); f >> shouldCloneParam_; std::string label; f >> label; if (label != "unclonedArray") NTA_THROW << "Missing label for uncloned array. Got '" << label << "'"; size_t vecsize; f >> vecsize; unclonedInt64ArrayParam_.clear(); unclonedInt64ArrayParam_.resize(vecsize); for (size_t i = 0; i < vecsize; i++) { std::stringstream name; name << "unclonedInt64ArrayParam[" << i << "]"; arrayIn(f, unclonedInt64ArrayParam_[i], name.str()); } f.close(); } // main file // auxilliary file using stream { std::ifstream& f = bundle.getInputStream("aux"); char line1[100]; f.read(line1, 100); line1[f.gcount()] = '\0'; if (std::string(line1) != "This is an auxilliary file!\n") { NTA_THROW << "Invalid auxilliary serialization file for TestNode"; } f.close(); } // auxilliary file using path { std::string path = bundle.getPath("aux2"); std::ifstream f(path.c_str()); char line1[100]; f.read(line1, 100); line1[f.gcount()] = '\0'; if (std::string(line1) != "This is another auxilliary file!\n") { NTA_THROW << "Invalid auxilliary2 serialization file for TestNode"; } f.close(); } }
void TestNode::deserialize(BundleIO &bundle) { { std::istream &f = bundle.getInputStream(); // There is more than one way to do this. We could serialize to YAML, which // would make a readable format, or we could serialize directly to the // stream Choose the easier one. std::string versionString; f >> versionString; if (versionString != "TestNode-v2") { NTA_THROW << "Bad serialization for region '" << region_->getName() << "' of type TestNode. Main serialization file must start " << "with \"TestNode-v2\" but instead it starts with '" << versionString << "'"; } f >> nodeCount_; f >> int32Param_; f >> uint32Param_; f >> int64Param_; f >> uint64Param_; f >> real32Param_; f >> real64Param_; f >> boolParam_; f >> outputElementCount_; f >> delta_; f >> iter_; f >> dim_; arrayIn(f, real32ArrayParam_, "real32ArrayParam_"); arrayIn(f, int64ArrayParam_, "int64ArrayParam_"); arrayIn(f, int64ArrayParam_, "boolArrayParam_"); arrayIn(f, unclonedParam_, "unclonedParam_"); f >> shouldCloneParam_; std::string tag; f >> tag; if (tag != "unclonedArray") NTA_THROW << "Missing label for uncloned array. Got '" << tag << "'"; size_t vecsize; f >> vecsize; unclonedInt64ArrayParam_.clear(); unclonedInt64ArrayParam_.resize(vecsize); for (size_t i = 0; i < vecsize; i++) { std::stringstream name; name << "unclonedInt64ArrayParam[" << i << "]"; arrayIn(f, unclonedInt64ArrayParam_[i], name.str()); } // Restore outputs f >> tag; NTA_CHECK(tag == "outputs"); f.ignore(1); NTA_CHECK(f.get() == '['); // start of outputs while (true) { f >> tag; f.ignore(1); if (tag == "]") break; getOutput(tag)->getData().load(f); } } }