This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/packages/CLPBN/horus/LiftedUtils.cpp

137 lines
2.4 KiB
C++
Raw Normal View History

2012-05-23 14:56:01 +01:00
#include <cassert>
#include <iostream>
#include "LiftedUtils.h"
namespace Horus {
2013-02-07 23:53:13 +00:00
2012-05-23 14:56:01 +01:00
namespace LiftedUtils {
2013-02-07 13:37:15 +00:00
std::unordered_map<std::string, unsigned> symbolDict;
2012-05-23 14:56:01 +01:00
Symbol
2013-02-07 13:37:15 +00:00
getSymbol (const std::string& symbolName)
2012-05-23 14:56:01 +01:00
{
2013-02-07 13:37:15 +00:00
std::unordered_map<std::string, unsigned>::iterator it
2012-05-23 14:56:01 +01:00
= symbolDict.find (symbolName);
if (it != symbolDict.end()) {
return it->second;
} else {
symbolDict[symbolName] = symbolDict.size() - 1;
return symbolDict.size() - 1;
}
}
void
printSymbolDictionary (void)
{
2013-02-07 13:37:15 +00:00
std::unordered_map<std::string, unsigned>::const_iterator it
2012-05-23 14:56:01 +01:00
= symbolDict.begin();
while (it != symbolDict.end()) {
2013-02-07 13:37:15 +00:00
std::cout << it->first << " -> " << it->second << std::endl;
2012-05-28 14:12:18 +01:00
++ it;
2012-05-23 14:56:01 +01:00
}
}
}
std::ostream&
operator<< (std::ostream& os, const Symbol& s)
2012-05-23 14:56:01 +01:00
{
2013-02-07 13:37:15 +00:00
std::unordered_map<std::string, unsigned>::const_iterator it
2012-05-23 14:56:01 +01:00
= LiftedUtils::symbolDict.begin();
while (it != LiftedUtils::symbolDict.end() && it->second != s) {
2012-05-28 14:12:18 +01:00
++ it;
2012-05-23 14:56:01 +01:00
}
assert (it != LiftedUtils::symbolDict.end());
os << it->first;
return os;
}
std::ostream&
operator<< (std::ostream& os, const LogVar& X)
2012-05-23 14:56:01 +01:00
{
2013-02-07 13:37:15 +00:00
const std::string labels[] = {
2012-12-20 23:19:10 +00:00
"A", "B", "C", "D", "E", "F",
2012-05-23 14:56:01 +01:00
"G", "H", "I", "J", "K", "M" };
(X >= 12) ? os << "X_" << X.id_ : os << labels[X];
return os;
}
std::ostream&
operator<< (std::ostream& os, const Tuple& t)
2012-05-23 14:56:01 +01:00
{
os << "(" ;
2012-05-24 22:55:20 +01:00
for (size_t i = 0; i < t.size(); i++) {
2012-05-23 14:56:01 +01:00
os << ((i != 0) ? "," : "") << t[i];
}
os << ")" ;
return os;
}
std::ostream&
operator<< (std::ostream& os, const Ground& gr)
2012-05-23 14:56:01 +01:00
{
os << gr.functor();
os << "(" ;
2012-05-24 22:55:20 +01:00
for (size_t i = 0; i < gr.args().size(); i++) {
2012-05-23 14:56:01 +01:00
if (i != 0) os << ", " ;
os << gr.args()[i];
}
os << ")" ;
return os;
}
LogVars
Substitution::getDiscardedLogVars (void) const
{
LogVars discardedLvs;
2013-02-07 13:37:15 +00:00
std::set<LogVar> doneLvs;
std::unordered_map<LogVar, LogVar>::const_iterator it
= subs_.begin();
2012-05-23 14:56:01 +01:00
while (it != subs_.end()) {
if (Util::contains (doneLvs, it->second)) {
2012-05-23 14:56:01 +01:00
discardedLvs.push_back (it->first);
} else {
doneLvs.insert (it->second);
}
2012-05-28 14:12:18 +01:00
++ it;
2012-05-23 14:56:01 +01:00
}
return discardedLvs;
}
std::ostream&
operator<< (std::ostream& os, const Substitution& theta)
2012-05-23 14:56:01 +01:00
{
2013-02-07 13:37:15 +00:00
std::unordered_map<LogVar, LogVar>::const_iterator it;
2012-05-23 14:56:01 +01:00
os << "[" ;
it = theta.subs_.begin();
while (it != theta.subs_.end()) {
if (it != theta.subs_.begin()) os << ", " ;
os << it->first << "->" << it->second ;
++ it;
}
os << "]" ;
return os;
}
} // namespace Horus
2013-02-07 23:53:13 +00:00