+
+ ss << "}" << std::endl;
+
+ return true;
+}
+
+
+bool Schematic::loadSchematicFromFile(const std::string &filename,
+ INodeDefManager *ndef, StringMap *replace_names,
+ NodeResolveMethod resolve_method)
+{
+ std::ifstream is(filename.c_str(), std::ios_base::binary);
+ if (!is.good()) {
+ errorstream << "Schematic::loadSchematicFile: unable to open file '"
+ << filename << "'" << std::endl;
+ return false;
+ }
+
+ size_t origsize = m_nodenames.size();
+ if (!deserializeFromMts(&is, &m_nodenames))
+ return false;
+
+ if (replace_names) {
+ for (size_t i = origsize; i != m_nodenames.size(); i++) {
+ std::string &name = m_nodenames[i];
+ StringMap::iterator it = replace_names->find(name);
+ if (it != replace_names->end())
+ name = it->second;
+ }
+ }
+
+ m_nnlistsizes.push_back(m_nodenames.size() - origsize);
+
+ ndef->pendNodeResolve(this, resolve_method);
+
+ return true;
+}
+
+
+bool Schematic::saveSchematicToFile(const std::string &filename)
+{
+ std::ostringstream os(std::ios_base::binary);
+ serializeToMts(&os);
+ return fs::safeWriteToFile(filename, os.str());