///////////////////////////////////////////// // MT2Q2b.cpp - Scope class #include "MT2Q2b.h" #include #include #include using Scopes = std::vector; int main() { std::cout << "\n MT2Q2b - Scope class and matching function"; std::cout << "\n ============================================\n"; Scope s1; s1.name() = "Scope1"; s1.type() = "function"; s1.childType() = Scope::ChildType() = { "for", "if", "for" }; s1.complexity() = 6; s1.start() = 23; s1.end() = 88; Scope s2; s2.name() = "Scope2"; s2.type() = "for"; s2.childType() = Scope::ChildType() = { "for", "if" }; s2.complexity() = 3; s2.start() = 27; s2.end() = 42; Scope s3; s3.name() = "Scope3"; s3.type() = "for"; s3.childType() = Scope::ChildType() = { "if" }; s3.complexity() = 2; s3.start() = 29; s3.end() = 40; Scope s4; s4.name() = "Scope4"; s4.type() = "if"; s4.childType() = Scope::ChildType(); s4.complexity() = 1; s4.start() = 35; s4.end() = 39; Scope s5; s5.name() = "Scope5"; s5.type() = "if"; s5.childType() = Scope::ChildType(); s5.complexity() = 1; s5.start() = 44; s5.end() = 52; Scope s6; s6.name() = "Scope6"; s6.type() = "for"; s6.childType() = Scope::ChildType(); s6.complexity() = 1; s6.start() = 60; s6.end() = 84; // sorting vector of scopes Scopes scopes{ &s6, &s4, &s3, &s1, &s2, &s5 }; std::sort(std::begin(scopes), std::end(scopes), Compare::more); for (auto pScope : scopes) { std::cout << "\n " << pScope->name() << " - complexity = " << pScope->complexity(); std::cout << ", type = " << pScope->type(); if (pScope->numberChildren() > 0) { std::cout << ", child types = "; for (auto type : pScope->childType()) std::cout << type << " "; } } // non-stressing test of scope matching std::cout << "\n"; for (auto pScope : scopes) { if (Compare::match(pScope, &s2)) std::cout << "\n " << pScope->name() << " matches " << s2.name(); else std::cout << "\n " << pScope->name() << " does not match " << s2.name(); } std::cout << "\n\n"; }