// (C) Copyright 2008-2009 SDML (www.sdml.info) // // Use, modification and distribution is subject to the Boost Software // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace boost; using namespace boost::fca; using namespace boost::graph; typedef set_context Context; typedef relation Relation; typedef lattice Lattice; int main(int argc, char *argv[]) { string objs[] = { "Iter::Iter(Iter)", "operator!=(Iter,Iter)", "operator++(Iter)", "operator*(Iter)", "operator=(*Iter,T)" }; int nobjs = sizeof(objs) / sizeof(string); string atts[] = { "CopyConstructible", "EqualityComparable", "Dereferenceable", "ArithmeticLike", "InputIterator", "OutputIterator", "BasicOutputIterator", "ForwardIterator", "MutableForwardIterator", "Assignable<*Iter,T>" }; int natts = sizeof(atts) / sizeof(string); pair rels[] = { make_pair("Iter::Iter(Iter)", "CopyConstructible"), make_pair("Iter::Iter(Iter)", "ArithmeticLike"), make_pair("Iter::Iter(Iter)", "InputIterator"), make_pair("Iter::Iter(Iter)", "OutputIterator"), make_pair("Iter::Iter(Iter)", "BasicOutputIterator"), make_pair("Iter::Iter(Iter)", "ForwardIterator"), make_pair("Iter::Iter(Iter)", "MutableForwardIterator"), make_pair("operator!=(Iter,Iter)", "EqualityComparable"), make_pair("operator!=(Iter,Iter)", "ArithmeticLike"), make_pair("operator!=(Iter,Iter)", "InputIterator"), make_pair("operator!=(Iter,Iter)", "ForwardIterator"), make_pair("operator!=(Iter,Iter)", "MutableForwardIterator"), make_pair("operator++(Iter)", "ArithmeticLike"), make_pair("operator++(Iter)", "InputIterator"), make_pair("operator++(Iter)", "OutputIterator"), make_pair("operator++(Iter)", "BasicOutputIterator"), make_pair("operator++(Iter)", "ForwardIterator"), make_pair("operator++(Iter)", "MutableForwardIterator"), make_pair("operator*(Iter)", "Dereferenceable"), make_pair("operator*(Iter)", "InputIterator"), make_pair("operator*(Iter)", "OutputIterator"), make_pair("operator*(Iter)", "BasicOutputIterator"), make_pair("operator*(Iter)", "ForwardIterator"), make_pair("operator*(Iter)", "MutableForwardIterator"), make_pair("operator=(*Iter,T)", "Assignable<*Iter,T>"), make_pair("operator=(*Iter,T)", "OutputIterator"), make_pair("operator=(*Iter,T)", "BasicOutputIterator"), make_pair("operator=(*Iter,T)", "MutableForwardIterator") }; int nrels = sizeof(rels) / sizeof(pair); Context cxt(objs, objs + nobjs, atts, atts + natts); Relation rel(cxt, rels, rels + nrels); Lattice lat(rel, true); write_table(cerr, rel); write_graphviz(cout, lat); return 0; }