00001 #ifndef REBECCA_FRAMEWORK_CONDITION_H 00002 #define REBECCA_FRAMEWORK_CONDITION_H 00003 00004 /* 00005 * RebeccaAIML, Artificial Intelligence Markup Language 00006 * C++ api and engine. 00007 * 00008 * Copyright (C) 2005,2006,2007 Frank Hassanabad 00009 * 00010 * This file is part of RebeccaAIML. 00011 * 00012 * RebeccaAIML is free software; you can redistribute it and/or modify 00013 * it under the terms of the GNU General Public License as published by 00014 * the Free Software Foundation; either version 3 of the License, or 00015 * (at your option) any later version. 00016 * 00017 * RebeccaAIML is distributed in the hope that it will be useful, 00018 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00020 * GNU General Public License for more details. 00021 * 00022 * You should have received a copy of the GNU General Public License 00023 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00024 */ 00025 00026 /* Disable Windows VC 7.x warning about 00027 * shared_ptr needing dll-interface and 00028 * about it ignoring the throw specification 00029 */ 00030 #ifdef _WIN32 00031 # pragma warning ( push ) 00032 # pragma warning( disable : 4251 ) 00033 # pragma warning( disable : 4290 ) 00034 #endif 00035 00036 //Rebecca includes 00037 #include <rebecca/framework/InnerTemplateListImpl.h> 00038 00039 namespace rebecca 00040 { 00041 namespace framework 00042 { 00043 namespace impl 00044 { 00045 00046 /* 00047 * Forward declerations 00048 */ 00049 00060 class ConditionImpl; 00061 class GraphBuilderFramework; 00062 00074 class REBECCA_EXPORT Condition : public InnerTemplate 00075 { 00076 public: 00077 00089 Condition() 00090 throw(InternalProgrammerErrorException &); 00091 00104 virtual StringPimpl getString() const 00105 throw(InternalProgrammerErrorException &); 00106 00119 virtual void add(InnerTemplate *tag) 00120 throw(InternalProgrammerErrorException &); 00121 00133 virtual void addCharacters(const StringPimpl &characters) 00134 throw(InternalProgrammerErrorException &); 00135 00147 virtual void setAttribute(const StringPimpl &name, 00148 const StringPimpl &value) 00149 throw(InternalProgrammerErrorException &); 00150 00167 virtual bool isBlockCondition() const 00168 throw(InternalProgrammerErrorException &); 00169 00189 virtual bool isSinglePredicateCondition() const 00190 throw(InternalProgrammerErrorException &); 00191 00210 virtual bool isMutliPredicateCondition() const 00211 throw(InternalProgrammerErrorException &); 00212 00217 virtual ~Condition(); 00218 00219 private: 00220 00231 ConditionImpl *m_pimpl; 00232 }; 00233 00234 } //end of namespace impl 00235 00236 //Expose just the class name to the framework namespace 00237 using rebecca::framework::impl::Condition; 00238 00239 } //end of namespace framework 00240 } //end of namespace rebecca 00241 00242 #ifdef _WIN32 00243 # pragma warning ( pop ) 00244 #endif 00245 00246 #endif