Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • cberge/dynamic-graph
  • ostasse/dynamic-graph
  • gsaurel/dynamic-graph
  • stack-of-tasks/dynamic-graph
4 results
Select Git revision
Show changes
Commits on Source (784)
Showing with 2031 additions and 0 deletions
# pre-commit run -a (Guilhem Saurel, 2022-07-27)
e9a222fb0a1f236e534e21c66cb623fd8d25b8d6
# pre-commit: details (Guilhem Saurel, 2022-04-14)
1c0f3cc1048a8b2a8206510a51a237b2f1e68a34
# pre-commit run -a (Guilhem Saurel, 2022-03-30)
0c1e6fb50735d4d6cc93e15d3bef202392d47c5b
# clang format defaults + pre-commit (Guilhem Saurel, 2022-03-30)
b6fc5d81e645a84fa8f4d656371adfb27c2b2b23
# [value] Clang format. (Olivier Stasse, 2022-01-09)
b852eef0d56de04ae91a43b1ddbd837ec69ddbe6
# linters: fix clang-check-12 (Guilhem Saurel, 2021-09-14)
ca1b2fc51540b4fcb2cd0b4fccaa33b02738af41
# reformat for clang-format-12 (Guilhem Saurel, 2021-09-07)
ed5899076b7b11c16d9517295e3826dd9b9d80d2
# format (Guilhem Saurel, 2020-11-13)
c54add29f80f6bcd1d05ca741d472491cf74c180
# format (Guilhem Saurel, 2020-07-22)
f4def3bfeaf0f9c9a6d5c5eb01c3a3b2fbb04b2f
# clang format. (Olivier Stasse, 2020-02-03)
70864112c87365af645f0404f881edf36c1ec734
# [clang] Update format. (Olivier Stasse, 2019-08-26)
384b2078e4962d762db4293bf3396be17df4e5c7
# [clang-format] Comply to Google style. (Olivier Stasse, 2019-08-20)
df48199dd436ba8341ae93c7b1f87eb30d0f457a
_build*
.~
compile_commands.json
include: http://rainboard.laas.fr/project/dynamic-graph/.gitlab-ci.yml
[submodule "cmake"]
path = cmake
url = https://github.com/jrl-umi3218/jrl-cmakemodules.git
#
# This list is used by git-shortlog to fix a few botched name translations
# in the git archive, either because the author's full name was messed up
# and/or not always written the same way, making contributions from the
# same person appearing not to be so or badly displayed.
Anthony Mallet <anthony.mallet@laas.fr>
Olivier Stasse <grxuser@jrl005.a01.aist.go.jp>
Olivier Stasse <olivier.stasse@aist.go.jp>
Olivier Stasse <stasse@dhcpt1243.a02.aist.go.jp>
Olivier Stasse <stasse@jrl005.a01.aist.go.jp>
Olivier Stasse <olivier.stasse@aist.go.jp>
Olivier Stasse <stasse@stasse-laptop.(none)>
Olivier Stasse <olivier.stasse@aist.go.jp>
Olivier Stasse <stasse@dhcpt1059.a02.aist.go.jp>
Olivier Stasse <stasse@jrl005.a01.aist.go.jp>
Olivier Stasse <stasse@jrl005.a02.aist.go.jp>
Olivier Stasse <olivier.stasse@aist.go.jp>
Olivier Stasse <stasse@jrl006.(none)>
Olivier Stasse <stasse@stasse-laptop.(none)>
Nicolas Mansard <nmansard@devgiri.(none)>
Nicolas Mansard <nmansard@jorasse.(none)>
Nicolas Mansard <nmansard@laas.fr>
Florent Lamiraux <florent@big-laptop.(none)>
Florent Lamiraux <florent@dhcpt1253.a02.aist.go.jp>
Florent Lamiraux <florent@florent-laptop.laas.fr>
Florent Lamiraux <florent@florent-laptop.(none)>
Florent Lamiraux <florent@laas.fr>
Florent Lamiraux <Florent Lamiraux florent@laas.fr>
Florent Lamiraux <florent@florent-laptop.(none)>
Florent Lamiraux <Florent Lamiraux florent@laas.fr>
Florent Lamiraux <florent@localhost.localdomain>
Florent Lamiraux <florent@poullenc.laas.fr>
Florent Lamiraux <florent@poullenc.(none)>
ci:
autoupdate_branch: 'devel'
repos:
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: v14.0.6
hooks:
- id: clang-format
args: [--style=Google]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.3.0
hooks:
- id: check-added-large-files
- id: check-ast
- id: check-executables-have-shebangs
- id: check-json
- id: check-merge-conflict
- id: check-symlinks
- id: check-toml
- id: check-yaml
- id: debug-statements
- id: destroyed-symlinks
- id: detect-private-key
- id: end-of-file-fixer
- id: fix-byte-order-marker
- id: mixed-line-ending
- id: trailing-whitespace
- repo: https://github.com/cheshirekow/cmake-format-precommit
rev: v0.6.13
hooks:
- id: cmake-format
This package was written by and with the assistance of
* François Bleibel fbleibel@gmail.com
* François Keith francois.keith@aist.go.jp
* Nicolas Mansard FIXME
* Thomas Moulardd thomas.moulard@gmail.com
* Olivier Stasse olivier.stasse@aist.go.jp
cmake_minimum_required(VERSION 3.1)
# Project properties
set(PROJECT_ORG stack-of-tasks)
set(PROJECT_NAME dynamic-graph)
set(PROJECT_DESCRIPTION "Dynamic graph library")
set(PROJECT_URL "https://github.com/${PROJECT_ORG}/${PROJECT_NAME}")
# Project options
option(SUFFIX_SO_VERSION "Suffix library name with its version" ON)
# Project configuration
set(PROJECT_USE_CMAKE_EXPORT TRUE)
set(CUSTOM_HEADER_DIR ${PROJECT_NAME})
set(CXX_DISABLE_WERROR TRUE)
# Doxygen setup
set(DOXYGEN_USE_MATHJAX YES)
set(DOXYGEN_USE_TEMPLATE_CSS YES)
# JRL-cmakemodule setup
include(cmake/base.cmake)
include(cmake/boost.cmake)
# Project definition
compute_project_args(PROJECT_ARGS LANGUAGES CXX)
project(${PROJECT_NAME} ${PROJECT_ARGS})
check_minimal_cxx_standard(14 ENFORCE)
include(cmake/pthread.cmake) # needs to be included after the CXX definition
# Project dependencies
if(BUILD_TESTING)
find_package(Boost REQUIRED COMPONENTS unit_test_framework)
endif()
add_project_dependency(Boost REQUIRED COMPONENTS serialization system thread)
add_project_dependency(Eigen3 REQUIRED)
search_for_pthread()
if(Boost_VERSION GREATER 107299 OR Boost_VERSION_MACRO GREATER 107299)
# Silence a warning about a deprecated use of boost bind by boost >= 1.73
# without dropping support for boost < 1.73
add_definitions(-DBOOST_BIND_GLOBAL_PLACEHOLDERS)
endif()
# Add configuration headers for plug-ins.
generate_configuration_header(${HEADER_DIR} config-tracer.hh DG_TRACER
tracer_EXPORTS)
generate_configuration_header(${HEADER_DIR} config-tracer-real-time.hh
DG_TRACERREALTIME tracer_real_time_EXPORTS)
# Verbosity level
if(NOT (\"${CMAKE_VERBOSITY_LEVEL}\" STREQUAL \"\"))
add_definitions(-DVP_DEBUG_MODE=${CMAKE_VERBOSITY_LEVEL} -DVP_DEBUG)
endif(NOT (\"${CMAKE_VERBOSITY_LEVEL}\" STREQUAL \"\"))
# Main Library
set(${PROJECT_NAME}_HEADERS
include/${CUSTOM_HEADER_DIR}/fwd.hh
include/${CUSTOM_HEADER_DIR}/debug.h
include/${CUSTOM_HEADER_DIR}/real-time-logger.h
include/${CUSTOM_HEADER_DIR}/real-time-logger-def.h
include/${CUSTOM_HEADER_DIR}/dynamic-graph-api.h
include/${CUSTOM_HEADER_DIR}/entity.h
include/${CUSTOM_HEADER_DIR}/factory.h
include/${CUSTOM_HEADER_DIR}/pool.h
include/${CUSTOM_HEADER_DIR}/exception-abstract.h
include/${CUSTOM_HEADER_DIR}/exception-factory.h
include/${CUSTOM_HEADER_DIR}/exception-signal.h
include/${CUSTOM_HEADER_DIR}/exception-traces.h
include/${CUSTOM_HEADER_DIR}/signal.h
include/${CUSTOM_HEADER_DIR}/signal-array.h
include/${CUSTOM_HEADER_DIR}/signal-base.h
include/${CUSTOM_HEADER_DIR}/signal-ptr.h
include/${CUSTOM_HEADER_DIR}/signal-time-dependent.h
include/${CUSTOM_HEADER_DIR}/signal-ptr.t.cpp
include/${CUSTOM_HEADER_DIR}/signal.t.cpp
include/${CUSTOM_HEADER_DIR}/time-dependency.h
include/${CUSTOM_HEADER_DIR}/time-dependency.t.cpp
# Kept for a brittle backward compatiblity.
include/${CUSTOM_HEADER_DIR}/signal-caster.h
include/${CUSTOM_HEADER_DIR}/signal-cast-helper.h
include/${CUSTOM_HEADER_DIR}/all-signals.h
include/${CUSTOM_HEADER_DIR}/signal-helper.h
include/${CUSTOM_HEADER_DIR}/entity-helper.h
include/${CUSTOM_HEADER_DIR}/tracer.h
include/${CUSTOM_HEADER_DIR}/tracer-real-time.h
include/${CUSTOM_HEADER_DIR}/command.h
include/${CUSTOM_HEADER_DIR}/eigen-io.h
include/${CUSTOM_HEADER_DIR}/linear-algebra.h
include/${CUSTOM_HEADER_DIR}/value.h
include/${CUSTOM_HEADER_DIR}/command-setter.h
include/${CUSTOM_HEADER_DIR}/command-setter.t.cpp
include/${CUSTOM_HEADER_DIR}/command-getter.h
include/${CUSTOM_HEADER_DIR}/command-getter.t.cpp
include/${CUSTOM_HEADER_DIR}/command-direct-getter.h
include/${CUSTOM_HEADER_DIR}/command-direct-setter.h
include/${CUSTOM_HEADER_DIR}/command-bind.h
include/${CUSTOM_HEADER_DIR}/all-commands.h
include/${CUSTOM_HEADER_DIR}/logger.h)
set(${PROJECT_NAME}_SOURCES
src/debug/debug.cpp
src/debug/real-time-logger.cpp
src/debug/logger.cpp
src/dgraph/entity.cpp
src/dgraph/factory.cpp
src/dgraph/pool.cpp
src/exception/exception-abstract.cpp
src/exception/exception-factory.cpp
src/exception/exception-signal.cpp
src/exception/exception-traces.cpp
src/mt/process-list.cpp
src/signal/signal-array.cpp
src/command/value.cpp
src/command/command.cpp)
add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES}
${${PROJECT_NAME}_HEADERS})
modernize_target_link_libraries(
${PROJECT_NAME}
SCOPE
PUBLIC
TARGETS
Eigen3::Eigen
INCLUDE_DIRS
${EIGEN3_INCLUDE_DIR})
target_include_directories(${PROJECT_NAME} PUBLIC $<INSTALL_INTERFACE:include>)
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::serialization Boost::system
Boost::thread)
if(UNIX)
target_link_libraries(${PROJECT_NAME} PUBLIC ${CMAKE_DL_LIBS} pthread)
endif(UNIX)
if(SUFFIX_SO_VERSION)
set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION})
endif(SUFFIX_SO_VERSION)
install(
TARGETS ${PROJECT_NAME}
EXPORT ${TARGETS_EXPORT_NAME}
DESTINATION lib)
set(DYNAMIC_GRAPH_PLUGINDIR "lib/${PROJECT_NAME}-plugins")
set(PACKAGE_EXTRA_MACROS
"set(DYNAMIC_GRAPH_PLUGINDIR ${DYNAMIC_GRAPH_PLUGINDIR})")
set(PKG_CONFIG_EXTRA "plugindir=${DYNAMIC_GRAPH_PLUGINDIR}")
add_subdirectory(src)
if(BUILD_TESTING)
add_subdirectory(tests)
endif(BUILD_TESTING)
pkg_config_append_libs(${PROJECT_NAME})
install(FILES package.xml DESTINATION share/${PROJECT_NAME})
CHANGELOG
----------------------
[Current]
* remove shell
[v3.0.0]
* Replace jrl-mal with eigen
* Add ostream and isteram operators for Eigen Classes
[v2.5.5]
* Improve Travis support
[v2.5.4]
* Update lib installation path (multiarch portability).
* Allow to access class name of a signal.
* Add Travis and coveralls.io support.
[v2.5.3]
* Synchronize.
* Synchronize.
* Fix -Wcast-qual pulled by -Werror of gcc-4.7
[v2.5.2]
* Update ChangeLog.
* Synchronization
* IVIGIT, added signal-helper (macros to ease the declaration of signals) and entity helper (macros to make the macros of signal-helper possible).
* IVIGIT, added signal-helper (macros to ease the declaration of signals) and entity helper (macros to make the macros of signal-helper possible).
* Fix bug in method PoolStorage::writeGraph.
* Synchronize.
* MacOSX compatibility: avoid dangerous TARGET_LINK_LIBRARIES
* Fix portability issues with Ubuntu 12.04 (64 bits).
* Do not try to delete void*, behavior is undefined.
* Avoid memory loss when calling Value::operator =
* Passing and returning elmt by const reference.
* Add boost::posix_time::ptime as a basic type for signals.
* Add missing include.
* Provide const access to entity map in the pool.
* Add method Entity::getDocString.
* Synchronize.
* Fix build for binutils > 2.22
* Synchronize cmake submodule.
* Added a caster for signal<bool>.
* Added the cmake to compile signal-ptr test.
* Modify the policy for plugin a sigptr in input.
* ivigit.
[v2.5.1]
* Update NEWS.
* Do not hardcode dl, use ${CMAKE_DL_LIBS}.
* Make destructor of TimeDependency virtual.
* Disable a test for mac.
* Revert "Move the definition of some ValueHelper<...>::TypeId to avoid link issues"
* Move the definition of some ValueHelper<...>::TypeId to avoid link issues
* Add missing header inclusion
* Win32: Correct a wrong macro
* Win32: Correct the importation/exportation of symbols
* For compatibility, added a static function to bind the singleton.
[v2.5]
* Entity has no more CLASS_NAME static member.
* Account for the Entity::getClassName becoming pure virtual.
* Pass the getclassName to pure virtual.
* Make package pass tests successfully.
* Cosmetic change.
* SignalCaster class is now a singleton.
* FactoryStorage and PoolStorage are now singletons.
* Add helper macro for entity declaration. Use it when possible.
* Rewrite an error message.
* Win32: Correct a link issue
* A cleaner way to define the suffix of the dynamic libraries according to each OS
* Add missing link directory command (f-kiss).
* Make getClassName method const
* Correct a bug in previous commit.
* Added command 4.
* Problem of automatic typing with templates.
* Add nullptr class.
* Corrected function to inline to avoid multiple symbole definition.
* Added a function to test for the existence of a named entity.
* Code cleaning after rewriting (marginal) of sig-cast. Introduction of a specific tracer behaviour for matrix and vector.
* Corrected a segfault problem in the test pool. The problem at the global level remains. At least, the test passes now.
* Modify the g_caster object with a singleton design.
* Reforge the caster for signals.
* Remove a duplicated command.
* IVIGIT: transfert some code and automatic-code-generation macros from sot-core to dg.
* Added new-style command for the two entities.
* Put back the dirty removal of Florent.
* Revert "Set version number as 1.99."
* Value::operator== does nothing when a = a.
* Do not deregister entity in entity destructor. It is deregistered by the pool.
* Use getClassName() instead of CLASS_NAME in Entity constructor.
* Set version number as 1.99.
* Modify deallocation of poolStorage object in order to fix a memory bug.
* Rename poolStorage::entity -> poolStorage::entityMap.
* Added command 3 params.
* Remove unnecessary virtual keyword.
* Added a function to access directly a given command, with protection.
* Added the command 2 args (what a funny code to write).
* Put back mistakenly removed method pool::getSignal.
* Added all-commnds in the cmake list.
* IVIGIT.
* Clean up: remove interpreter.
* Revert "Add method to interprete a string as a python command in class Interpreter."
* Revert "Link libdynamicgraph.so with libpython"
* Added a bind for commands on std::ostream.
* Added missing include.
* Added an alias for EMPTY_ARG for readibility.
* IVIGIT.
* Add read access to Entity::signalMap.
* IVIGIT.
* Added an helper to get the Value::TypeID directly from the type.
* Link libdynamicgraph.so with libpython
* Corrected a warning uninitialized value.
* Add method to interprete a string as a python command in class Interpreter.
* Add a method returning the list of type names registered for signals.
* Cosmetic changes.
* Make exception messages more explicit.
* When registering a type, store pointer to type_info in a map
* Add cast registerer for maal matrix and vector types
* Make error message more explicit.
* Synchronize cmake submodule
* Add a test to check Value assignment operator.
* Fix Value::operator=.
* Add dependency to jrl-mal
* Command constructor takes a documentation string as input.
* Remove debug output
* Fix double free error
* Remove debug output
* Add support for vector and matrix
* Synchronize
* Fix compilation error messages after rebase
* Re-introduce files in CMakeLists.txt that were lost in rebase
* Fix bug in copy constructor of Value class
* Support more type for command parameters
* Add some documentation
* Make function return values instead of reference to values.
* Fix memory issue and changed class name AnyType -> EitherType.
* Add template getter command
* Fix implementation of command-setter.
* Re-implement value getter in a nicer way.
* Fix several memory errors
* Implement command
[v1.2.1]
* Add install files for building debian package.
* Modify changelog.
* [debian] First round of fixes for binary package generation.
* Win32: Correct a link issue
* A cleaner way to define the suffix of the dynamic libraries according to each OS
* Correct library name for mac and windows in the test for interpreter
* Add missing link_directories command
* Synchronize.
* Add tracer test.
* Fix method documentation in factory.h.
* Comment classes.
* Complete forward declarations list in fwd.hh.
* Remove obsolete documentation.
* Fix warnings detected by clang.
* Update man pages.
* Update dg-shell-plugin to match new dg-shell usage.
* Remove warnings found by Clang.
* Install dynamic-graph scripts.
* Add dynamic-graph scripts.
* Enhance dg-shell.
* Use modern C++ comment style for headers.
* Improve error management in import.
* Enhance import to avoid importing a module twice.
* Enhance import to support plug-in, use Boost.Filesytem.
* Clean code.
* Add tests for plug-in loading/unloading.
* Fix bad exception rethrow.
* Enhance run command error message.
* Clean interpreter test.
* Add tests for interpreter.
* Fix cppcheck errors.
* Make cast registerer more robust.
* Clean signal-caster.h.
* Convert test_signalcast into unit test.
* Convert test_depend example into depend unit test.
* Fix factory test.
* Convert test_pool.cpp example in pool.cpp unit test.
* Test FactoryStorage.
* Make tests more robust.
* Clean and document factoryStorage.
* Make ExceptionAbstract::getCode() const.
* Clean DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN macro.
* Add custom entity test.
* Make DYNAMICGRAPH_FACTORY_ENTITY_PLUGIN more robust.
* Remove wrong comment.
* Enhance Entity test case.
* Add unit test for Entity class.
* Clean unit tests compilation.
[v1.2.0]
* Remove unwanted debug call.
* Synchronize.
* Synchronize
* Synchronize
* Synchronize
* Synchronize
* Synchronize.
* Synchronize
* Add missing SETUP_PROJECT_CPACK.
* Include cpack to geneate 8.04 Ubuntu package.
* Synchronize.
* Synchronize
* Synchronize
* Remove the macro BUILDING_'PKG' and use the one defined by header.cmake instead
* Add missing Boost flags for the projects in tools
* Correct dependencies between projects
* Lighten CMakelists by removing win32 flags (now in cmake)
* Declare boost include directories for proper boost detection. Sometimes, the boost install path is *different* from the default include paths!
* Fix relative path in link_directories.
* Fix warnings.
* Enable -Werror.
* Synchronize.
* Synchronize.
* Small documentation update.
* Synchronize.
* Synchronize.
* Synchronize.
* Fix pedantic, -Wextra warnings.
* Fix GCC warnings.
* Fix visibility management for all plug-ins.
* Synchronize.
* Switch to generic pthread detection macro.
* Synchronize.
* Switch to new Boost detection macro.
* Convert figure to png.
* Convert figure to png.
* Synchronize.
* * Moved entity.png to doc/figures so that it can be found by doxygen (cannot use the svg version because it breaks the layout in my browser - Chrome). * Corrected some doxygen errors.
* Add extra image path for Doxygen documentation.
* Synchronize.
* Synchronize.
* Use generated config.hh header file for symbol visibility management.
* Set CUSTOM_HEADER_DIR in CMakeLists.txt.
* Synchronize.
* Corrected doxygen errors. Complemented documentation on signals.
* Simplify CMakeLists.txt in unitTesting and add copyright header.
* Switch completely to submodule.
* Add doc as root CMake subdirectory, do not always generate the man page.
* Remove unwanted file.
* Switch documentation to submodule.
* Get rid of generated Makefile.
* Get rid of generated documentation.
* More documentation.
* Updated documentation
* Update HEAD Doxygen documentation. Source commit id: 241e52083f7159ba66f2866c931d51efefd5cfba
* Additional doc.
* Update HEAD Doxygen documentation. Source commit id: 241e52083f7159ba66f2866c931d51efefd5cfba
* Update HEAD Doxygen documentation. Source commit id: 241e52083f7159ba66f2866c931d51efefd5cfba
* Force generation of man pages.
* Modified documentation output dir.
* Added cmake submodule.
* Add a method that return the list of entity types registered in factory
* Fix debian/watch file.
* Add Doxygen documentation for HEAD.
* github generated gh-pages branch
* Fixed bad rethrow.
* Fix import directive (default include path was wrong).
* Expanded documentation.
* Work on documentation.
* Remove trailing whitespaces.
* More documentation stubs.
* Added documentation for most classes in dynamicgraph. Updated css.
* [doc] Files generated from templates are located in BUILD_DIR.
* Separated Tracer entity documentation.
* Updated doxygen configuration file; added documentation for entity Tracer.
* Added import functions for scripts to dynamic-graph (from Thomas Moulard)
* Added preliminary documentation on entities exposed by the package.
[v1.1]
[release.1.1]
* Corrected authors file.
* Release 1.1
* Fix man page list in CMakeLists.txt
* Add mailmap file.
* Add man pages to Debian pacakge.
* Add man pages.
* Rename tools dg- instead of sot-.
[release-1-1]
* Add plug-ins to package.
* Increment build number for the Debian package.
* Add missing build requirement in Debian package.
* Remove .sh extension to installed shell scripts.
* Use mktemp to create temporary file in sot-shell-plugin.sh.
* Install binaries in bin directory.
* Fix shell.sh.cmake.
* Add newline at end of file.
* Fix Debian package (main binary pacakge was missing).
* Update project version to 1.0.0.99
* Debianize package.
* Add license header.
* Add LGPL-3 license.
* Rewrite AUTHORS file.
* Rewrite NEWS file.
* Rewrite README using Markdown syntax.
* Remove INSTALL file.
* Rename README into README.md.
* Getting rid of obsolete autogen.sh file.
* Revert "Added libraries rpath."
* Added libraries rpath.
* Removed automatic definition of VP_DEBUG.
* Added more exception catch codes in interpreter. Should now link correctly with boost libraries. Small debug output changes.
* Correct the exception raised by signalTime
* Changed name of the traces file.
* Changed parts of documentation.
* Removed CMAKE_INSTALL_PREFIX in INSTALL directives.
* Re-added shell-functions plugin (exports functions defined in dynamic-graph to the shell).
* Added support for TOOLS exceptions
* Port Olivier's changes in SOT commit eacfd9544ca
* Enabled thread support (was disabled before because HAVE_LIBBOOST_THREAD was not defined)
* Added SignalCaster tests with shared libraries.
* Add message in exception when a signal type is already registered.
* Adding documentation to cmdPlug.
* Make exception message more explicit
* Do not rethrow exception, since boost exceptions derive from std::exception
* Make ExceptionAbstract derive from std::exception.
* Use stringstream to pass values in set/get test.
* Add message in exception
* Make ExceptionAbstract::getStringMessage const
* Added an example of caster construction for type vector (dummy cast, similar to the default one, just for the tuto).
* Made DefaultSignalCaster public (exported). Added boost::ublas::vector example to test_signalcast.
* Use the correct macro for import/export in functions.h
* Put shell functions firmly into dynamicgraph. Removed plugin. Corrected headers inclusion.
* Removed the EXTRA_LIBRARIES.
* Fix compilation of tests
* Win32: Add some definitions to avoid some verbose warnings
* Win32: Correct API name for contiifstream
* Add the missing "int" in "int main (void)"
* The dependency in dl is unix-specific
* Win32: Correct exportation of g_caster
* Win32: Add the exportation of SignalCast
* Add a missing dependency between tracer-RT and tracer
* Win32: typo in the API
* Win32: Correct typo in the macro name for the API
* Add uninstall target to dynamic-graph.
* Changed linking of exceptions and traces.
* Removed default definition of VP_DEBUG_MODE in cmake (already in header).
* Added tracer plugin to source.
* Reinforce the dependant->dependent policy.
* Reinforce the dependant->dependent policy. Merge the florent branch. Makes the test_depend.cpp test works.
* Reintroduce file that mysteriously disappeared in commit 41e11cc3776c29c91ef
* Cosmetic changes
* Move class Contiifstream into namespace dynamicgraph.
* First version for the interpreter-helper.
* Add -DVP_DEBUG in debug mode.
* Corrected typo 'dependant' -> 'dependent'
* Added auto-generated script to start shell with default plugins loaded.
* Migrate code of plugin shell-functions to main library
* Remove trailing white spaces
* Activate debug tracing by configuration option CMAKE_VERBOSITY_LEVEL * src/CMakeLists.txt.
* Fix documentation generation
* Added UNIX guard for inclusion of dynamic load library in CMakeFiles.
* Add detection of boost.
* Removed all using namespace directives from headers. Some minor resulting bugfixes.
* Separated unit tests and tools. Added ADD_TEST cmake command.
* Added README information. Read me! Removed the test test_factory (need to design a new one)
* Re-added shell functions and procedures.
* Removed all 'sot' references.
* Cosmetic change in CMakeLists.txt
* Now only generated documentation if GENERATE_DOC is ON.
* Added forgotten file all-signals.h
* Added forgotten test file test_signalcast.cpp
* Used signal exceptions for the exceptions thrown by SignalCast.
* Forgot to include some code in the last commit.
* Cast: Unit testing
* Bug fixes following the reintroduction of casts in dynamicgraph.
* Implemented dynamic casting facility from signals to std::streams
* Added two unit tests.
* Added a new test (test_pool).
* Changed CMakeLists to cope for the new headers location. Renamed dynamic-graph-API.h to dynamic-graph-api.h in every header file.
* Rename file according to standard
* Added forgotten header dynamic-graph-API.h
* The package name is now dynamic-graph (this still needs to be changed in the git repository). Updated source files to reflect that change. Clarified CMakeLists, explicited cpp source files for libraries.
* Added two unit tests.
* Added documentation, renamed header paths, corrected CMakeLists accordingly.
* Renamed pkg-config definition file to adhere standards.
* Removed dependencies on all other packages.
* Removed debug hack left in the last commit.
* Type in symbol dgDEBUGFLOW resulted in not being able to load shared libraries. Fixed. Preliminary documentation changes. Re-added INSTALL file.
* dynamicGraph now compiles shared libraries.
* Removed SOT reference (<sot/*.h> --> <dynamicGraph/*.h>)
* Changed version number to 1.0.0
* Wrong file added to git repository (corrected).
* Added forgotten files.
* Configured dynamicGraph package and cmake files. Last-minute adjustment to code for SOT separation (SOT Break)
BSD 2-Clause License
Copyright (c) 2019, CNRS
Author: Stack of Tasks Development Team
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
New in version 2.5.1 - 2011-12-07
Make destructor of TimeDependency virtual.
Do not hardcode dl, use ${CMAKE_DL_LIBS}.
Win32: Correct the importation/exportation of symbols
Win32: Correct a wrong macro
Add missing header inclusion
Disable a test for mac.
For compatibility, added a static function to bind the singleton.
New in version 2.5 - 2011-06-21
New in version 1.1 - 2010-09-30
Configured dynamicGraph package and cmake files. Last-minute adjustment to code for SOT separation (SOT Break)
Added forgotten files.
Wrong file added to git repository (corrected).
New in version 1.0.0
Changed version number to 1.0.0
Removed SOT reference (<sot/*.h> --> <dynamicGraph/*.h>)
dynamicGraph now compiles shared libraries.
Type in symbol dgDEBUGFLOW resulted in not being able to load shared libraries. Fixed. Preliminary documentation changes. Re-added INSTALL file.
Removed debug hack left in the last commit.
Removed dependencies on all other packages.
Renamed pkg-config definition file to adhere standards.
Added documentation, renamed header paths, corrected CMakeLists accordingly.
Added two unit tests.
The package name is now dynamic-graph (this still needs to be changed in the git repository). Updated source files to reflect that change. Clarified CMakeLists, explicited cpp source files for libraries.
Added forgotten header dynamic-graph-API.h
Changed CMakeLists to cope for the new headers location. Renamed dynamic-graph-API.h to dynamic-graph-api.h in every header file.
Added a new test (test_pool).
Added two unit tests.
Implemented dynamic casting facility from signals to std::streams
Bug fixes following the reintroduction of casts in dynamicgraph.
Cast: Unit testing
Forgot to include some code in the last commit.
Used signal exceptions for the exceptions thrown by SignalCast.
Added forgotten test file test_signalcast.cpp
Added forgotten file all-signals.h
Now only generated documentation if GENERATE_DOC is ON.
Cosmetic change in CMakeLists.txt
Removed all 'sot' references.
Re-added shell functions and procedures.
Added README information. Read me! Removed the test test_factory (need to design a new one)
Separated unit tests and tools. Added ADD_TEST cmake command.
Removed all using namespace directives from headers. Some minor resulting bugfixes.
Added UNIX guard for inclusion of dynamic load library in CMakeFiles.
Added auto-generated script to start shell with default plugins loaded.
Corrected typo 'dependant' -> 'dependent'
Added tracer plugin to source.
Removed default definition of VP_DEBUG_MODE in cmake (already in header).
Changed linking of exceptions and traces.
Removed the EXTRA_LIBRARIES.
Put shell functions firmly into dynamicgraph. Removed plugin. Corrected headers inclusion.
Made DefaultSignalCaster public (exported). Added boost::ublas::vector example to test_signalcast.
Added SignalCaster tests with shared libraries.
Enabled thread support (was disabled before because HAVE_LIBBOOST_THREAD was not defined)
Port Olivier's changes in SOT commit eacfd9544ca
Added support for TOOLS exceptions
Re-added shell-functions plugin (exports functions defined in dynamic-graph to the shell).
Removed CMAKE_INSTALL_PREFIX in INSTALL directives.
Changed parts of documentation.
Changed name of the traces file.
Added more exception catch codes in interpreter. Should now link correctly with boost libraries. Small debug output changes.
Merge branch 'master' of git+ssh://softs.laas.fr/git/jrl/frameworks/dynamicGraph
Removed automatic definition of VP_DEBUG.
Added libraries rpath.
Revert "Added libraries rpath."
Francois Keith (11):
Win32: Correct typo in the macro name for the API
Win32: typo in the API
Add a missing dependency between tracer-RT and tracer
Win32: Add the exportation of SignalCast
Win32: Correct exportation of g_caster
The dependency in dl is unix-specific
Add the missing "int" in "int main (void)"
Win32: Correct API name for contiifstream
Win32: Add some definitions to avoid some verbose warnings
Use the correct macro for import/export in functions.h
Correct the exception raised by signalTime
Mansard (1):
Added an example of caster construction for type vector (dummy cast, similar to the default one, just for the tuto).
Olivier Stasse (4):
Add detection of boost.
Fix boost detection
First version for the interpreter-helper.
Add uninstall target to dynamic-graph.
Thomas Moulard (19):
Getting rid of obsolete autogen.sh file.
Rename README into README.md.
Remove INSTALL file.
Rewrite README using Markdown syntax.
Rewrite NEWS file.
Rewrite AUTHORS file.
Add LGPL-3 license.
Add license header.
Debianize package.
Update project version to 1.0.0.99
Fix Debian package (main binary pacakge was missing).
Add newline at end of file.
Fix shell.sh.cmake.
Install binaries in bin directory.
Use mktemp to create temporary file in sot-shell-plugin.sh.
Remove .sh extension to installed shell scripts.
Add missing build requirement in Debian package.
Increment build number for the Debian package.
Add plug-ins to package.
florent (17):
Rename file according to standard
Fix documentation generation
Activate debug tracing by configuration option CMAKE_VERBOSITY_LEVEL * src/CMakeLists.txt.
Remove trailing white spaces
Migrate code of plugin shell-functions to main library
Add -DVP_DEBUG in debug mode.
Move class Contiifstream into namespace dynamicgraph.
Cosmetic changes
Reintroduce file that mysteriously disappeared in commit 41e11cc3776c29c91ef
Fix compilation of tests
Make ExceptionAbstract::getStringMessage const
Add message in exception
Use stringstream to pass values in set/get test.
Make ExceptionAbstract derive from std::exception.
Do not rethrow exception, since boost exceptions derive from std::exception
Make exception message more explicit
Add message in exception when a signal type is already registered.
stasse (3):
Reinforce the dependant->dependent policy. Merge the florent branch. Makes the test_depend.cpp test works.
Reinforce the dependant->dependent policy.
Adding documentation to cmdPlug.
dynamic-graph
=============
[![Building status](https://gitlab.laas.fr/stack-of-tasks/dynamic-graph/badges/master/pipeline.svg)](https://gitlab.laas.fr/stack-of-tasks/dynamic-graph/commits/master)
[![Coverage report](https://gitlab.laas.fr/stack-of-tasks/dynamic-graph/badges/master/coverage.svg?job=doc-coverage)](http://projects.laas.fr/stack-of-tasks/doc/stack-of-tasks/dynamic-graph/master/coverage/)
[![License](https://img.shields.io/badge/License-BSD%202--Clause-green.svg)](https://opensource.org/licenses/BSD-2-Clause)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/stack-of-tasks/dynamic-graph/master.svg)](https://results.pre-commit.ci/latest/github/stack-of-tasks/dynamic-graph)
This software provides an efficient way to modelize a C++ data-flow.
A dynamic graph data-flow is composed of:
* entities (graph nodes)
* signals (input/output of a graph action)
Output signals can then be plugged into input signals to data
transmission.
An efficient caching mechanism avoid useless data recomputation and a
simple built-in language can be used to control the graph actions.
It is released under the [BSD-clause 2](COPYING.LESSER) license.
**Warning:** this repository contains [Git
submodules][git-submodules]. Please clone this repository using the
`git clone --recursive` command. If you already have cloned the
repository, you can run `git submodule init && git submodule update`
to retrieve the submodules.
Documentation
-------------
To get started with this library, please read the [online Doxygen
documentation][doxygen-documentation].
It can also be generated locally by running the `make doc`
command. After the package is installed, the documentation will be
located in the `$prefix/share/doc/dynamic-graph` directoy where
`$prefix` is your installation prefix (`/usr/local` by default).
Getting Help
------------
Support is provided through issues on the github interface.
How can I install dynamic-graph?
--------------------------------
### Installing dependencies
The matrix abstract layer depends on several packages which
have to be available on your machine.
- Libraries:
- [Boost][] (>= 1.40)
- Doxygen
- Eigen3
- pthread
- System tools:
- [CMake][] (>=2.6)
- [pkg-config][]
- usual compilation tools (GCC/G++, make, etc.)
If you are using Ubuntu, these tools are gathered in the `build-essential` package.
### Compiling and installing the package
The manual compilation requires two steps:
1. configuration of the build and generation of the build files
2. compilation of the sources and installation of the package
dynamic-graph uses [CMake][] to generate build files. It is
recommended to create a separate build directory:
```sh
mkdir _build # (1) Create a build directory
cd _build # (2) Go to the newly created build directory
cmake [options] .. # (3) Generate the build files
```
Options which can be passed to CMake are detailed in the next section.
```sh
make # (4) Compile the package
make test # (5) Execute the package tests
make install # (6) Install the package into the prefix (see step 3)
```
### Options
Additional options can be set on the command line through the
following command: `-D<option>=<value>`.
For instance: `cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..` will set
the `CMAKE_BUILD_TYPE` option to the value `RelWithDebInfo`.
Available options are:
- `CMAKE_BUILD_TYPE` set the build profile that should be used (debug,
release, etc.). We recommend `RelWithDebInfo` as it will provide
performances while keeping debugging symbols enabled.
- `CMAKE_INSTALL_PREFIX` set the installation prefix (the directory
where the software will be copied to after it has been compiled).
### Running the test suite
The test suite can be run from your build directory by running:
```sh
make test
```
Please open a ticket if some tests are failing on your computer, it
should not be the case.
Contributing
------------
If you want to contribute, please refer to the
[CONTRIBUTING.md](CONTRIBUTING.md) file
Credits
-------
This package authors are credited in the [AUTHORS](AUTHORS) file.
Available Packages
------------------
* RobotPkg :
http://robotpkg.openrobots.org/robotpkg/motion/dynamic-graph/index.html
[doxygen-documentation]: http://stack-of-tasks.github.io/dynamic-graph/doxygen/HEAD/
[git-submodules]: http://git-scm.com/book/en/Git-Tools-Submodules
[Boost]: http://www.boost.org/
[CMake]: htttp://www.cmake.org/
[Doxygen]: http://www.stack.nl/~dimitri/doxygen/
[Eigen]: http://eigen.tuxfamily.org/
[Git]: http://git-scm.com/
[Libtool]: https://www.gnu.org/software/libtool/
[RobotPkg]: http://robotpkg.openrobots.org/
[log4cxx]: https://logging.apache.org/log4cxx/
[pkg-config]: http://www.freedesktop.org/wiki/Software/pkg-config/
Subproject commit 47c0cbf0b29433060682377dcb28266e8dc38995
This diff is collapsed.
/**
\page debug Debugging
They are several ways to perform debugging in dynamic-graph depending on your
needs or situation:
- Programmatically inside the entity in C++, a logger will
write inside a buffer in a
different thread and output in a stream (either std::cout or a file). It is
detailed in \subpage subp_debug_rt_logger.
It provides 4 levels of messags :(DEBUG,INFO,
WARNING, ERROR). It is described in details here: \subpage subp_logger
- Programmatically in C++ to avoid overhead with macros and handling level as an
int: \subpage subp_dbg_trace .
- If you just need to collect informations from signals (like rosbag). You can
use an entity called Tracer inside the graph:\subpage tracerdoc . <br> A real
time version exists to write directly inside a memory buffer
\subpage tracerrealtimedoc
**/
/**
\page subp_logger Loggers
\section sec_init_rt_logger Initialization of the logger
\subsection subsec_init_rt_logger_hcpp Header and preprocessor variable
In order to activate the logger you need to add the following lines:
\code
#define ENABLE_RT_LOG
#include <dynamic-graph/logger.h>
#include <dynamic-graph/real-time-logger.h>
\endcode
\subsection subsec_logger_ Initialize the output stream
It is possible to set the output stream of the messages inside a file:
\code
dynamicgraph::RealTimeLogger::instance();
of.open("/tmp/dg-LOGS.txt",std::ofstream::out|std::ofstream::app);
dgADD_OSTREAM_TO_RTLOG (of);
dynamicgraph::RealTimeLogger::destroy();
\endcode
\section sec_use_rt_logger Using the rt_logger
\code
// Somewhere in your library
dgRTLOG() << "your message. Prefer to use \n than std::endl."
\endcode
Here the output file is "/tmp/dg-LOGS.txt".
Specifying the file with __FILE__ and the line inside the file by __LINE__ are
necessary for the STREAM messages. Indeed they are indexed using the two values.
The default values "" and 0 for the counting are not well understood.
*/
/**
\page subp_dbg_trace Debugging with macros and level
\section subp_dbg_trace_intro Introduction
The idea of this class and collection of MACROS is to specify
a level for a message, and record the message in a stream according to this
level. In addition there are mechanisms allowing that no time is wasted in
condition test. You can therefore let the debugging messages inside the code
without impact on performances.
\section subp_dbg_trace_set_on_macros Setting up dgDEBUG macros
To allow message display the entity must be compiled with the macro
\code
#define VP_DEBUG 1
\endcode
Commenting or removing this macro disable all the messages specified
by the following macros.
The level up to which the messages are accepted for display is
specified by:
\code
#define VP_DEBUG_MODE 50
\endcode
In the constructor of the entity, the file where all the messages
are written is specified by:
\code
dynamicgraph::dgDEBUGFLOW.openFile("/tmp/dynamic-graph-traces.txt");
\endcode
\section subp_dbg_trace_using_macros Using dgDEBUG macros
To print that the beginning of a method is being executed use the following
macros: \code dgDEBUGIN(5); \endcode 5 here specifies the minimum level that you
be specified by VP_DEBUG_MODE for this message to be displayed.
It will generate the following output:
\code
/path_to/dynamic-graph/tests/debug-trace.cpp: testDebugTrace(#46) :# In {
\endcode
The output displays the name of the source file, the name of the method,
the line where is the macro, and the message itself.
When going out of the method:
\code
dgDEBUGOUT(5);
\endcode
This generates the following output:
\code
/path_to/dynamic-graph/tests/debug-trace.cpp: testDebugTrace(#54) :# Out }
\endcode
A message inside the code is written through:
\code
dgDEBUG(5) << "Here is a test" << std::endl;
\endcode
This generates the following output:
\code
/path_to/dynamic-graph/tests/debug-trace.cpp: testDebugTrace(#52) :Here is a
test \endcode
\section subp_dbg_trace_wrk_exp Working example
A full working example is given here:
\include tests/debug-trace.cpp
*/
/** \page subpage_command Commands
\section subpage_command_intro Quick introduction
Commands are allowing to expand the entities.
It has no real interest in C++, and is mostly targeted to scripting languages
used to manipulate the control graph.
dynamic-graph-python provides a mecanism which is automatically binding command
to python. The main interest for a programmer is that there is no additional
lines to add. It is realized through CMake rules provided by the submodule
jrl-cmakemodules.
\section subpage_command_using Extending entities
\subsection subpage_command_setters_and_getters Setters and getters
To modify a quantity with a special method of your class, it is recommanded to
use Setter.
For instance to specify the size of the state in one entity and calls the
method setStateSize it is possible to write:
\code
docstring = "\n"
" Set size of state vector\n"
"\n";
addCommand("resize", new command::Setter<Device, unsigned int>(
*this, &Device::setStateSize, docstring));
\endcode
Getting the information of the member of the class can be realized with
the following snippet:
\code
addCommand("getTimeStep",
command::makeDirectGetter(
*this, &this->timestep_,
command::docDirectGetter("Time step", "double")));
\endcode
\subsubsection subsubpage_command_void_multiple_args Implementing a command
Templates are provided to create commands returning no value, but with up to
4 arguments.
In order to call the following method:
\code
void four_args(const int &, const int &, const int &, const int &) {
test_four_args_ = true;
}
\endcode
It is sufficient to add in the constructor:
\code
addCommand("4_args",
makeCommandVoid4(
*this, &CustomEntity::four_args,
docCommandVoid4("four args", "int", "int", "int", "int")));
\endcode
The arguments are limited to the types provided by the class Value.
\subsection subpage_command_void_multiple_args Commands returning a value
The templates with the prefix makeCommandReturnType are allowing to return
a type.
For instance to add a command returning a type with two arguments:
\code
std::string two_args_ret(const int &, const int &)
{ test_two_args_ = true; return std::string("return");}
\endcode
In the constructor, the following snippet shows to create the command:
\code
addCommand("2_args_r",
makeCommandReturnType2(
*this, &CustomEntity::two_args_ret,
docCommandVoid2("two args", "int","int")));
\endcode
\section section_calling_a_generic_command Calling a generic command
Of course calling in C++ a command amounts to call directly the method.
However in the context of writing a wrapper for another language,
one may wants to find a command and build the call.
All the commands of an entity are store in a map. The strings storing the
commands name are the map keys.
Therefore calling the previous command can be done with the following snippet:
\code
std::map<const std::string, Command *> aCommandMap =
this->getNewStyleCommandMap();
std::string cmd_name = "4_args";
std::map<const std::string, Command *>::iterator it_map;
it_map = aCommandMap.find(cmd_name);
if (it_map == aCommandMap.end())
int first_arg = 1;
Value aValue(first_arg);
std::vector<Value> values;
for (unsigned int i = 0; i < 4; i++)
values.push_back(aValue);
it_map->second->setParameterValues(values);
it_map->second->execute();
it_map->second->owner();
it_map->second->getDocstring();
\endcode
when returning a value the line with the call to execute is :
\code
Value aValue =it_map->second->execute();
\endcode
*/
/**
\page subp_debug_rt_logger Real-time Logger
\section real_time_logger_quick_intro Quick introduction
Each entity has a protected logger_ object.
The simplest way to have information while running your graph is to initialize
it in the constructor, and then display information in the methods.
You can then change the level of information you want to display using
either the entity method setLoggerVerbosityLevel()
or the corresponding python bindings.
\section real_time_logger_modifying_entities Putting information in your
entity.
It is possible to define the periodicity of the logger:
\code
logger_.setTimeSample(0.001);
\endcode
To define the periodicity at which one wants to print information:
\code
logger_.setStreamPrintPeriod(0.005);
\endcode
Several level of verbosity are possible:
\code
logger_.setVerbosity(VERBOSITY_ALL);
\endcode
The full list of options are:
<ul>
<li>VERBOSITY_ALL: Accept all messages</li>
<li>VERBOSITY_INFO_WARNING_ERROR: Accept messages at minimum level : INFO,
WARNING, ERROR</li> <li>VERBOSITY_WARNING_ERROR: Accept messages at minimum
level : WARNING, ERROR</li> <li>VERBOSITY_ERROR: Accept messages at minimum
level : ERROR</li>
</ul>
It is specified by the enum LoggerVerbosity
It is possible to display information according to various level of debug:
\code
sendMsg("This is a message of level MSG_TYPE_DEBUG", MSG_TYPE_DEBUG);
\endcode
or
\code
DYNAMIC_GRAPH_ENTITY_DEBUG (*this) << "This is a message of level
MSG_TYPE_DEBUG\n"; DYNAMIC_GRAPH_ENTITY_INFO (*this) << "This is a message of
level MSG_TYPE_INFO\n"; DYNAMIC_GRAPH_ENTITY_WARNING (*this) << "This is a
message of level MSG_TYPE_WARNING\n"; DYNAMIC_GRAPH_ENTITY_ERROR (*this) <<
"This is a message of level MSG_TYPE_ERROR\n"; DYNAMIC_GRAPH_ENTITY_DEBUG_STREAM
(*this) << "This is a message of level MSG_TYPE_DEBUG_STREAM\n";
DYNAMIC_GRAPH_ENTITY_INFO_STREAM (*this) << "This is a message of level
MSG_TYPE_INFO_STREAM\n"; DYNAMIC_GRAPH_ENTITY_WARNING_STREAM (*this) << "This is
a message of level MSG_TYPE_WARNING_STREAM\n"; DYNAMIC_GRAPH_ENTITY_ERROR_STREAM
(*this) << "This is a message of level MSG_TYPE_ERROR_STREAM\n"; \endcode
\note Thread safety. This class expects to have:
- only one reader: the one who take the log entries and write them somewhere.
- one writer at a time. Writing to the logs is **never** a blocking
operation. If the resource is busy, the log entry is discarded.
*/
/**
\page subpage_entities Entities
\section section_entities Entities
\subsection entity_definition General definition
\image html entity.png
Despite the fact that it looks very similar to a ROS node or a CORBA/OpenRTM
server, an entity is simply a C++ object. The main idea is that this entity is
providing mostly a data-driven functionnality working at very high rate (\f$ 200
Hz\f$ or \f$ 1 kHz \f$) and should have a minimal computational time foot-print.
For this \subpage subp_signals (or ports to use a more classical terminology)
are providing a time dependency between data. To implement this, an output
signal is linked with a method of the entity. The method calls input signals or
use other means to get the needed data. It might be provided by the connection
with remote computers through a middleware, or specific protocols, but in
general the external data is based upon the sensor values provided by a "Device"
entity. For this reason the signal evaluations are realized through the cascade
of dependencies and start from the evaluation of an input signal of a periodic
node (in general the device). This is realized inside a \b real-time thread.
To add flexibility to a node, it is possible to add command with arguments to
modify the internal behavior of the entity or get information from the entity.
As a command is in general asynchronous and rare with respect to the data-flow
scheme for the signals the command is in general executed in a \b none-real-time
thread. For more details on command see \subpage subpage_command .
\subsection entity_classes Entity class
Entities are implemented as C++ classes and compiled as dynamic libraries. They
can be loaded and instancied dynamically. It is therefore necessary to specify
the location of their dynamical libraries. However given the time it might take
to load the library, it is not advised to do that during a control-law
computation. Entity instanciation also implies memory allocation which is also
time consuming and thus not advised inside a real-time thread.
The entities will be placed in ${PREFIX}/lib/dynamic-graph-plugin
(since this may change, it is advised to check the install log or the
CMakeLists.txt file to check the installation path).
\subsection entities List of entities in this package
Since most of the functionality in projects using the dynamic-graph framework
is exposed from entities, here is a short description of all the entities
contained in this package. Note that most entities are contained in a binary
file that closely matches the entities' names in the scripts; loading this file
with the plugin loader will enable creation of this entity through the factory.
\li \ref tracerdoc
\li \ref tracerrealtimedoc
\subsection specific_semantics Specific semantics with entities
It is possible to derive classes and apply specific semantic for the entities.
In our case we are interested in specific control semantics: \li Tasks (more
information <a
href="http://stack-of-tasks.github.io/sot-core/doxygen/HEAD/a00089.html">here</a>)
\li Features (more information <a
href="http://stack-of-tasks.github.io/sot-core/doxygen/HEAD/a00030.html">here</a>)
\li Solver (more information <a
href="http://stack-of-tasks.github.io/sot-core/doxygen/HEAD/a00078.html">here</a>)
*/