[Fawkes Git] branch/bschaepers/asp-aspect: 4 revs updated. (0.5.0-3385-g0c578f5)

Bjoern Schaepers bjoern.schaepers at rwth-aachen.de
Thu Dec 1 20:03:56 CET 2016


Changes have been pushed for the project "Fawkes Robotics Software Framework".

Gitweb: http://git.fawkesrobotics.org/fawkes.git
Trac:   http://trac.fawkesrobotics.org

The branch, bschaepers/asp-aspect has been updated
        to  0c578f53763afea4bf9ef222b054f1b5cfa0a8e3 (commit)
       via  559b56aa233d8a8480f0736fa3eab9f39727c203 (commit)
       via  2cf4dc4bb25b6779444375df78550ed4b6e90e67 (commit)
       via  d87b61b714a9c77eea8697d053b42fd9b14c25c2 (commit)
      from  07374426b1c53acc9510a7375fbcc54646810c33 (commit)

http://git.fawkesrobotics.org/fawkes.git/bschaepers/asp-aspect

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- *Log* ---------------------------------------------------------------
commit d87b61b714a9c77eea8697d053b42fd9b14c25c2
Author:     Bjoern Schaepers <bjoern.schaepers at rwth-aachen.de>
AuthorDate: Thu Dec 1 19:57:54 2016 +0100
Commit:     Bjoern Schaepers <bjoern.schaepers at rwth-aachen.de>
CommitDate: Thu Dec 1 19:57:54 2016 +0100

    ASP-Aspect: Use cmake clingo everywhere.

http://git.fawkesrobotics.org/fawkes.git/commit/d87b61b
http://trac.fawkesrobotics.org/changeset/d87b61b

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 2cf4dc4bb25b6779444375df78550ed4b6e90e67
Author:     Bjoern Schaepers <bjoern.schaepers at rwth-aachen.de>
AuthorDate: Thu Dec 1 20:00:49 2016 +0100
Commit:     Bjoern Schaepers <bjoern.schaepers at rwth-aachen.de>
CommitDate: Thu Dec 1 20:00:49 2016 +0100

    ASP-Aspect: Added ability to reset Clingo.
    
    By deleting the Control object, there is no other way to reset it.

http://git.fawkesrobotics.org/fawkes.git/commit/2cf4dc4
http://trac.fawkesrobotics.org/changeset/2cf4dc4

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 559b56aa233d8a8480f0736fa3eab9f39727c203
Author:     Bjoern Schaepers <bjoern.schaepers at rwth-aachen.de>
AuthorDate: Thu Dec 1 20:01:54 2016 +0100
Commit:     Bjoern Schaepers <bjoern.schaepers at rwth-aachen.de>
CommitDate: Thu Dec 1 20:01:54 2016 +0100

    ASP-Aspect: Add possible ground callback.
    
    Within this callback functions can be exported to ASP. We use this at
    least for constants read from fawkes config.

http://git.fawkesrobotics.org/fawkes.git/commit/559b56a
http://trac.fawkesrobotics.org/changeset/559b56a

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
commit 0c578f53763afea4bf9ef222b054f1b5cfa0a8e3
Author:     Bjoern Schaepers <bjoern.schaepers at rwth-aachen.de>
AuthorDate: Thu Dec 1 20:03:36 2016 +0100
Commit:     Bjoern Schaepers <bjoern.schaepers at rwth-aachen.de>
CommitDate: Thu Dec 1 20:03:36 2016 +0100

    ASP-Aspect: Use references for externals.

http://git.fawkesrobotics.org/fawkes.git/commit/0c578f5
http://trac.fawkesrobotics.org/changeset/0c578f5

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


- *Summary* -----------------------------------------------------------
 src/plugins/asp/aspect/Makefile          |    2 +-
 src/plugins/asp/aspect/clingo_access.cpp |  108 ++++++++++++++++++++++-------
 src/plugins/asp/aspect/clingo_access.h   |   14 +++-
 3 files changed, 94 insertions(+), 30 deletions(-)


