00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 #ifndef MLNHELPER_H_NOV_4_2005
00067 #define MLNHELPER_H_NOV_4_2005
00068
00069
00070
00071
00072
00073 struct IndexClause
00074 {
00075 IndexClause(const int& iindex, Clause* const & cclause)
00076 : index(iindex), clause(cclause) {}
00077 ~IndexClause() {}
00078 int index;
00079 Clause* clause;
00080 };
00081
00082 class HashIndexClause
00083 {
00084 public:
00085 size_t operator()(IndexClause* const& ic) const
00086 { return ic->clause->hashCode(); }
00087 };
00088
00089 class EqualIndexClause
00090 {
00091 public:
00092 bool operator()(IndexClause* const & ic1, IndexClause* const & ic2) const
00093 { return ic1->clause->same(ic2->clause); }
00094 };
00095
00096 typedef HashArray<IndexClause*, HashIndexClause, EqualIndexClause>
00097 IndexClauseHashArray;
00098
00100
00101
00102
00103
00104
00105 struct PredIdClauseIndex
00106 {
00107 PredIdClauseIndex(const int& ppredId, int* const & cclauseIndex)
00108 : predId(ppredId), clauseIndex(cclauseIndex) {}
00109 ~PredIdClauseIndex() {}
00110 int predId;
00111 int* clauseIndex;
00112 };
00113
00114
00115
00116 struct FormulaClauseIndexes
00117 {
00118 FormulaClauseIndexes(int* const & fformulaIndex, int* const & cclauseIndex)
00119 : formulaIndex(fformulaIndex), clauseIndex(cclauseIndex) {}
00120 ~FormulaClauseIndexes() {}
00121 int* formulaIndex;
00122 int* clauseIndex;
00123 };
00124
00125
00126
00127
00128
00129
00130 struct MLNClauseInfo
00131 {
00132 MLNClauseInfo(const int& iindex, const double& ppriorMean)
00133 : index(iindex), priorMean(ppriorMean) {}
00134 MLNClauseInfo(const int& iindex) : index(iindex), priorMean(0) {}
00135
00136 ~MLNClauseInfo() { predIdsClauseIndexes.deleteItemsAndClear();
00137 formulaClauseIndexes.deleteItemsAndClear(); }
00138 void compress() { predIdsClauseIndexes.compress();
00139 formulaClauseIndexes.compress(); }
00140 int index;
00141 Array<PredIdClauseIndex*> predIdsClauseIndexes;
00142 Array<FormulaClauseIndexes*> formulaClauseIndexes;
00143 double priorMean;
00144 };
00145
00147
00148 struct FormulaAndClauses
00149 {
00150 FormulaAndClauses(const string& fformula, const int& iindex,
00151 const bool& hhasExist)
00152 : formula(fformula), indexClauses(new IndexClauseHashArray), index(iindex),
00153 hasExist(hhasExist), numPreds(-1), isHard(false), priorMean(0), wt(0),
00154 isExistUnique(false) {}
00155 ~FormulaAndClauses() { indexClauses->deleteItemsAndClear();
00156 delete indexClauses; }
00157 string formula;
00158 IndexClauseHashArray* indexClauses;
00159 int index;
00160 bool hasExist;
00161 int numPreds;
00162 bool isHard;
00163 double priorMean;
00164 double wt;
00165 bool isExistUnique;
00166 };
00167
00168 class HashFormulaAndClauses
00169 {
00170 public:
00171 size_t operator()(const FormulaAndClauses* const& f) const
00172 { return hash<char const *>()(f->formula.c_str()); }
00173 };
00174
00175 class EqualHashFormulaAndClauses
00176 {
00177 public:
00178 bool operator()(const FormulaAndClauses* const & f1,
00179 const FormulaAndClauses* const & f2) const
00180 { return (f1->formula.compare(f2->formula)==0); }
00181 };
00182
00183 typedef HashArray<FormulaAndClauses*, HashFormulaAndClauses,
00184 EqualHashFormulaAndClauses> FormulaAndClausesArray;
00185
00186
00187 #endif