uint FgLinkGraph<NodeData,LinkData>::addLink( const LinkData & data, const vector<uint> & sources, const vector<uint> & sinks) { FGASSERT(sinks.size() > 0); // A Link must have at least 1 sink uint linkIdx = uint(m_links.size()); m_links.push_back(Link(sources,sinks,data)); // Update the node cross-referencing: for (size_t ii=0; ii<sinks.size(); ii++) { FGASSERT(sinks[ii] < uint(m_nodes.size())); FGASSERT(!fgContains(sources,sinks[ii])); // Causes nasty bugs later Node & node = m_nodes[sinks[ii]]; if (node.incomingLink.valid()) fgThrow("A FgLinkGraph node cannot be a sink for more than 1 link",fgToString(ii)); node.incomingLink = linkIdx; } for (size_t ii=0; ii<sources.size(); ii++) { FGASSERT(sources[ii] < uint(m_nodes.size())); Node & node = m_nodes[sources[ii]]; node.outgoingLinks.push_back(linkIdx); } return linkIdx; }
inline void fgRegressBinary( const FgString & f0, const FgString & f1) { if (!fgBinaryFileCompare(f0,f1)) fgThrow("Binary Regression failure",f0 + " != " + f1); }