- *Diffs* -------------------------------------------------------------

- *commit* d87b61b714a9c77eea8697d053b42fd9b14c25c2 - - - - - - - - - -
Author:  Bjoern Schaepers <bjoern.schaepers at rwth-aachen.de>
Date:    Thu Dec 1 19:57:54 2016 +0100
Subject: ASP-Aspect: Use cmake clingo everywhere.

 src/plugins/asp/aspect/Makefile |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/asp/aspect/Makefile b/src/plugins/asp/aspect/Makefile
index 9a43079..3bd268b 100644
--- a/src/plugins/asp/aspect/Makefile
+++ b/src/plugins/asp/aspect/Makefile
@@ -32,7 +32,7 @@ CFLAGS_CLINGO = -DWITH_THREADS=1 \
 	-I $(HOME)/clingo/libgringo \
 	-I $(HOME)/clingo/liblp \
 	-I $(HOME)/clingo/libprogram_opts
-LDFLAGS_CLINGO = -L$(HOME)/clingo/build/debug/ -Wl,-rpath=$(HOME)/clingo/build/debug/ -lclingo
+LDFLAGS_CLINGO = -L$(HOME)/clingo-build/bin -Wl,-rpath=$(HOME)/clingo-build/bin -lclingo
 
 ifeq ($(HAVE_CPP11),1)
   ifeq ($(HAVE_CLINGO),1)

- *commit* 2cf4dc4bb25b6779444375df78550ed4b6e90e67 - - - - - - - - - -
Author:  Bjoern Schaepers <bjoern.schaepers at rwth-aachen.de>
Date:    Thu Dec 1 20:00:49 2016 +0100
Subject: ASP-Aspect: Added ability to reset Clingo.

 src/plugins/asp/aspect/clingo_access.cpp |   89 ++++++++++++++++++++++--------
 src/plugins/asp/aspect/clingo_access.h   |    7 ++-
 2 files changed, 71 insertions(+), 25 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/asp/aspect/clingo_access.cpp b/src/plugins/asp/aspect/clingo_access.cpp
index 3117f04..1705a70 100644
--- a/src/plugins/asp/aspect/clingo_access.cpp
+++ b/src/plugins/asp/aspect/clingo_access.cpp
@@ -148,30 +148,51 @@ ClingoAccess::solvingFinished(const Clingo::SolveResult result)
 }
 
 /**
+ * @brief Allocates the control object and initializes the logger.
+ */
+void
+ClingoAccess::allocControl()
+{
+	assert(!Control);
+	Control = new Clingo::Control({},
+		[this](const Clingo::WarningCode code, char const *msg)
+		{
+			fawkes::Logger::LogLevel level = fawkes::Logger::LL_NONE;
+			switch ( code )
+			{
+				case Clingo::WarningCode::AtomUndefined      :
+				case Clingo::WarningCode::OperationUndefined :
+				case Clingo::WarningCode::RuntimeError       : level = fawkes::Logger::LL_ERROR; break;
+				case Clingo::WarningCode::Other              :
+				case Clingo::WarningCode::VariableUnbounded  : level = fawkes::Logger::LL_WARN; break;
+				case Clingo::WarningCode::FileIncluded       :
+				case Clingo::WarningCode::GlobalVariable     : level = fawkes::Logger::LL_INFO; break;
+			} //switch ( code )
+			Log->log(level, LogComponent.c_str(), msg);
+			return;
+		}, 100);
+	return;
+}
+
+/**
  * @brief Constructor.
  * @param[in] log The used logger.
  * @param[in] logComponent The logging component.
  * @param[in] controlArgs... The arguments for the clingo control constructor.
  */
 ClingoAccess::ClingoAccess(Logger *log, const std::string& logComponent) : Log(log),
