00001 /* 00002 * All of the documentation and software included in the 00003 * Alchemy Software is copyrighted by Stanley Kok, Parag 00004 * Singla, Matthew Richardson, Pedro Domingos, Marc 00005 * Sumner and Hoifung Poon. 00006 * 00007 * Copyright [2004-07] Stanley Kok, Parag Singla, Matthew 00008 * Richardson, Pedro Domingos, Marc Sumner and Hoifung 00009 * Poon. All rights reserved. 00010 * 00011 * Contact: Pedro Domingos, University of Washington 00012 * (pedrod@cs.washington.edu). 00013 * 00014 * Redistribution and use in source and binary forms, with 00015 * or without modification, are permitted provided that 00016 * the following conditions are met: 00017 * 00018 * 1. Redistributions of source code must retain the above 00019 * copyright notice, this list of conditions and the 00020 * following disclaimer. 00021 * 00022 * 2. Redistributions in binary form must reproduce the 00023 * above copyright notice, this list of conditions and the 00024 * following disclaimer in the documentation and/or other 00025 * materials provided with the distribution. 00026 * 00027 * 3. All advertising materials mentioning features or use 00028 * of this software must display the following 00029 * acknowledgment: "This product includes software 00030 * developed by Stanley Kok, Parag Singla, Matthew 00031 * Richardson, Pedro Domingos, Marc Sumner and Hoifung 00032 * Poon in the Department of Computer Science and 00033 * Engineering at the University of Washington". 00034 * 00035 * 4. Your publications acknowledge the use or 00036 * contribution made by the Software to your research 00037 * using the following citation(s): 00038 * Stanley Kok, Parag Singla, Matthew Richardson and 00039 * Pedro Domingos (2005). "The Alchemy System for 00040 * Statistical Relational AI", Technical Report, 00041 * Department of Computer Science and Engineering, 00042 * University of Washington, Seattle, WA. 00043 * http://www.cs.washington.edu/ai/alchemy. 00044 * 00045 * 5. Neither the name of the University of Washington nor 00046 * the names of its contributors may be used to endorse or 00047 * promote products derived from this software without 00048 * specific prior written permission. 00049 * 00050 * THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF WASHINGTON 00051 * AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED 00052 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00053 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00054 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY 00055 * OF WASHINGTON OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 00056 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00057 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00058 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00059 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 00060 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00061 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00062 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 00063 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00064 * 00065 */ 00066 #ifndef GROUNDPREDS_H_JUN_28_2005 00067 #define GROUNDPREDS_H_JUN_28_2005 00068 00069 #include "predicate.h" 00070 00071 00072 class GroundPreds 00073 { 00074 public: 00075 GroundPreds() : trueGndPreds_(new PredicateHashArray), 00076 falseGndPreds_(new PredicateHashArray), 00077 unknownGndPreds_(new PredicateHashArray) {} 00078 00079 ~GroundPreds() 00080 { 00081 for (int i=0; i<trueGndPreds_->size();i++) delete (*trueGndPreds_)[i]; 00082 for (int i=0; i<falseGndPreds_->size();i++) delete (*falseGndPreds_)[i]; 00083 for (int i=0; i<unknownGndPreds_->size();i++) delete (*unknownGndPreds_)[i]; 00084 delete trueGndPreds_; 00085 delete falseGndPreds_; 00086 delete unknownGndPreds_; 00087 } 00088 00089 00090 bool contains(Predicate* const & p) 00091 { 00092 return (trueGndPreds_->contains(p) || falseGndPreds_->contains(p) || 00093 unknownGndPreds_->contains(p)); 00094 } 00095 00096 00097 // GroundPreds owns pred and is responsible for deleting it. 00098 void appendTrueGndPred(Predicate* const & p) 00099 { p->setTruthValue(TRUE); trueGndPreds_->append(p); } 00100 00101 // GroundPreds owns pred and is responsible for deleting it. 00102 void appendFalseGndPred(Predicate* const & p) 00103 { p->setTruthValue(FALSE); falseGndPreds_->append(p);} 00104 00105 // GroundPreds owns pred and is responsible for deleting it. 00106 void appendUnknownGndPred(Predicate* const & p) 00107 { p->setTruthValue(UNKNOWN); unknownGndPreds_->append(p); } 00108 00109 00110 // Caller should not delete returned array nor modify its contents. 00111 const PredicateHashArray* getTrueGndPreds() const { return trueGndPreds_; } 00112 const PredicateHashArray* getFalseGndPreds() const { return falseGndPreds_; } 00113 const PredicateHashArray* getUnknownGndPreds() const 00114 {return unknownGndPreds_; } 00115 00116 00117 int getNumTrueGndPreds() const { return trueGndPreds_->size(); } 00118 int getNumFalseGndPreds() const { return falseGndPreds_->size(); } 00119 int getNumUnknownGndPreds() const { return unknownGndPreds_->size(); } 00120 00121 00122 // caller may delete p if it is not originally obtained from GroundPreds 00123 void changeGndPredTruthValue(Predicate* const & pred, 00124 const TruthValue& oldValue, 00125 const TruthValue& newValue) 00126 { 00127 Predicate* ppred = (Predicate*) pred; 00128 Predicate* p = NULL; 00129 if (oldValue==TRUE) p = trueGndPreds_->removeItemFastDisorder(ppred); 00130 else 00131 if (oldValue==FALSE) p = falseGndPreds_->removeItemFastDisorder(ppred); 00132 else 00133 if (oldValue==UNKNOWN) p = unknownGndPreds_->removeItemFastDisorder(ppred); 00134 00135 assert(p); 00136 if (newValue == TRUE) trueGndPreds_->append(p); 00137 else if (newValue == FALSE) falseGndPreds_->append(p); 00138 else if (newValue == UNKNOWN) unknownGndPreds_->append(p); 00139 else assert(false); 00140 } 00141 00142 00143 void compress() 00144 { 00145 trueGndPreds_->compress(); 00146 falseGndPreds_->compress(); 00147 unknownGndPreds_->compress(); 00148 } 00149 00150 00151 private: 00152 PredicateHashArray* trueGndPreds_; 00153 PredicateHashArray* falseGndPreds_; 00154 PredicateHashArray* unknownGndPreds_; 00155 00156 }; 00157 00158 00159 #endif