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);
}