-		LogComponent(logComponent.empty() ? "Clingo" : logComponent), Control({},
-			[this](const Clingo::WarningCode code, char const *msg)
-			{
-				fawkes::Logger::LogLevel level = fawkes::Logger::LL_NONE;
-				switch ( code )
-				{
-					case Clingo::WarningCode::AtomUndefined      :
-					case Clingo::WarningCode::OperationUndefined :
-					case Clingo::WarningCode::RuntimeError       : level = fawkes::Logger::LL_ERROR; break;
-					case Clingo::WarningCode::Other              :
-					case Clingo::WarningCode::VariableUnbounded  : level = fawkes::Logger::LL_WARN; break;
-					case Clingo::WarningCode::FileIncluded       :
-					case Clingo::WarningCode::GlobalVariable     : level = fawkes::Logger::LL_INFO; break;
-				} //switch ( code )
-				Log->log(level, LogComponent.c_str(), msg);
-				return;
-			}, 100), Solving(false), Debug(false)
+		LogComponent(logComponent.empty() ? "Clingo" : logComponent), Control(nullptr), Solving(false), Debug(false)
+{
+	allocControl();
+	return;
+}
+
+/**
+ * @brief The destructor.
+ */
+ClingoAccess::~ClingoAccess(void)
 {
+	delete Control;
 	return;
 }
 
@@ -251,7 +272,7 @@ ClingoAccess::startSolving(void)
 		Log->log_info(LogComponent.c_str(), "Start async solving.");
 	} //if ( Debug )
 	Solving = true;
-	Control.solve_async([this](const Clingo::Model& model) { return newModel(model); },
+	Control->solve_async([this](const Clingo::Model& model) { return newModel(model); },
 		[this](const Clingo::SolveResult& result) { solvingFinished(result); return; });
 	return true;
 }
@@ -275,7 +296,7 @@ ClingoAccess::startSolvingBlocking(void)
 		Log->log_info(LogComponent.c_str(), "Start sync solving.");
 	} //if ( Debug )
 	Solving = true;
-	const auto result(Control.solve([this,&locker](const Clingo::Model& model) {
+	const auto result(Control->solve([this,&locker](const Clingo::Model& model) {
 		locker.unlock();
 		const auto ret = newModel(model);
 		locker.relock();
@@ -303,7 +324,27 @@ ClingoAccess::cancelSolving(void)
 	{
 		Log->log_info(LogComponent.c_str(), "Cancel solving.");
 	} //if ( Debug )
-	Control.interrupt();
+	Control->interrupt();
+	return true;
+}
+
+/**
+ * @brief Tries to reset Clingo, that means deletes the control object and creates a new one.
+ * @return If it was an success.
+ */
+bool
+ClingoAccess::reset()
+{
+	if ( Solving )
+	{
+		Log->log_warn(LogComponent.c_str(),
+			"Could not reset while solving. Please try again when the solving is stopped.");
+		cancelSolving();
+		return false;
+	} //if ( Solving )
+	delete Control;
+	Control = nullptr;
+	allocControl();
 	return true;
 }
 
@@ -332,7 +373,7 @@ ClingoAccess::loadFile(const std::string& path)
 	} //if ( Solving )
 
 	Log->log_info(LogComponent.c_str(), "Loading file program file %s.", path.c_str());
-	Control.load(path.c_str());
+	Control->load(path.c_str());
 	return true;
 }
 
@@ -374,7 +415,7 @@ ClingoAccess::ground(const Clingo::PartSpan& parts)
 		} //for ( const auto& part : parts )
 	} //if ( Debug )
 
-	Control.ground(parts);
+	Control->ground(parts);
 
 	if ( Debug )
 	{
@@ -412,7 +453,7 @@ ClingoAccess::assign_external(const Clingo::Symbol atom, const Clingo::TruthValu
 				return ret;
 			}(), atom.to_string().c_str());
 	} //if ( Debug )
