C++ (Qt)Curve * GetNodeCurve( Node * node, int curveID ){ Curve * curve = GetFirstCurve(node); while (curve) { if (GetCurveID(curve) == curveID) return curve; curve = GetNextCurve(curve); } return 0;}
C++ (Qt)Curve * ExtractCurvesFromList( Curve * theCurveList, // голова списка Сurve * theCurve, // голова извлекаемых Curve bool withChildren = true );
C++ (Qt)Curve * InsertCurvesInList( Curve * theCurveList, // голова списка Сurve * theCurve, // голова вставляемых Curve Curve * theCurveBefore = 0 ); // куда вставлять (null = в конец)
template<typename K, typename V> struct OrderedMap { using List = std::list<std::pair<K, V>>; using iterator = List::iterator; std::unordered_map<K, iterator> map; List data;};
C++ (Qt)Curve * GetNodeCurve( Node * node, int curveID ){ auto * hash = CScopedCurveHash::instance(); if (hash) { Curve * curve = hash->GetCurve(node, curveID); // есть в хеше ? if (curve) return curve; if (hash->HasNode(node)) return 0; // см ниже } Curve * curve = GetFirstCurve(node); while (curve) { if (GetCurveID(curve) == curveID) break; curve = GetNextCurve(curve); } if (hash) hash->AddCurve(node, curveID, curve); return curve;}
C++ (Qt)void LoadCurves( Stream & strem, Node * node ){ CScopedCurveHash scoped; scoped.AddNode(node); // добавить все имеющиеся (на данный момент) ... // грузим}
auto * hash = CScopedCurveHash::instance();