本文整理汇总了C++中MessageHandler::begin方法的典型用法代码示例。如果您正苦于以下问题:C++ MessageHandler::begin方法的具体用法?C++ MessageHandler::begin怎么用?C++ MessageHandler::begin使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MessageHandler
的用法示例。
在下文中一共展示了MessageHandler::begin方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
uint64_t count64() {
MessageHandler mh;
mh.begin("counting") << " paths of " << typenameof(spec);
std::vector<Word> tmp(stateWords + 1);
Word* ptmp = tmp.data();
int const n = spec.get_root(state(ptmp));
if (n <= 0) {
mh << " ...";
mh.end(0);
return (n == 0) ? 0 : 1;
}
mh << "\n";
uint64_t total = 0;
size_t maxWidth = 0;
//std::cerr << "\nLevel,Width\n";
std::vector<MemoryPool> pools(n + 1);
MyVector<MyList<Word> > vnodeTable(n + 1);
MyVector<UniqTable> uniqTable;
uniqTable.reserve(n + 1);
for (int i = 0; i <= n; ++i) {
uniqTable.push_back(UniqTable(hasher, hasher));
}
Word* p0 = vnodeTable[n].alloc_front(stateWords + 1);
spec.get_copy(state(p0), state(ptmp));
spec.destruct(state(ptmp));
number64(p0) = 1;
for (int i = n; i > 0; --i) {
MyList<Word>& vnodes = vnodeTable[i];
size_t m = vnodes.size();
//std::cerr << i << "," << m << "\n";
maxWidth = std::max(maxWidth, m);
MyList<Word>& nextVnodes = vnodeTable[i - 1];
UniqTable& nextUniq = uniqTable[i - 1];
Word* pp = nextVnodes.alloc_front(stateWords + 1);
//if (nextUniq.size() < m) nextUniq.rehash(m);
for (; !vnodes.empty(); vnodes.pop_front()) {
Word* p = vnodes.front();
if (number64(p) == 0) {
spec.destruct(state(p));
continue;
}
for (int b = 0; b <= 1; ++b) {
spec.get_copy(state(pp), state(p));
int ii = spec.get_child(state(pp), i, b);
if (ii <= 0) {
spec.destruct(state(pp));
if (ii != 0) {
total += number64(p);
}
}
else if (ii < i - 1) {
Word* qq = vnodeTable[ii].alloc_front(stateWords + 1);
spec.get_copy(state(qq), state(pp));
spec.destruct(state(pp));
Word* qqq = uniqTable[ii].add(qq);
if (qqq == qq) {
number64(qqq) = number64(p);
}
else {
spec.destruct(state(qq));
number64(qqq) += number64(p);
vnodeTable[ii].pop_front();
}
}
else {
assert(ii == i - 1);
Word* ppp = nextUniq.add(pp);
if (ppp == pp) {
number64(ppp) = number64(p);
pp = nextVnodes.alloc_front(stateWords + 1);
}
else {
spec.destruct(state(pp));
number64(ppp) += number64(p);
}
}
}
spec.destruct(state(p));
}
nextVnodes.pop_front();
nextUniq.clear();
pools[i].clear();
spec.destructLevel(i);
mh << ".";
}
//.........这里部分代码省略.........
示例2: count
std::string count() {
MessageHandler mh;
mh.begin("counting") << " paths of " << typenameof(spec);
std::vector<Word> tmp(stateWords + 1);
Word* ptmp = tmp.data();
int const n = spec.get_root(state(ptmp));
if (n <= 0) {
mh << " ...";
mh.end(0);
return (n == 0) ? "0" : "1";
}
uint64_t totalStorage[n / 63 + 1];
BigNumber total(totalStorage);
total.store(0);
size_t maxWidth = 0;
//std::cerr << "\nLevel,Width\n";
std::vector<MemoryPool> pools(n + 1);
MyVector<MyList<Word> > vnodeTable(n + 1);
MyVector<UniqTable> uniqTable;
uniqTable.reserve(n + 1);
for (int i = 0; i <= n; ++i) {
uniqTable.push_back(UniqTable(hasher, hasher));
}
int numberWords = 1;
Word* p0 = vnodeTable[n].alloc_front(stateWords + 1);
spec.get_copy(state(p0), state(ptmp));
spec.destruct(state(ptmp));
number(p0).store(1);
mh.setSteps(n);
for (int i = n; i > 0; --i) {
MyList<Word>& vnodes = vnodeTable[i];
size_t m = vnodes.size();
//std::cerr << i << "," << m << "\n";
maxWidth = std::max(maxWidth, m);
MyList<Word>& nextVnodes = vnodeTable[i - 1];
UniqTable& nextUniq = uniqTable[i - 1];
int const nextWords = stateWords + numberWords + 1;
Word* pp = nextVnodes.alloc_front(nextWords);
//if (nextUniq.size() < m) nextUniq.rehash(m);
for (; !vnodes.empty(); vnodes.pop_front()) {
Word* p = vnodes.front();
if (number(p).equals(0)) {
spec.destruct(state(p));
continue;
}
for (int b = 0; b <= 1; ++b) {
spec.get_copy(state(pp), state(p));
int ii = spec.get_child(state(pp), i, b);
if (ii <= 0) {
spec.destruct(state(pp));
if (ii != 0) {
total.add(number(p));
}
}
else if (ii < i - 1) {
Word* qq = vnodeTable[ii].alloc_front(
nextWords + (i - ii) / 63);
spec.get_copy(state(qq), state(pp));
spec.destruct(state(pp));
Word* qqq = uniqTable[ii].add(qq);
if (qqq == qq) {
number(qqq).store(number(p));
}
else {
spec.destruct(state(qq));
int w = number(qqq).add(number(p));
if (numberWords < w) {
numberWords = w; //FIXME might be broken at long skip
}
vnodeTable[ii].pop_front();
}
}
else {
assert(ii == i - 1);
Word* ppp = nextUniq.add(pp);
if (ppp == pp) {
number(ppp).store(number(p));
pp = nextVnodes.alloc_front(nextWords);
}
else {
spec.destruct(state(pp));
int w = number(ppp).add(number(p));
if (numberWords < w) {
numberWords = w; //FIXME might be broken at long skip
}
}
}
//.........这里部分代码省略.........
示例3: main
int main(int argc, char *argv[]) {
optNum["uec"] = -1;
optNum["lb"] = 0;
optNum["ub"] = INT_MAX;
for (unsigned i = 0; i < sizeof(options) / sizeof(options[0]); ++i) {
opt[options[i][0]] = false;
}
std::string graphFileName;
std::string termFileName;
try {
for (int i = 1; i < argc; ++i) {
std::string s = argv[i];
if (s[0] == '-') {
s = s.substr(1);
if (opt.count(s)) {
opt[s] = true;
}
else if (i + 1 < argc && opt.count(s + " <n>")) {
opt[s] = true;
optNum[s] = std::atoi(argv[++i]);
}
else if (i + 1 < argc && opt.count(s + " " + argv[i + 1])) {
opt[s] = true;
optStr[s] = argv[++i];
}
else {
throw std::exception();
}
}
else if (graphFileName.empty()) {
graphFileName = s;
}
else if (termFileName.empty()) {
termFileName = s;
}
else {
throw std::exception();
}
}
}
catch (std::exception& e) {
usage(argv[0]);
return 1;
}
MessageHandler::showMessages();
MessageHandler mh;
mh.begin("started");
GraphillionZdd base;
if (opt["import"]) {
base.read();
}
Graph g;
try {
if (!graphFileName.empty()) {
if (opt["a"]) {
g.readAdjacencyList(graphFileName);
}
else {
g.readEdges(graphFileName);
}
}
else {
g.addEdge("v1", "v2");
g.addEdge("v1", "v3");
g.addEdge("v1", "v4");
g.addEdge("v2", "v4");
g.addEdge("v2", "v5");
g.addEdge("v3", "v4");
g.addEdge("v3", "v6");
g.addEdge("v4", "v5");
g.addEdge("v4", "v6");
g.addEdge("v4", "v7");
g.addEdge("v5", "v7");
g.addEdge("v6", "v7");
g.setColor("v2", 0);
g.setColor("v3", 0);
g.update();
}
if (!termFileName.empty()) {
g.readVertexGroups(termFileName);
}
int const m = g.vertexSize();
int const n = g.edgeSize();
if (opt["st"] && m >= 1) {
g.setColor(g.vertexName(1), 0);
g.setColor(g.vertexName(m), 0);
g.update();
}
mh << "#vertex = " << m << ", #edge = " << n << ", #color = "
//.........这里部分代码省略.........