-	Control.assign_external(atom, value);
+	Control->assign_external(atom, value);
 	return true;
 }
 
@@ -434,7 +475,7 @@ ClingoAccess::release_external(const Clingo::Symbol atom)
 	{
 		Log->log_info(LogComponent.c_str(), "Releasing %s.", atom.to_string().c_str());
 	} //if ( Debug )
-	Control.release_external(atom);
+	Control->release_external(atom);
 	return true;
 }
 
diff --git a/src/plugins/asp/aspect/clingo_access.h b/src/plugins/asp/aspect/clingo_access.h
index 1afabc8..4fb8379 100644
--- a/src/plugins/asp/aspect/clingo_access.h
+++ b/src/plugins/asp/aspect/clingo_access.h
@@ -45,7 +45,7 @@ class ClingoAccess
 	const std::string LogComponent;
 
 	mutable Mutex ControlMutex;
-	Clingo::Control Control;
+	Clingo::Control *Control;
 	Clingo::SymbolVector ModelSymbols, OldSymbols;
 
 	std::atomic_bool Solving;
@@ -56,10 +56,13 @@ class ClingoAccess
 	bool newModel(const Clingo::Model& model);
 	void solvingFinished(const Clingo::SolveResult result);
 
+	void allocControl(void);
+
 	public:
 	std::atomic_bool Debug;
 
 	ClingoAccess(Logger *log, const std::string& logComponent);
+	~ClingoAccess(void);
 
 	void registerModelCallback(std::shared_ptr<std::function<bool(void)>> callback);
 	void unregisterModelCallback(std::shared_ptr<std::function<bool(void)>> callback);
@@ -71,6 +74,8 @@ class ClingoAccess
 	bool startSolvingBlocking(void);
 	bool cancelSolving(void);
 
+	bool reset(void);
+
 	Clingo::SymbolVector modelSymbols(void) const;
 
 	bool loadFile(const std::string& path);

- *commit* 559b56aa233d8a8480f0736fa3eab9f39727c203 - - - - - - - - - -
Author:  Bjoern Schaepers <bjoern.schaepers at rwth-aachen.de>
Date:    Thu Dec 1 20:01:54 2016 +0100
Subject: ASP-Aspect: Add possible ground callback.

 src/plugins/asp/aspect/clingo_access.cpp |   17 ++++++++++++++++-
 src/plugins/asp/aspect/clingo_access.h   |    3 +++
 2 files changed, 19 insertions(+), 1 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/asp/aspect/clingo_access.cpp b/src/plugins/asp/aspect/clingo_access.cpp
index 1705a70..5289ec6 100644
--- a/src/plugins/asp/aspect/clingo_access.cpp
+++ b/src/plugins/asp/aspect/clingo_access.cpp
@@ -68,6 +68,9 @@ namespace fawkes {
  * @property ClingoAccess::FinishCallbacks
  * @brief The functions to call, when the solving process finished.
  *
+ * @property ClingoAccess::GroundCallback
+ * @brief The callback for the grounding.
+ *
  * @property ClingoAccess::Debug
  * @brief Whether additional debug output is desired.
  */
@@ -246,6 +249,18 @@ ClingoAccess::unregisterFinishCallback(std::shared_ptr<std::function<void(Clingo
 }
 
 /**
+ * @brief Sets the ground callback, to implement custom functions.
+ * @param[in, out] callback The callback, will be moved.
+ */
+void
+ClingoAccess::setGroundCallback(Clingo::GroundCallback&& callback)
+{
+	MutexLocker locker(&CallbackMutex);
+	GroundCallback = std::move(callback);
+	return;
+}
+
+/**
  * @brief Returns whether the solving process is running.
  */
 bool
@@ -415,7 +430,7 @@ ClingoAccess::ground(const Clingo::PartSpan& parts)
 		} //for ( const auto& part : parts )
 	} //if ( Debug )
 
