|
From: <jom...@us...> - 2015-12-08 20:19:46
|
Revision: 1864
http://sourceforge.net/p/jason/svn/1864
Author: jomifred
Date: 2015-12-08 20:19:43 +0000 (Tue, 08 Dec 2015)
Log Message:
-----------
update mind inspector to support name spaces
Modified Paths:
--------------
trunk/src/jason/asSemantics/Unifier.java
trunk/src/jason/asSyntax/ASSyntax.java
trunk/src/jason/asSyntax/Atom.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/jason/asSyntax/LiteralImpl.java
trunk/src/jason/asSyntax/Pred.java
trunk/src/jason/asSyntax/VarTerm.java
trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
trunk/src/jason/asSyntax/parser/as2j.java
trunk/src/jason/bb/DefaultBeliefBase.java
trunk/src/test/NSTest.java
trunk/src/xml/agInspection.xsl
Modified: trunk/src/jason/asSemantics/Unifier.java
===================================================================
--- trunk/src/jason/asSemantics/Unifier.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSemantics/Unifier.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -362,7 +362,7 @@
Literal lvl = (Literal)vl;
if (! unifiesNamespace(vt, lvl) )
return false;
- if ( lvl.getNS() != Literal.DefaultNS)
+ if (lvl.getNS() != Literal.DefaultNS)
vl = lvl.cloneNS(Literal.DefaultNS);
}
@@ -370,7 +370,7 @@
vl = new CyclicTerm((Literal)vl, (VarTerm)vt.clone());
}
- function.put((VarTerm) vt.clone(), vl);
+ function.put((VarTerm) vt.cloneNS(Literal.DefaultNS), vl);
return true;
}
Modified: trunk/src/jason/asSyntax/ASSyntax.java
===================================================================
--- trunk/src/jason/asSyntax/ASSyntax.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/ASSyntax.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -66,6 +66,7 @@
static {
keywords.add(new PredicateIndicator("atomic", 0));
+ keywords.add(new PredicateIndicator("default", 0));
keywords.add(new PredicateIndicator("source", 0));
keywords.add(new PredicateIndicator("self", 0));
Modified: trunk/src/jason/asSyntax/Atom.java
===================================================================
--- trunk/src/jason/asSyntax/Atom.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/Atom.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -64,7 +64,7 @@
public Atom(Atom namespace, Literal l) {
this.functor = l.getFunctor();
if (namespace.functor.equals("default")) // in case namespace is an ordinary Atom with functor "default", we need to replace by the Default NS
- this.ns = DefaultNS;
+ this.ns = DefaultNS; // TODO: not necessary, the parsers takes care of it
else
this.ns = namespace;
predicateIndicatorCache = l.predicateIndicatorCache;
@@ -172,7 +172,7 @@
public Element getAsDOM(Document document) {
Element u = (Element) document.createElement("structure");
u.setAttribute("functor",getFunctor());
- //u.setAttribute("name-space", getNS().toString());
+ u.setAttribute("name-space", getNS().getFunctor());
return u;
}
}
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/Literal.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -587,6 +587,16 @@
return this;
}
+ @Override
+ public Literal cloneNS(Atom newnamespace) {
+ return this;
+ }
+
+ @Override
+ public Atom getNS() {
+ return this;
+ }
+
public String toString() {
return getFunctor();
};
Modified: trunk/src/jason/asSyntax/LiteralImpl.java
===================================================================
--- trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/LiteralImpl.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -63,7 +63,7 @@
// used by capply
protected LiteralImpl(Literal l, Unifier u) {
- super(l,u);
+ super(l, u);
type = !l.negated();
}
@@ -149,7 +149,7 @@
@Override
public Term capply(Unifier u) {
- return new LiteralImpl(this,u);
+ return new LiteralImpl(this, u);
}
public Literal cloneNS(Atom newNameSpace) {
@@ -175,6 +175,7 @@
@Override
public Element getAsDOM(Document document) {
Element u = (Element) document.createElement("literal");
+ u.setAttribute("name-space", getNS().getFunctor());
if (negated()) {
u.setAttribute("negated", negated()+"");
}
Modified: trunk/src/jason/asSyntax/Pred.java
===================================================================
--- trunk/src/jason/asSyntax/Pred.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/Pred.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -70,7 +70,7 @@
// used by capply
protected Pred(Literal l, Unifier u) {
- super(l,u);
+ super(l, u);
if (l.hasAnnot()) {
setAnnots( (ListTerm)l.getAnnots().capply(u) );
} else {
Modified: trunk/src/jason/asSyntax/VarTerm.java
===================================================================
--- trunk/src/jason/asSyntax/VarTerm.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/VarTerm.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -156,7 +156,7 @@
@Override
public Literal cloneNS(Atom newNameSpace) {
- return new VarTerm( newNameSpace, this);
+ return new VarTerm(newNameSpace, this);
}
public ListTerm cloneLT() {
Modified: trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc
===================================================================
--- trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/parser/AS2JavaParser.jcc 2015-12-08 20:19:43 UTC (rev 1864)
@@ -603,7 +603,9 @@
( (
// namespace
[ LOOKAHEAD(10)
- (tns = <ATOM> { if (!tns.image.equals("default"))
+ (tns = <ATOM> { if (tns.image.equals("default"))
+ NS = Literal.DefaultNS;
+ else
NS = new Atom(tns.image);
}
|
Modified: trunk/src/jason/asSyntax/parser/as2j.java
===================================================================
--- trunk/src/jason/asSyntax/parser/as2j.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/asSyntax/parser/as2j.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -902,7 +902,9 @@
switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
case ATOM:
tns = jj_consume_token(ATOM);
- if (!tns.image.equals("default"))
+ if (tns.image.equals("default"))
+ NS = Literal.DefaultNS;
+ else
NS = new Atom(tns.image);
break;
case VAR:
@@ -1647,13 +1649,19 @@
return false;
}
+ final private boolean jj_3R_61() {
+ if (jj_3R_66()) return true;
+ return false;
+ }
+
final private boolean jj_3R_114() {
if (jj_3R_121()) return true;
return false;
}
- final private boolean jj_3R_61() {
- if (jj_3R_66()) return true;
+ final private boolean jj_3R_60() {
+ if (jj_scan_token(TK_NOT)) return true;
+ if (jj_3R_52()) return true;
return false;
}
@@ -1682,12 +1690,6 @@
return false;
}
- final private boolean jj_3R_60() {
- if (jj_scan_token(TK_NOT)) return true;
- if (jj_3R_52()) return true;
- return false;
- }
-
final private boolean jj_3R_52() {
Token xsp;
xsp = jj_scanpos;
@@ -1720,11 +1722,25 @@
return false;
}
+ final private boolean jj_3R_53() {
+ if (jj_scan_token(52)) return true;
+ if (jj_3R_38()) return true;
+ return false;
+ }
+
final private boolean jj_3R_33() {
if (jj_scan_token(36)) return true;
return false;
}
+ final private boolean jj_3R_38() {
+ if (jj_3R_52()) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_53()) jj_scanpos = xsp;
+ return false;
+ }
+
final private boolean jj_3R_32() {
Token xsp;
xsp = jj_scanpos;
@@ -1735,12 +1751,6 @@
return false;
}
- final private boolean jj_3R_53() {
- if (jj_scan_token(52)) return true;
- if (jj_3R_38()) return true;
- return false;
- }
-
final private boolean jj_3R_17() {
if (jj_scan_token(35)) return true;
if (jj_3R_20()) return true;
@@ -1757,11 +1767,9 @@
return false;
}
- final private boolean jj_3R_38() {
- if (jj_3R_52()) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_53()) jj_scanpos = xsp;
+ final private boolean jj_3R_39() {
+ if (jj_scan_token(50)) return true;
+ if (jj_3R_20()) return true;
return false;
}
@@ -1781,12 +1789,6 @@
return false;
}
- final private boolean jj_3R_39() {
- if (jj_scan_token(50)) return true;
- if (jj_3R_20()) return true;
- return false;
- }
-
final private boolean jj_3R_29() {
if (jj_scan_token(37)) return true;
return false;
@@ -1804,6 +1806,14 @@
return false;
}
+ final private boolean jj_3R_20() {
+ if (jj_3R_38()) return true;
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_39()) jj_scanpos = xsp;
+ return false;
+ }
+
final private boolean jj_3R_16() {
Token xsp;
xsp = jj_scanpos;
@@ -1820,14 +1830,6 @@
return false;
}
- final private boolean jj_3R_20() {
- if (jj_3R_38()) return true;
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_39()) jj_scanpos = xsp;
- return false;
- }
-
final private boolean jj_3R_67() {
if (jj_scan_token(30)) return true;
Token xsp;
@@ -1902,14 +1904,6 @@
return false;
}
- final private boolean jj_3R_46() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_59()) jj_scanpos = xsp;
- if (jj_3R_16()) return true;
- return false;
- }
-
final private boolean jj_3R_56() {
if (jj_3R_42()) return true;
return false;
@@ -1929,6 +1923,14 @@
return false;
}
+ final private boolean jj_3R_46() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_59()) jj_scanpos = xsp;
+ if (jj_3R_16()) return true;
+ return false;
+ }
+
final private boolean jj_3R_75() {
if (jj_scan_token(48)) return true;
if (jj_3R_65()) return true;
@@ -1993,11 +1995,6 @@
return false;
}
- final private boolean jj_3R_45() {
- if (jj_scan_token(34)) return true;
- return false;
- }
-
final private boolean jj_3R_57() {
Token xsp;
xsp = jj_scanpos;
@@ -2011,6 +2008,11 @@
return false;
}
+ final private boolean jj_3R_45() {
+ if (jj_scan_token(34)) return true;
+ return false;
+ }
+
final private boolean jj_3R_120() {
if (jj_3R_19()) return true;
return false;
@@ -2021,16 +2023,6 @@
return false;
}
- final private boolean jj_3R_136() {
- if (jj_scan_token(37)) return true;
- return false;
- }
-
- final private boolean jj_3R_127() {
- if (jj_3R_67()) return true;
- return false;
- }
-
final private boolean jj_3R_79() {
if (jj_scan_token(48)) return true;
if (jj_3R_57()) return true;
@@ -2042,11 +2034,16 @@
return false;
}
- final private boolean jj_3R_139() {
- if (jj_scan_token(46)) return true;
+ final private boolean jj_3R_136() {
+ if (jj_scan_token(37)) return true;
return false;
}
+ final private boolean jj_3R_127() {
+ if (jj_3R_67()) return true;
+ return false;
+ }
+
final private boolean jj_3R_112() {
if (jj_scan_token(42)) return true;
if (jj_3R_20()) return true;
@@ -2054,11 +2051,6 @@
return false;
}
- final private boolean jj_3R_138() {
- if (jj_scan_token(45)) return true;
- return false;
- }
-
final private boolean jj_3R_41() {
if (jj_3R_57()) return true;
Token xsp;
@@ -2069,6 +2061,16 @@
return false;
}
+ final private boolean jj_3R_139() {
+ if (jj_scan_token(46)) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_138() {
+ if (jj_scan_token(45)) return true;
+ return false;
+ }
+
final private boolean jj_3R_137() {
if (jj_scan_token(37)) return true;
return false;
@@ -2082,6 +2084,12 @@
return false;
}
+ final private boolean jj_3R_111() {
+ if (jj_scan_token(37)) return true;
+ if (jj_3R_102()) return true;
+ return false;
+ }
+
final private boolean jj_3R_135() {
Token xsp;
xsp = jj_scanpos;
@@ -2095,14 +2103,14 @@
return false;
}
- final private boolean jj_3R_111() {
- if (jj_scan_token(37)) return true;
- if (jj_3R_102()) return true;
+ final private boolean jj_3R_24() {
+ if (jj_3R_42()) return true;
return false;
}
- final private boolean jj_3R_24() {
- if (jj_3R_42()) return true;
+ final private boolean jj_3R_110() {
+ if (jj_scan_token(38)) return true;
+ if (jj_3R_102()) return true;
return false;
}
@@ -2119,12 +2127,6 @@
return false;
}
- final private boolean jj_3R_110() {
- if (jj_scan_token(38)) return true;
- if (jj_3R_102()) return true;
- return false;
- }
-
final private boolean jj_3R_44() {
if (jj_3R_19()) return true;
return false;
@@ -2171,18 +2173,6 @@
return false;
}
- final private boolean jj_3R_124() {
- Token xsp;
- xsp = jj_scanpos;
- if (jj_3R_126()) jj_scanpos = xsp;
- xsp = jj_scanpos;
- if (jj_3R_127()) {
- jj_scanpos = xsp;
- if (jj_3R_128()) return true;
- }
- return false;
- }
-
final private boolean jj_3R_102() {
Token xsp;
xsp = jj_scanpos;
@@ -2202,6 +2192,18 @@
return false;
}
+ final private boolean jj_3R_124() {
+ Token xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_126()) jj_scanpos = xsp;
+ xsp = jj_scanpos;
+ if (jj_3R_127()) {
+ jj_scanpos = xsp;
+ if (jj_3R_128()) return true;
+ }
+ return false;
+ }
+
final private boolean jj_3R_13() {
Token xsp;
xsp = jj_scanpos;
@@ -2322,6 +2324,11 @@
return false;
}
+ final private boolean jj_3R_49() {
+ if (jj_scan_token(TK_NEG)) return true;
+ return false;
+ }
+
final private boolean jj_3R_122() {
if (jj_scan_token(TK_FOR)) return true;
if (jj_scan_token(42)) return true;
@@ -2331,11 +2338,6 @@
return false;
}
- final private boolean jj_3R_49() {
- if (jj_scan_token(TK_NEG)) return true;
- return false;
- }
-
final private boolean jj_3R_100() {
if (jj_scan_token(38)) return true;
return false;
@@ -2362,11 +2364,6 @@
return false;
}
- final private boolean jj_3R_21() {
- if (jj_scan_token(ATOM)) return true;
- return false;
- }
-
final private boolean jj_3R_77() {
if (jj_3R_95()) return true;
Token xsp;
@@ -2377,6 +2374,11 @@
return false;
}
+ final private boolean jj_3R_21() {
+ if (jj_scan_token(ATOM)) return true;
+ return false;
+ }
+
final private boolean jj_3_4() {
Token xsp;
xsp = jj_scanpos;
@@ -2388,6 +2390,11 @@
return false;
}
+ final private boolean jj_3R_91() {
+ if (jj_3R_67()) return true;
+ return false;
+ }
+
final private boolean jj_3R_35() {
Token xsp;
xsp = jj_scanpos;
@@ -2402,11 +2409,16 @@
return false;
}
- final private boolean jj_3R_91() {
- if (jj_3R_67()) return true;
+ final private boolean jj_3R_90() {
+ if (jj_3R_42()) return true;
return false;
}
+ final private boolean jj_3R_89() {
+ if (jj_3R_78()) return true;
+ return false;
+ }
+
final private boolean jj_3R_19() {
Token xsp;
xsp = jj_scanpos;
@@ -2420,16 +2432,6 @@
return false;
}
- final private boolean jj_3R_90() {
- if (jj_3R_42()) return true;
- return false;
- }
-
- final private boolean jj_3R_89() {
- if (jj_3R_78()) return true;
- return false;
- }
-
final private boolean jj_3R_88() {
if (jj_3R_77()) return true;
return false;
@@ -2440,6 +2442,11 @@
return false;
}
+ final private boolean jj_3R_87() {
+ if (jj_scan_token(58)) return true;
+ return false;
+ }
+
final private boolean jj_3R_125() {
Token xsp;
xsp = jj_scanpos;
@@ -2448,16 +2455,6 @@
return false;
}
- final private boolean jj_3R_87() {
- if (jj_scan_token(58)) return true;
- return false;
- }
-
- final private boolean jj_3R_28() {
- if (jj_3R_46()) return true;
- return false;
- }
-
final private boolean jj_3R_86() {
if (jj_scan_token(57)) return true;
return false;
@@ -2468,6 +2465,11 @@
return false;
}
+ final private boolean jj_3R_28() {
+ if (jj_3R_46()) return true;
+ return false;
+ }
+
final private boolean jj_3R_84() {
if (jj_scan_token(55)) return true;
return false;
@@ -2483,6 +2485,16 @@
return false;
}
+ final private boolean jj_3R_81() {
+ if (jj_scan_token(53)) return true;
+ return false;
+ }
+
+ final private boolean jj_3R_80() {
+ if (jj_scan_token(45)) return true;
+ return false;
+ }
+
final private boolean jj_3R_27() {
if (jj_3R_45()) return true;
return false;
@@ -2500,16 +2512,6 @@
return false;
}
- final private boolean jj_3R_81() {
- if (jj_scan_token(53)) return true;
- return false;
- }
-
- final private boolean jj_3R_80() {
- if (jj_scan_token(45)) return true;
- return false;
- }
-
final private boolean jj_3R_74() {
Token xsp;
xsp = jj_scanpos;
@@ -2559,13 +2561,13 @@
return false;
}
- final private boolean jj_3R_25() {
- if (jj_3R_43()) return true;
+ final private boolean jj_3R_72() {
+ if (jj_3R_77()) return true;
return false;
}
- final private boolean jj_3R_72() {
- if (jj_3R_77()) return true;
+ final private boolean jj_3R_25() {
+ if (jj_3R_43()) return true;
return false;
}
Modified: trunk/src/jason/bb/DefaultBeliefBase.java
===================================================================
--- trunk/src/jason/bb/DefaultBeliefBase.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/jason/bb/DefaultBeliefBase.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -29,7 +29,6 @@
import jason.asSyntax.Literal;
import jason.asSyntax.PredicateIndicator;
-import java.util.ArrayList;
import java.util.Deque;
import java.util.HashSet;
import java.util.Iterator;
@@ -54,17 +53,17 @@
* belsMap is a table where the key is the bel.getFunctorArity and the value
* is a list of literals with the same functorArity.
*/
- private Map<PredicateIndicator, BelEntry> belsMap = new ConcurrentHashMap<PredicateIndicator, BelEntry>();
+ private Map<PredicateIndicator, BelEntry> belsMapDefaultNS = new ConcurrentHashMap<PredicateIndicator, BelEntry>();
+ private Map<Atom, Map<PredicateIndicator, BelEntry>> nameSpaces = new ConcurrentHashMap<Atom, Map<PredicateIndicator,BelEntry>>();
+
private int size = 0;
/** set of beliefs with percept annot, used to improve performance of buf */
protected Set<Literal> percepts = new HashSet<Literal>();
- protected Set<Atom> nameSpaces = new HashSet<Atom>();
-
public DefaultBeliefBase() {
- nameSpaces.add(Literal.DefaultNS);
+ nameSpaces.put(Literal.DefaultNS, belsMapDefaultNS);
}
public void init(Agent ag, String[] args) {
@@ -74,7 +73,7 @@
}
public Set<Atom> getNameSpaces() {
- return nameSpaces;
+ return nameSpaces.keySet();
}
public void stop() {
@@ -87,7 +86,9 @@
public void clear() {
size = 0;
percepts.clear();
- belsMap.clear();
+ belsMapDefaultNS.clear();
+ nameSpaces.clear();
+ nameSpaces.put(Literal.DefaultNS, belsMapDefaultNS);
}
public Iterator<Literal> getPercepts() {
@@ -148,12 +149,10 @@
return true;
}
} else {
- BelEntry entry = belsMap.get(l.getPredicateIndicator());
- if (entry == null) {
- entry = new BelEntry();
- belsMap.put(l.getPredicateIndicator(), entry);
- }
+ // new bel
+
l = l.copy(); // we need to clone l for the consequent event to not have a ref to this bel (which may change before the event is processed); see bug from Viviana Marcardi
+ BelEntry entry = provideBelEntry(l);
entry.add(l, addInEnd);
// add it in the percepts list
@@ -161,15 +160,29 @@
percepts.add(l);
}
- if (l.getNS() != Literal.DefaultNS)
- nameSpaces.add(l.getNS());
-
size++;
return true;
}
return false;
}
+ private BelEntry provideBelEntry(Literal l) {
+ Map<PredicateIndicator, BelEntry> belsMap = belsMapDefaultNS;
+ if (l.getNS() != Literal.DefaultNS) {
+ belsMap = nameSpaces.get(l.getNS());
+ if (belsMap == null) {
+ belsMap = new ConcurrentHashMap<PredicateIndicator, DefaultBeliefBase.BelEntry>();
+ nameSpaces.put(l.getNS(), belsMap);
+ }
+ }
+ BelEntry entry = belsMap.get(l.getPredicateIndicator());
+ if (entry == null) {
+ entry = new BelEntry();
+ belsMap.put(l.getPredicateIndicator(), entry);
+ }
+ return entry;
+ }
+
public boolean remove(Literal l) {
Literal bl = contains(l);
if (bl != null) {
@@ -181,8 +194,6 @@
boolean result = bl.delAnnots(l.getAnnots()); // note that l annots can be empty, in this case, nothing is deleted!
return removeFromEntry(bl) || result;
}
- } else {
- if (logger.isLoggable(Level.FINE)) logger.fine("Does not contain " + l + " in " + belsMap);
}
return false;
}
@@ -191,6 +202,7 @@
if (l.hasSource()) {
return false;
} else {
+ Map<PredicateIndicator, BelEntry> belsMap = l.getNS() == Literal.DefaultNS ? belsMapDefaultNS : nameSpaces.get(l.getNS());
PredicateIndicator key = l.getPredicateIndicator();
BelEntry entry = belsMap.get(key);
entry.remove(l);
@@ -203,36 +215,38 @@
}
public Iterator<Literal> iterator() {
- final Iterator<BelEntry> ibe = belsMap.values().iterator();
- if (ibe.hasNext()) {
- return new Iterator<Literal>() {
+ final Iterator<Map<PredicateIndicator, BelEntry>> ins = nameSpaces.values().iterator();
+ return new Iterator<Literal>() {
+
+ Iterator<BelEntry> ibe = ins.next().values().iterator();
+ Iterator<Literal> il = ibe.next().list.iterator();
+ Literal l;
+
+ public boolean hasNext() {
+ return il.hasNext();
+ }
- Iterator<Literal> il = ibe.next().list.iterator();
- Literal l;
-
- public boolean hasNext() {
- return il.hasNext();
+ public Literal next() {
+ l = il.next();
+ while (!il.hasNext() && ibe.hasNext()) {
+ il = ibe.next().list.iterator();
}
-
- public Literal next() {
- l = il.next();
- while (!il.hasNext() && ibe.hasNext()) {
- il = ibe.next().list.iterator();
- }
- return l;
+ while (!il.hasNext() && !ibe.hasNext() && ins.hasNext()) {
+ ibe = ins.next().values().iterator();
+ il = ibe.next().list.iterator();
}
+
+ return l;
+ }
- public void remove() {
- il.remove();
- if (l.hasAnnot(TPercept)) {
- percepts.remove(l);
- }
- size--;
+ public void remove() {
+ il.remove();
+ if (l.hasAnnot(TPercept)) {
+ percepts.remove(l);
}
- };
- } else {
- return new ArrayList<Literal>(0).iterator();
- }
+ size--;
+ }
+ };
}
/** @deprecated use iterator() instead of getAll */
@@ -241,7 +255,7 @@
}
public boolean abolish(PredicateIndicator pi) {
- BelEntry entry = belsMap.remove(pi);
+ BelEntry entry = belsMapDefaultNS.remove(pi); // TODO: consider other NS (?) this method is not used by jason
if (entry != null) {
size -= entry.size();
@@ -260,6 +274,9 @@
}
public Literal contains(Literal l) {
+ Map<PredicateIndicator, BelEntry> belsMap = l.getNS() == Literal.DefaultNS ? belsMapDefaultNS : nameSpaces.get(l.getNS());
+ if (belsMap == null)
+ return null;
BelEntry entry = belsMap.get(l.getPredicateIndicator());
if (entry == null) {
return null;
@@ -270,7 +287,7 @@
}
public Iterator<Literal> getCandidateBeliefs(PredicateIndicator pi) {
- BelEntry entry = belsMap.get(pi);
+ BelEntry entry = belsMapDefaultNS.get(pi); // TODO: consider other NS ? this method is not used by jason
if (entry != null)
//return Collections.unmodifiableList(entry.list).iterator();
return entry.list.iterator();
@@ -283,10 +300,21 @@
// all bels are relevant
return iterator();
} else {
+ Map<PredicateIndicator, BelEntry> belsMap = belsMapDefaultNS;
+ if (l.getNS() != Literal.DefaultNS) {
+ Atom ns = l.getNS();
+ if (ns.isVar())
+ ns = (Atom)ns.capply(u);
+ if (ns.isVar()) { // still a var
+ return iterator();
+ }
+ belsMap = nameSpaces.get(ns);
+ }
+ if (belsMap == null)
+ return null;
BelEntry entry = belsMap.get(l.getPredicateIndicator());
if (entry != null) {
- //return Collections.unmodifiableList(entry.list).iterator();
- //System.out.println(l+ " ==> " + entry.list);
+ //System.out.println(l.getNS() + "::::"+ l+ " ==> " + entry.list);
return entry.list.iterator();
} else {
return null;
@@ -300,7 +328,7 @@
}
public String toString() {
- return belsMap.toString();
+ return nameSpaces.toString();
}
public BeliefBase clone() {
@@ -315,8 +343,20 @@
int tries = 0;
Element ebels = null;
while (tries < 10) { // max 10 tries
- ebels = (Element) document.createElement("beliefs");
- try {
+ try {
+ ebels = (Element) document.createElement("beliefs");
+ Element enss = (Element) document.createElement("name-spaces");
+ Element ens = (Element) document.createElement("name-space");
+ ens.setAttribute("id", "default"); // to ensure default is the first
+ enss.appendChild(ens);
+ for (Atom ns: getNameSpaces()) {
+ if (ns == Literal.DefaultNS)
+ continue;
+ ens = (Element) document.createElement("name-space");
+ ens.setAttribute("id", ns.getFunctor());
+ enss.appendChild(ens);
+ }
+ ebels.appendChild(enss);
for (Literal l: this)
ebels.appendChild(l.getAsDOM(document));
break; // quit the loop
Modified: trunk/src/test/NSTest.java
===================================================================
--- trunk/src/test/NSTest.java 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/test/NSTest.java 2015-12-08 20:19:43 UTC (rev 1864)
@@ -1,7 +1,5 @@
package test;
-import java.io.StringReader;
-
import jason.JasonException;
import jason.asSemantics.Agent;
import jason.asSemantics.Unifier;
@@ -12,6 +10,10 @@
import jason.asSyntax.VarTerm;
import jason.asSyntax.parser.ParseException;
import jason.asSyntax.parser.as2j;
+
+import java.io.StringReader;
+import java.util.Iterator;
+
import junit.framework.TestCase;
/** JUnit test case for syntax package */
@@ -134,7 +136,6 @@
u = new Unifier();
p6 = ASSyntax.parseLiteral("other::B");
u.unifies(p1, p6);
- System.out.println(u);
assertFalse(u.unifies(p1, p6));
}
@@ -152,6 +153,14 @@
t = t.capply(u);
assertEquals("ns::~bob(10)[a(20)]", t.toString());
+ Literal l = ASSyntax.parseLiteral("f(default)");
+ assertEquals(l.getTerm(0), Literal.DefaultNS);
+ assertTrue(l.getTerm(0) == Literal.DefaultNS);
+ Literal p = ASSyntax.parseLiteral("f(NS)");
+ u = new Unifier();
+ u.unifies(p, l);
+ p = (Literal)p.capply(u);
+ assertTrue(p.getTerm(0) == Literal.DefaultNS);
}
public void testConstants() throws ParseException {
@@ -197,7 +206,8 @@
}
public void testParserNS() throws ParseException, JasonException {
- as2j parser = new as2j(new StringReader("b(10). b(20). b(tell). !g(ok). +!g(X) <- .print(kk, 10, X). "));
+
+ as2j parser = new as2j(new StringReader("b(10). b(20). b(tell). ns71::b(30). default::b(40). !g(ok). +!g(X) <- .print(kk, 10, X). "));
parser.setNS(new Atom("ns33"));
Agent a = new Agent();
a.initAg();
@@ -210,6 +220,17 @@
assertTrue(a.getPL().toString().contains("!ns33::g(ns33::X) <- .print(ns33::kk,10,ns33::X)"));
assertTrue(a.getInitialGoals().toString().equals("[ns33::g(ns33::ok)]"));
+
+ // BB iterator
+ int i = 0;
+ Iterator<Literal> il = a.getBB().iterator();
+ while (il.hasNext()) {
+ //Literal l =
+ il.next();
+ i++;
+ }
+ assertEquals(5,i);
+
}
}
Modified: trunk/src/xml/agInspection.xsl
===================================================================
--- trunk/src/xml/agInspection.xsl 2015-12-08 17:31:53 UTC (rev 1863)
+++ trunk/src/xml/agInspection.xsl 2015-12-08 20:19:43 UTC (rev 1864)
@@ -102,22 +102,28 @@
<xsl:with-param name="ds" select="'Beliefs'" />
</xsl:call-template>
<xsl:if test="$show-bels='true'">
- <td style="{$td-style}">
- <hr/>
- <table cellspacing="0" cellpadding="2">
- <xsl:for-each select="literal">
- <xsl:sort select="structure/@functor" />
- <tr style="{$trh-style}">
- <td style="text-align: left">
- <span style="color: {$bc}">
- <xsl:apply-templates select="." />
- </span>
- <xsl:text>.</xsl:text>
- </td>
- </tr>
- </xsl:for-each>
- </table>
- </td>
+ <td style="{$td-style}">
+ <hr/>
+ <table cellspacing="0" cellpadding="2">
+ <xsl:for-each select="name-spaces/name-space">
+ <xsl:variable name="nsId" select="@id" />
+ <xsl:for-each select="../../literal[@name-space=$nsId]">
+ <xsl:sort select="structure/@functor" />
+ <tr style="{$trh-style}">
+ <td style="text-align: left">
+ <xsl:if test="$nsId != 'default' and position()=1">
+ <br/><b><xsl:value-of select="$nsId" /><xsl:text>::</xsl:text></b> <br/>
+ </xsl:if>
+ <span style="color: {$bc}">
+ <xsl:apply-templates select="." />
+ </span>
+ <xsl:text>.</xsl:text>
+ </td>
+ </tr>
+ </xsl:for-each>
+ </xsl:for-each>
+ </table>
+ </td>
</xsl:if>
</tr>
</xsl:if>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|