diff options
Diffstat (limited to '')
-rw-r--r-- | docs/doxygen/nel/rule_8cpp-source.html | 555 |
1 files changed, 555 insertions, 0 deletions
diff --git a/docs/doxygen/nel/rule_8cpp-source.html b/docs/doxygen/nel/rule_8cpp-source.html new file mode 100644 index 00000000..90abda60 --- /dev/null +++ b/docs/doxygen/nel/rule_8cpp-source.html @@ -0,0 +1,555 @@ +<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> +<HTML> +<HEAD> + <TITLE>nevrax.org : docs</TITLE> + <LINK REL=stylesheet TYPE="text/css" HREF="http://www.nevrax.org/inc/css/nevrax.css"> + <link href="doxygen.css" rel="stylesheet" type="text/css"> +</HEAD> +<BODY MARGINHEIGHT="0" MARGINWIDTH="0"> + +<!-- uplinks --> +<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0> + <TR> + <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD WIDTH=140 BGCOLOR=#dddddd><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle> <A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A> </TD> + <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle> <A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A> </TD> + </TR> +</TABLE> + +<!-- banner Nevrax --> +<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%> + <TR><TD BGCOLOR="#000000" BACKGROUND="http://www.nevrax.org/inc/img/black_banner.jpg"><A HREF="http://www.nevrax.org"><IMG SRC="http://www.nevrax.org/inc/img/nevrax.gif" WIDTH="170" HEIGHT="45" BORDER=0 ALT="Nevrax" ></A></TD></TR> +</TABLE> + +<!-- main table --> +<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 height=100%> + <TR> + <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="10" BORDER=0 ALT=""></TD> + <TD WIDTH=140 BGCOLOR=#dddddd VALIGN=TOP ALIGN=middle><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT=""> + + <!------ Begin Box ------> + <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR=black><TR><TD><TABLE border=0 cellspacing=2 cellpadding=0 width=120><tr><TD ALIGN=middle bgcolor=black> + <FONT COLOR=white FACE="sans-serif"><B>Nevrax.org</B></FONT></TD></TR><tr><td colspan=2 bgcolor=#FFFFFF> + <TABLE cellspacing=0 cellpadding=1 border=0> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="Rubrique news"><img width=13 height=15 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-news.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="News">News</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Rubrique mail"><img width=15 height=11 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-mail.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Mailing list archive">Mailing-list</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Rubrique docs"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Documentation">Documentation</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="Rubrique cvs"><img width=13 height=17 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-cvs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="CVS Web">CVS</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Rubrique bugs"><img width=20 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-bugs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Bugtracking">Bugs</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="Rubrique license"><img width=18 height=12 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-gpl.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="License">License</a></td></tr> + </TABLE> + </TD></TR></TABLE></TD></TR></TABLE> + <!------ End Box ------> + + </TD> + <TD WIDTH=15><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD ALIGN=left valign=top><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT=""> + +<!-- title --> +<TABLE background="http://www.nevrax.org/inc/img/redline.gif" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td> +<A HREF="http://www.nevrax.org/docs/"><img src="http://www.nevrax.org/inc/img/t_docs.gif" ALT="Docs" HEIGHT=20 BORDER=0></A> +</td><td><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="1" HEIGHT="1" BORDER=0 ALT=""> +</td></tr></table> + + +<!-- block --> +<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD> + <TD><B>Documentation</B></TD> + <TD ALIGN=RIGHT> </td> +</tr></table> +<!-- Generated by Doxygen 1.2.14 --> +<center> +<a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="namespacemembers.html">Namespace Members</a> <a class="qindex" href="functions.html">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> <a class="qindex" href="pages.html">Related Pages</a> <a class="qindexRef" doxygen="_cgi:http://www.nevrax.org/cgi-bin/nel-search.cgi" href="http://www.nevrax.org/cgi-bin/nel-search.cgi">Search</a> </center> +<hr><h1>rule.cpp</h1><a href="rule_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <font class="comment">/* Copyright, 2000 Nevrax Ltd.</font> +00002 <font class="comment"> *</font> +00003 <font class="comment"> * This file is part of NEVRAX <MODULE_NAME>.</font> +00004 <font class="comment"> * NEVRAX <MODULE_NAME> is free software; you can redistribute it and/or modify</font> +00005 <font class="comment"> * it under the terms of the GNU General Public License as published by</font> +00006 <font class="comment"> * the Free Software Foundation; either version 2, or (at your option)</font> +00007 <font class="comment"> * any later version.</font> +00008 <font class="comment"></font> +00009 <font class="comment"> * NEVRAX <MODULE_NAME> is distributed in the hope that it will be useful, but</font> +00010 <font class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</font> +00011 <font class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</font> +00012 <font class="comment"> * General Public License for more details.</font> +00013 <font class="comment"></font> +00014 <font class="comment"> * You should have received a copy of the GNU General Public License</font> +00015 <font class="comment"> * along with NEVRAX <MODULE_NAME>; see the file COPYING. If not, write to the</font> +00016 <font class="comment"> * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,</font> +00017 <font class="comment"> * MA 02111-1307, USA.</font> +00018 <font class="comment"> */</font> +00019 +00020 <font class="preprocessor">#include "<a class="code" href="rule_8h.html">nel/ai/logic/rule.h</a>"</font> +00021 <font class="preprocessor">#include "<a class="code" href="ai__assert_8h.html">nel/ai/logic/ai_assert.h</a>"</font> +00022 <font class="preprocessor">#include "<a class="code" href="valueset_8h.html">nel/ai/logic/valueset.h</a>"</font> +00023 <font class="preprocessor">#include "<a class="code" href="fo__assert_8h.html">nel/ai/logic/fo_assert.h</a>"</font> +00024 +00025 <font class="keyword">namespace </font>NLAILOGIC +00026 { +00027 <font class="keyword">using</font> <font class="keyword">namespace </font>NLAIAGENT; +00028 +<a name="l00029"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a0">00029</a> CRule::CRule() +00030 { +00031 } +00032 +<a name="l00033"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a1">00033</a> CRule::CRule(<a class="code" href="classstd_1_1list.html">std::list<CFactPattern *></a> &conds, <a class="code" href="classstd_1_1list.html">std::list<CFactPattern *></a> &concs) : CClause( conds ) +00034 { +00035 <a class="code" href="classstd_1_1list.html">std::list<CFactPattern *></a>::iterator it_c = concs.begin(); +00036 <font class="keywordflow">while</font> ( it_c != concs.end() ) +00037 { +00038 <a class="code" href="classNLAILOGIC_1_1CRule.html#a5">addConc</a>( *it_c ); +00039 it_c++; +00040 } +00041 } +00042 +<a name="l00043"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a2">00043</a> CRule::CRule(<font class="keyword">const</font> CRule &c) : CClause(c) +00044 { +00045 std::vector<IBaseAssert *>::const_iterator it_c = c._Concs.begin(); +00046 <font class="keywordflow">while</font> ( it_c != c._Concs.end() ) +00047 { +00048 <a class="code" href="classNLAILOGIC_1_1CRule.html#o0">_Concs</a>.push_back( *it_c ); +00049 it_c++; +00050 } +00051 +00052 std::vector< std::vector<sint32> >::const_iterator it_li = c._PosVarsConc.begin(); +00053 <font class="keywordflow">while</font> ( it_li != c._PosVarsConc.end() ) +00054 { +00055 std::vector<sint32>::const_iterator it_i = (*it_li).begin(); +00056 <a class="code" href="classNLAILOGIC_1_1CRule.html#o1">_PosVarsConc</a>.push_back( std::vector<sint32>() ); +00057 +00058 <font class="keywordflow">while</font> ( it_i != (*it_li).end() ) +00059 { +00060 <a class="code" href="classNLAILOGIC_1_1CRule.html#o1">_PosVarsConc</a>.back().push_back( *it_i ) ; +00061 it_i++; +00062 } +00063 it_li++; +00064 } +00065 } +00066 +<a name="l00067"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a6">00067</a> <font class="keywordtype">void</font> CRule::setCond(CClause &c) +00068 { +00069 <font class="comment">/* std::list< std::vector<sint32> >::const_iterator it_li = c._pos_vars.begin();</font> +00070 <font class="comment"> while ( it_li != c._pos_vars.end() )</font> +00071 <font class="comment"> {</font> +00072 <font class="comment"> std::vector<sint32>::const_iterator it_i = (*it_li).begin();</font> +00073 <font class="comment"> _pos_vars.push_back( std::vector<sint32>() );</font> +00074 <font class="comment"></font> +00075 <font class="comment"> while ( it_i != (*it_li).end() )</font> +00076 <font class="comment"> {</font> +00077 <font class="comment"> _pos_vars.back().push_back( *it_i ) ;</font> +00078 <font class="comment"> it_i++;</font> +00079 <font class="comment"> }</font> +00080 <font class="comment"> it_li++;</font> +00081 <font class="comment"> }*/</font> +00082 } +00083 +<a name="l00084"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a4">00084</a> CRule::~CRule() +00085 { +00086 } +00087 +<a name="l00088"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a10">00088</a> <font class="keyword">const</font> <a class="code" href="classNLAIC_1_1IBasicType.html">NLAIC::IBasicType</a> *CRule::clone()<font class="keyword"> const</font> +00089 <font class="keyword"> </font>{ +00090 <a class="code" href="classNLAIC_1_1IBasicInterface.html">NLAIC::IBasicInterface</a> *m = <font class="keyword">new</font> <a class="code" href="classNLAILOGIC_1_1CRule.html#a0">CRule</a>(*<font class="keyword">this</font>); +00091 <font class="keywordflow">return</font> m; +00092 } +00093 +<a name="l00094"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a11">00094</a> <font class="keyword">const</font> <a class="code" href="classNLAIC_1_1IBasicType.html">NLAIC::IBasicType</a> *CRule::newInstance()<font class="keyword"> const</font> +00095 <font class="keyword"> </font>{ +00096 <a class="code" href="classNLAILOGIC_1_1CRule.html#a0">CRule</a> *instance = <font class="keyword">new</font> <a class="code" href="classNLAILOGIC_1_1CRule.html#a0">CRule</a>(); +00097 <font class="keywordflow">return</font> instance; +00098 } +00099 +00100 +<a name="l00101"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a5">00101</a> <font class="keywordtype">void</font> CRule::addConc(CFactPattern *conc) +00102 { +00103 <a class="code" href="classNLAILOGIC_1_1CRule.html#o0">_Concs</a>.push_back( conc->getAssert() ); +00104 +00105 <font class="comment">// Recherche l'assertion</font> +00106 <a class="code" href="types__nl_8h.html#a8">sint32</a> pos_assert= <a class="code" href="classNLAILOGIC_1_1CClause.html#b0">findAssert</a>( conc->getAssert() ); +00107 <font class="keywordflow">if</font> ( pos_assert < 0 ) +00108 { +00109 <a class="code" href="classNLAILOGIC_1_1CClause.html#n7">_Asserts</a>.push_back( conc->getAssert() ); +00110 pos_assert = <a class="code" href="classNLAILOGIC_1_1CClause.html#n7">_Asserts</a>.size(); +00111 } +00112 +00113 <font class="comment">// Recherche si variables à ajouter</font> +00114 std::vector<sint32> pos_vars; +00115 std::vector<IBaseVar *> *vars_conc = conc->getVars(); +00116 <font class="keywordflow">if</font> ( vars_conc ) +00117 { +00118 std::vector<IBaseVar *>::iterator it_conc = vars_conc->begin(); +00119 <font class="keywordflow">while</font> ( it_conc != vars_conc->end() ) +00120 { +00121 <font class="keywordtype">bool</font> found; +00122 <font class="keywordflow">if</font> ( <a class="code" href="classNLAILOGIC_1_1CVarSet.html#n0">_Vars</a>.size() ) +00123 { +00124 found = <font class="keyword">false</font>; +00125 <font class="keywordflow">for</font> (<a class="code" href="types__nl_8h.html#a8">sint32</a> i = 0; i < (sint32)<a class="code" href="classNLAILOGIC_1_1CVarSet.html#n0">_Vars</a>.size() ; i++ ) +00126 { +00127 <font class="keywordflow">if</font> ( ( *it_conc )->getName() == <a class="code" href="classNLAILOGIC_1_1CVarSet.html#n0">_Vars</a>[ i ]->getName() ) +00128 { +00129 found = <font class="keyword">true</font>; +00130 pos_vars.push_back( i ); +00131 } +00132 } +00133 } +00134 <font class="keywordflow">else</font> +00135 found = <font class="keyword">false</font>; +00136 +00137 <font class="keywordflow">if</font> ( !found ) +00138 { +00139 <a class="code" href="classNLAILOGIC_1_1CVarSet.html#n0">_Vars</a>.push_back( (IBaseVar *)(*it_conc)->clone() ); +00140 pos_vars.push_back( <a class="code" href="classNLAILOGIC_1_1CVarSet.html#n0">_Vars</a>.size() - 1); +00141 } +00142 it_conc++; +00143 } +00144 } +00145 +00146 <font class="comment">// Prévenir l'assertion</font> +00147 <font class="keywordflow">if</font> ( conc->getAssert() ) +00148 { +00149 ((CFirstOrderAssert *)conc->getAssert())->addInput( <font class="keyword">this</font>, pos_vars ); +00150 <a class="code" href="classNLAILOGIC_1_1CRule.html#o1">_PosVarsConc</a>.push_back( pos_vars ); +00151 } +00152 +00153 <font class="keywordflow">for</font> ( <a class="code" href="types__nl_8h.html#a8">sint32</a> i = 0; i < (sint32) vars_conc->size(); i++ ) +00154 { +00155 (*vars_conc)[i]->release(); +00156 } +00157 <font class="keyword">delete</font> vars_conc; +00158 } +00159 +<a name="l00160"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a7">00160</a> <font class="keywordtype">void</font> CRule::forward(CVarSet *fp) +00161 { +00162 +00163 } +00164 +<a name="l00165"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a8">00165</a> <font class="keywordtype">void</font> CRule::addConflicts() +00166 { +00167 <font class="comment">// Execute la conclusion de la règle</font> +00168 <a class="code" href="classstd_1_1list.html">std::list<CValueSet *></a>::iterator it_conf = <a class="code" href="classNLAILOGIC_1_1CClause.html#n5">_Conflits</a>.begin(); +00169 <font class="keywordflow">while</font> ( it_conf != <a class="code" href="classNLAILOGIC_1_1CClause.html#n5">_Conflits</a>.end() ) +00170 { +00171 <a class="code" href="types__nl_8h.html#a8">sint32</a> pos = 0; +00172 std::vector<IBaseAssert *>::iterator it_conc = <a class="code" href="classNLAILOGIC_1_1CRule.html#o0">_Concs</a>.begin(); +00173 std::vector< std::vector<sint32> >::iterator it_pos = <a class="code" href="classNLAILOGIC_1_1CRule.html#o1">_PosVarsConc</a>.begin(); +00174 <font class="keywordflow">while</font> ( it_conc != <a class="code" href="classNLAILOGIC_1_1CRule.html#o0">_Concs</a>.end() ) +00175 { +00176 <font class="comment">// Construire le fait correspondant par rapport à la position des variables</font> +00177 CValueSet *conflit = <font class="keyword">new</font> CValueSet( *it_conf , *it_pos ); +00178 +00180 <font class="preprocessor">#ifdef NL_DEBUG</font> +00181 <font class="preprocessor"></font> std::string buf; +00182 std::string buf2; +00183 (*it_conc)->getDebugString( buf ); +00184 conflit->getDebugString( buf2 ); +00185 <font class="preprocessor">#endif</font> +00186 <font class="preprocessor"></font> <font class="comment">//TRACE("\nCONCLUSION DE LA REGLE: \n ASSERTION: %s VALEURS: %s\n", buf, buf2);</font> +00188 <font class="comment"> it_conc++;</font> +00189 } +00190 it_conf++; +00191 pos++; +00192 } +00193 } +00194 +<a name="l00195"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a3">00195</a> <font class="keywordtype">void</font> CRule::init(IObjectIA *<a class="code" href="driver__opengl__extension__def_8h.html#a224">params</a>) +00196 { +00197 <font class="comment">/* if ( params->size() != 3 )</font> +00198 <font class="comment"> {</font> +00199 <font class="comment"> // TODO throw Exc::....</font> +00200 <font class="comment"> }*/</font> +00201 +00202 <font class="comment">// Conditions</font> +00203 <a class="code" href="classNLAILOGIC_1_1CClause.html#a0">CClause</a> *cond = (<a class="code" href="classNLAILOGIC_1_1CClause.html#a0">CClause</a> *) ((IBaseGroupType *)<a class="code" href="driver__opengl__extension__def_8h.html#a224">params</a>)->popFront(); +00204 std::vector<IBaseVar *> *vars = cond->getVars(); +00205 +00206 <font class="keywordtype">int</font> i; +00207 +00208 <font class="keywordflow">for</font> ( i = 0; i < (sint32)vars->size() ; i++ ) +00209 { +00210 <a class="code" href="classNLAILOGIC_1_1CVarSet.html#n0">_Vars</a>.push_back( (IBaseVar *) (* vars)[ i ]-><a class="code" href="classNLAILOGIC_1_1CRule.html#a10">clone</a>() ); +00211 } +00212 +00213 <font class="keywordflow">for</font> ( i = 0; i < (sint32) vars->size() ; i++ ) +00214 (*vars)[i]->release(); +00215 <font class="keyword">delete</font> vars; +00216 cond->release(); +00217 +00218 <font class="comment">// Conclusions</font> +00219 IBaseGroupType *concs = (IBaseGroupType *) ((IBaseGroupType *)<a class="code" href="driver__opengl__extension__def_8h.html#a224">params</a>)->popFront(); +00220 CIteratorContener it_fp = concs->getIterator(); +00221 <a class="code" href="types__nl_8h.html#a8">sint32</a> <a class="code" href="driver__opengl__extension__def_8h.html#a244">s</a> = concs->size(); +00222 <font class="keywordflow">while</font> ( !it_fp.isInEnd() ) +00223 { +00224 CFactPattern *tmp = (CFactPattern *) ( it_fp ++)->clone(); +00225 <a class="code" href="classNLAILOGIC_1_1CRule.html#a5">addConc</a>( tmp); +00226 tmp->release(); +00227 <font class="comment">//it_fp++;</font> +00228 } +00229 +00230 concs->release(); +00231 } +00232 +<a name="l00233"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a9">00233</a> <font class="keyword">const</font> <a class="code" href="classNLAIC_1_1CIdentType.html">NLAIC::CIdentType</a> &CRule::getType()<font class="keyword"> const</font> +00234 <font class="keyword"> </font>{ +00235 <font class="keywordflow">return</font> <a class="code" href="classNLAILOGIC_1_1CRule.html#p0">IdRule</a>; +00236 } +00237 +<a name="l00238"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a12">00238</a> <font class="keywordtype">void</font> CRule::getDebugString(std::string &txt)<font class="keyword"> const</font> +00239 <font class="keyword"> </font>{ +00240 txt += <font class="stringliteral">"CRule\n - Conditions: "</font>; +00241 std::vector<IBaseBoolType *>::const_iterator it_c = <a class="code" href="classNLAILOGIC_1_1CClause.html#n1">_Conds</a>.begin(); +00242 <font class="keywordflow">while</font> ( it_c != <a class="code" href="classNLAILOGIC_1_1CClause.html#n1">_Conds</a>.end() ) +00243 { +00244 std::string buf; +00245 ( *it_c )->getDebugString( buf ); +00246 txt += <font class="stringliteral">" - "</font>; +00247 txt += buf; +00248 it_c++; +00249 } +00250 +00251 txt += <font class="stringliteral">"\n - Conclusions: "</font>; +00252 +00253 std::vector<IBaseAssert *>::const_iterator it_cc = <a class="code" href="classNLAILOGIC_1_1CRule.html#o0">_Concs</a>.begin(); +00254 +00255 <font class="keywordflow">while</font> ( it_cc != <a class="code" href="classNLAILOGIC_1_1CRule.html#o0">_Concs</a>.end() ) +00256 { +00257 std::string buf; +00258 ( *it_cc )->getDebugString( buf ); +00259 txt += <font class="stringliteral">" - "</font>; +00260 txt += buf; +00261 it_cc++; +00262 } +00263 +00264 txt += <font class="stringliteral">"\n - Variables "</font>; +00265 <font class="keywordflow">for</font> (<a class="code" href="types__nl_8h.html#a8">sint32</a> i = 0; i < (sint32)<a class="code" href="classNLAILOGIC_1_1CVarSet.html#n0">_Vars</a>.size(); i++ ) +00266 { +00267 std::string buf; +00268 <a class="code" href="classNLAILOGIC_1_1CVarSet.html#n0">_Vars</a>[ i ]->getDebugString( buf ); +00269 txt += <font class="stringliteral">" - "</font>; +00270 txt += buf; +00271 } +00272 } +00273 +00276 <font class="comment">// Chainage arrière</font> +00277 +00278 +<a name="l00279"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a14">00279</a> CVarSet *CRule::backWard(CFactPattern *fp) +00280 { +00281 <font class="comment">// Vecteur temporaire des variables</font> +00282 <a class="code" href="classNLAILOGIC_1_1CVarSet.html#a0">CVarSet</a> *tmp_vars = <font class="keyword">new</font> <a class="code" href="classNLAILOGIC_1_1CVarSet.html#a0">CVarSet</a>; +00283 <font class="keywordflow">for</font> (<a class="code" href="types__nl_8h.html#a8">sint32</a> i = 0; i < (sint32) <a class="code" href="classNLAILOGIC_1_1CVarSet.html#n0">_Vars</a>.size() ; i++) +00284 tmp_vars->addVar( <a class="code" href="classNLAILOGIC_1_1CVarSet.html#n0">_Vars</a>[i] ); +00285 +00286 <font class="comment">// Trouver l'assertion dans la conclusion</font> +00287 std::vector<IBaseAssert *>::iterator it_a = <a class="code" href="classNLAILOGIC_1_1CRule.html#o0">_Concs</a>.begin(); +00288 std::vector< std::vector<sint32> >::iterator it_p = <a class="code" href="classNLAILOGIC_1_1CRule.html#o1">_PosVarsConc</a>.begin(); +00289 <font class="keywordflow">while</font> ( it_a != <a class="code" href="classNLAILOGIC_1_1CRule.html#o0">_Concs</a>.end() && (*it_a) != fp->getAssert() ) +00290 { +00291 it_a++; +00292 it_p++; +00293 } +00294 <font class="keywordflow">if</font> ( it_a == <a class="code" href="classNLAILOGIC_1_1CRule.html#o0">_Concs</a>.end() ) +00295 <font class="keywordflow">return</font> NULL; +00296 +00297 std::vector<sint32> pos_list = *it_p; +00298 std::vector<sint32>::iterator it_pos = pos_list.begin(); +00299 +00300 <font class="comment">// Unification avec la valeur des variables</font> +00301 <a class="code" href="types__nl_8h.html#a8">sint32</a> <a class="code" href="driver__opengl__extension__def_8h.html#a225">index</a> = 0; +00302 <font class="keywordflow">while</font> ( it_pos != pos_list.end() ) +00303 { +00304 <font class="keywordflow">if</font> ( (*tmp_vars->getVars())[*it_pos]->getValue() == NULL) +00305 (*tmp_vars)[*it_pos]->setValue( (*fp)[<a class="code" href="driver__opengl__extension__def_8h.html#a225">index</a>]->getValue() ); +00306 <font class="keywordflow">else</font> +00307 { +00308 <font class="keywordflow">return</font> NULL; +00309 } +00310 it_pos++; +00311 <a class="code" href="driver__opengl__extension__def_8h.html#a225">index</a>++; +00312 } +00313 <font class="keywordflow">return</font> tmp_vars; +00314 } +00315 +00316 <font class="comment">// Retourne une liste de faits complets</font> +<a name="l00317"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a17">00317</a> <a class="code" href="classstd_1_1list.html">std::list<CValueSet *></a> *CRule::unifyBack(CFactPattern *fp) +00318 { +00319 <a class="code" href="classstd_1_1list.html">std::list<CValueSet *></a> *unified_list = <font class="keyword">new</font> <a class="code" href="classstd_1_1list.html">std::list<CValueSet *></a>; +00320 +00321 <font class="comment">// Vecteur temporaire des variables</font> +00322 <a class="code" href="classNLAILOGIC_1_1CVarSet.html#a0">CVarSet</a> *tmp_vars = <font class="keyword">new</font> <a class="code" href="classNLAILOGIC_1_1CVarSet.html#a0">CVarSet</a>; +00323 <font class="keywordflow">for</font> (<a class="code" href="types__nl_8h.html#a8">sint32</a> i = 0; i < (sint32) <a class="code" href="classNLAILOGIC_1_1CVarSet.html#n0">_Vars</a>.size() ; i++) +00324 tmp_vars->addVar( <a class="code" href="classNLAILOGIC_1_1CVarSet.html#n0">_Vars</a>[i] ); +00325 +00326 <font class="comment">// Trouver l'assertion dans la conclusion</font> +00327 std::vector<IBaseAssert *>::iterator it_a = <a class="code" href="classNLAILOGIC_1_1CRule.html#o0">_Concs</a>.begin(); +00328 std::vector< std::vector<sint32> >::iterator it_p = <a class="code" href="classNLAILOGIC_1_1CRule.html#o1">_PosVarsConc</a>.begin(); +00329 <font class="keywordflow">while</font> ( it_a != <a class="code" href="classNLAILOGIC_1_1CRule.html#o0">_Concs</a>.end() && (*it_a) != fp->getAssert() ) +00330 { +00331 it_a++; +00332 it_p++; +00333 } +00334 <font class="keywordflow">if</font> ( it_a == <a class="code" href="classNLAILOGIC_1_1CRule.html#o0">_Concs</a>.end() ) +00335 <font class="keywordflow">return</font> NULL; +00336 +00337 IBaseAssert *my_assert = *it_a; +00338 +00339 <font class="comment">// Créé la liste des valeurs </font> +00340 <a class="code" href="classstd_1_1list.html">std::list<IObjetOp *></a> *vals = fp->getValues(); +00341 +00342 <font class="comment">// Pour chaque liaison...</font> +00343 <a class="code" href="classstd_1_1list.html">std::list< CValueSet *></a>::iterator it_l = <a class="code" href="classNLAILOGIC_1_1CClause.html#n3">_Liaisons</a>.begin(); +00344 +00345 <font class="keywordflow">while</font> ( it_l != <a class="code" href="classNLAILOGIC_1_1CClause.html#n3">_Liaisons</a>.end() ) +00346 { +00347 CValueSet *<a class="code" href="namespaceNLAISCRIPT.html#a20">l</a> = *it_l; +00348 <font class="keywordtype">bool</font> complete; +00349 CValueSet *result = <a class="code" href="classNLAILOGIC_1_1CRule.html#a13">unifyLiaisonBack</a>( <a class="code" href="namespaceNLAISCRIPT.html#a20">l</a>, *vals, *it_p, complete ); +00350 <font class="keywordflow">if</font> ( result ) +00351 { +00352 <font class="keywordflow">if</font> ( complete ) +00353 { +00354 <font class="comment">// Ceux là on les rajoute direct dans la liste</font> +00355 <font class="comment">//char test[1024 * 2];</font> +00356 <font class="comment">//result->getDebugString( test );</font> +00357 CValueSet *n = fp->asCValueSet(); +00358 <a class="code" href="types__nl_8h.html#a8">sint32</a> pos_r = 0; +00359 std::vector<sint32>::iterator it_i = (*it_p).begin(); +00360 <font class="keywordflow">while</font> ( it_i != (*it_p).end() ) +00361 { +00362 <a class="code" href="types__nl_8h.html#a8">sint32</a> i = *it_i; +00363 <font class="preprocessor">#ifdef NL_DEBUG</font> +00364 <font class="preprocessor"></font> std::string buf; +00365 (*result)[ *it_i ]->getDebugString(buf); +00366 <font class="preprocessor">#endif</font> +00367 <font class="preprocessor"></font> +00368 n->setValue( pos_r, (*result)[ *it_i ] ); +00369 it_i++; +00370 pos_r++; +00371 } +00372 unified_list->push_back( n ); +00373 } +00374 <font class="preprocessor">#ifdef NL_DEBUG</font> +00375 <font class="preprocessor"></font> <font class="keywordflow">else</font> +00376 { +00377 <font class="comment">// Ceux là on continue à les propager en arrière!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!</font> +00378 +00379 std::string <a class="code" href="namespaceNLAISCRIPT.html#a21">test</a>; +00380 result->getDebugString( <a class="code" href="namespaceNLAISCRIPT.html#a21">test</a> ); +00381 } +00382 <font class="preprocessor">#endif</font> +00383 <font class="preprocessor"></font> } +00384 it_l++; +00385 } +00386 <font class="keywordflow">return</font> unified_list; +00387 } +00388 +<a name="l00389"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a16">00389</a> <font class="keywordtype">void</font> CRule::backward( <a class="code" href="classstd_1_1list.html">std::list<CValueSet *></a> *vs ) +00390 { +00391 std::vector<IBaseBoolType *>::iterator it_cond = <a class="code" href="classNLAILOGIC_1_1CClause.html#n1">_Conds</a>.begin(); +00392 <font class="keywordflow">while</font> ( it_cond != <a class="code" href="classNLAILOGIC_1_1CClause.html#n1">_Conds</a>.end() ) +00393 { +00394 <a class="code" href="classstd_1_1list.html">std::list<CValueSet *></a>::iterator it_vs = vs->begin(); +00395 <font class="keywordflow">while</font> ( it_vs != vs->end() ) +00396 { +00397 <font class="comment">// ( (CFirstOrderAssert *) *it_cond )->backward( *it_vs );</font> +00398 it_vs++; +00399 } +00400 it_cond++; +00401 } +00402 } +00403 +00404 CValueSet *CRule::unifyLiaisonBack(CValueSet *liaison, <a class="code" href="classstd_1_1list.html">std::list<IObjetOp *></a> &vals, std::vector<sint32> &pos, <font class="keywordtype">bool</font> &defined) +00405 { +00406 <a class="code" href="types__nl_8h.html#a8">sint32</a> nb_undefined = pos.size(); +00407 CValueSet *unified = <font class="keyword">new</font> CValueSet( *liaison ); +00408 std::vector<sint32>::iterator it_pos = pos.begin(); +00409 <a class="code" href="classstd_1_1list.html">std::list<IObjetOp *></a>::iterator it_v = vals.begin(); +00410 <font class="keywordflow">while</font> ( it_pos != pos.end() ) +00411 { +00412 <a class="code" href="classNLAIAGENT_1_1IObjectIA.html#b0">IObjectIA</a> *l_val = (*unified)[*it_pos]; +00413 <a class="code" href="classNLAIAGENT_1_1IObjectIA.html#b0">IObjectIA</a> *r_val = *it_v; +00414 <a class="code" href="types__nl_8h.html#a8">sint32</a> p = *it_pos; +00415 <font class="keywordflow">if</font> ( !l_val ) +00416 { +00417 <font class="comment">/* if ( r_val )</font> +00418 <font class="comment"> {</font> +00419 <font class="comment"> unified->setValue( p , r_val );</font> +00420 <font class="comment"> nb_undefined--;</font> +00421 <font class="comment"> }*/</font> +00422 } +00423 <font class="keywordflow">else</font> +00424 { +00425 <font class="keywordflow">if</font> ( r_val && ( l_val != r_val ) ) +00426 { +00427 unified->release(); +00428 <font class="keywordflow">return</font> NULL; +00429 } +00430 <font class="keywordflow">else</font> +00431 <font class="keywordflow">if</font> ( r_val ) +00432 nb_undefined--; +00433 } +00434 it_pos++; +00435 it_v++; +00436 } +00437 defined = ( nb_undefined == 0 ); +00438 +00439 <font class="preprocessor">#ifdef NL_DEBUG</font> +00440 <font class="preprocessor"></font> std::string buf; +00441 unified->getDebugString(buf); +00442 <font class="preprocessor">#endif</font> +00443 <font class="preprocessor"></font> +00444 +00445 <font class="keywordflow">return</font> unified; +00446 } +00447 +00448 <font class="comment">// Retourne les assertions avec les positions des variables d'une conclusion dans les conditions</font> +<a name="l00449"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a18">00449</a> <font class="keywordtype">void</font> CRule::getPosListBackward(<a class="code" href="types__nl_8h.html#a8">sint32</a> no_conc, <a class="code" href="types__nl_8h.html#a8">sint32</a> no_cond, std::vector<sint32> &cond_pos) +00450 { +00451 std::vector<sint32>::iterator it_conc = <a class="code" href="classNLAILOGIC_1_1CRule.html#o1">_PosVarsConc</a>[ no_conc ].begin(); +00452 <font class="keywordflow">while</font> ( it_conc != <a class="code" href="classNLAILOGIC_1_1CRule.html#o1">_PosVarsConc</a>[ no_conc ].end() ) +00453 { +00454 std::vector<sint32>::iterator it_cond = <a class="code" href="classNLAILOGIC_1_1CClause.html#n2">_PosVarsCond</a>[ no_cond ].begin(); +00455 <font class="keywordflow">while</font> ( it_cond != <a class="code" href="classNLAILOGIC_1_1CClause.html#n2">_PosVarsCond</a>[ no_cond ].end() ) +00456 { +00457 <font class="keywordflow">if</font> ( (*it_conc) == (*it_cond) ) +00458 { +00459 cond_pos.push_back( *it_cond ); +00460 } +00461 it_cond++; +00462 } +00463 it_conc++; +00464 } +00465 } +00466 +00467 <font class="comment">// Retourne les assertions avec les positions des variables d'une conclusion dans les conditions</font> +<a name="l00468"></a><a class="code" href="classNLAILOGIC_1_1CRule.html#a19">00468</a> <font class="keywordtype">void</font> CRule::getPosListForward(<a class="code" href="types__nl_8h.html#a8">sint32</a> no_cond, <a class="code" href="types__nl_8h.html#a8">sint32</a> no_conc, std::vector<sint32> &conc_pos) +00469 { +00470 std::vector<sint32>::iterator it_cond = <a class="code" href="classNLAILOGIC_1_1CClause.html#n2">_PosVarsCond</a>[ no_cond ].begin(); +00471 <font class="keywordflow">while</font> ( it_cond != <a class="code" href="classNLAILOGIC_1_1CClause.html#n2">_PosVarsCond</a>[ no_cond ].end() ) +00472 { +00473 std::vector<sint32>::iterator it_conc = <a class="code" href="classNLAILOGIC_1_1CRule.html#o1">_PosVarsConc</a>[ no_conc ].begin(); +00474 <font class="keywordflow">while</font> ( it_conc != <a class="code" href="classNLAILOGIC_1_1CRule.html#o1">_PosVarsConc</a>[ no_conc ].end() ) +00475 { +00476 <font class="keywordflow">if</font> ( (*it_cond) == (*it_conc) ) +00477 { +00478 conc_pos.push_back( *it_conc ); +00479 } +00480 it_conc++; +00481 } +00482 it_cond++; +00483 } +00484 } +00485 } +</pre></div> + +<!-- footer --> +<BR><FONT Size=+5> </FONT> +</TD> +<TD WIDTH=15><IMG SRC=http://www.nevrax.org/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD> +</TR> +</TABLE> +</BODY> +</HTML> |