-	Control->ground(parts);
+	Control->ground(parts, GroundCallback);
 
 	if ( Debug )
 	{
diff --git a/src/plugins/asp/aspect/clingo_access.h b/src/plugins/asp/aspect/clingo_access.h
index 4fb8379..289a522 100644
--- a/src/plugins/asp/aspect/clingo_access.h
+++ b/src/plugins/asp/aspect/clingo_access.h
@@ -52,6 +52,7 @@ class ClingoAccess
 	mutable Mutex CallbackMutex;
 	std::vector<std::shared_ptr<std::function<bool(void)>>> ModelCallbacks;
 	std::vector<std::shared_ptr<std::function<void(Clingo::SolveResult)>>> FinishCallbacks;
+	Clingo::GroundCallback GroundCallback;
 
 	bool newModel(const Clingo::Model& model);
 	void solvingFinished(const Clingo::SolveResult result);
@@ -69,6 +70,8 @@ class ClingoAccess
 	void registerFinishCallback(std::shared_ptr<std::function<void(Clingo::SolveResult)>> callback);
 	void unregisterFinishCallback(std::shared_ptr<std::function<void(Clingo::SolveResult)>> callback);
 
+	void setGroundCallback(Clingo::GroundCallback&& callback);
+
 	bool solving(void) const noexcept;
 	bool startSolving(void);
 	bool startSolvingBlocking(void);

- *commit* 0c578f53763afea4bf9ef222b054f1b5cfa0a8e3 - - - - - - - - - -
Author:  Bjoern Schaepers <bjoern.schaepers at rwth-aachen.de>
Date:    Thu Dec 1 20:03:36 2016 +0100
Subject: ASP-Aspect: Use references for externals.

 src/plugins/asp/aspect/clingo_access.cpp |    4 ++--
 src/plugins/asp/aspect/clingo_access.h   |    4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

_Diff for modified files_:
diff --git a/src/plugins/asp/aspect/clingo_access.cpp b/src/plugins/asp/aspect/clingo_access.cpp
index 5289ec6..7cd4cc7 100644
--- a/src/plugins/asp/aspect/clingo_access.cpp
+++ b/src/plugins/asp/aspect/clingo_access.cpp
@@ -446,7 +446,7 @@ ClingoAccess::ground(const Clingo::PartSpan& parts)
  * @return If it could be assigned.
  */
 bool
-ClingoAccess::assign_external(const Clingo::Symbol atom, const Clingo::TruthValue value)
+ClingoAccess::assign_external(const Clingo::Symbol& atom, const Clingo::TruthValue value)
 {
 	MutexLocker locker(&ControlMutex);
 	if ( Solving )
@@ -478,7 +478,7 @@ ClingoAccess::assign_external(const Clingo::Symbol atom, const Clingo::TruthValu
  * @return If it could be released.
  */
 bool
-ClingoAccess::release_external(const Clingo::Symbol atom)
+ClingoAccess::release_external(const Clingo::Symbol& atom)
 {
 	MutexLocker locker(&ControlMutex);
 	if ( Solving )
diff --git a/src/plugins/asp/aspect/clingo_access.h b/src/plugins/asp/aspect/clingo_access.h
index 289a522..9b3c7e8 100644
--- a/src/plugins/asp/aspect/clingo_access.h
+++ b/src/plugins/asp/aspect/clingo_access.h
@@ -85,8 +85,8 @@ class ClingoAccess
 
 	bool ground(const Clingo::PartSpan& parts);
 
-	bool assign_external(const Clingo::Symbol atom, const Clingo::TruthValue value);
-	bool release_external(const Clingo::Symbol atom);
+	bool assign_external(const Clingo::Symbol& atom, const Clingo::TruthValue value);
+	bool release_external(const Clingo::Symbol& atom);
 };
 
 } // end namespace fawkes




-- 
Fawkes Robotics Framework                 http://www.fawkesrobotics.org


More information about the fawkes-commits mailing list