Commit ae2b5276 authored by Olivier Lagrasse's avatar Olivier Lagrasse

- Merge trunk to unified render. (revision 867 to 896)

- DO NOT COMPILE!
parent 1366a49e
PROJECT(VITE CXX C)
CMAKE_MINIMUM_REQUIRED(VERSION 2.4)
IF(COMMAND CMAKE_POLICY)
# CMP0003: add the link paths to the link command as with cmake 2.4
CMAKE_POLICY(SET CMP0003 NEW)
ENDIF(COMMAND CMAKE_POLICY)
FIND_PACKAGE(Qt4
COMPONENTS QtCore QtGui QtXml REQUIRED)
SET(QT_USE_QTUITOOLS ON)
SET(QT_USE_QTOPENGL ON)
INCLUDE(${QT_USE_FILE})
FIND_PACKAGE(GLUT)
OPTION(VITE_ENABLE_OTF "Enable the support of OTF file format." OFF)
IF(VITE_ENABLE_OTF)
INCLUDE(cmake/FindOTF.cmake)
ENDIF(VITE_ENABLE_OTF)
SUBDIRS(src)
\ No newline at end of file
......@@ -11,19 +11,49 @@ On MacOS X or Debian, follow the next step.
COMPILING ViTE
For Debian/Ubuntu users:
If you do not have Qt please visit : http://www.qtsoftware.com/downloads/opensource/appdev and download the development files for your operating system.
Install also GLUT (http://www.opengl.org/resources/libraries/glut/).
For Debian/Ubuntu users, you can use apt-get :
you can use apt-get :
sudo apt-get install libqt4-dev libqt4-opengl-dev libglut3-dev
sudo apt-get install libglew-dev
For Debian users, you may need to install also the qmake package.
Then, until Qt development files are installed, you can compile ViTE :
./configure will configure your Makefile depending on your OS.
./configure
or
cmake -D CMAKE_INSTALL_PREFIX:PATH=. .
will configure your Makefile depending on your OS.
make will create the binary file.
For Fedora/CentOS users:
You have to have the administration rights (su).
you will need to get the following rpm packages:
wget ftp://ftp.pbone.net/mirror/ftp.pramberger.at/systems/linux/contrib/rhel5/i386/qt45-4.5.1-1.el5.pp.i386.rpm
wget ftp://ftp.pbone.net/mirror/ftp.pramberger.at/systems/linux/contrib/rhel5/i386/qt45-devel-4.5.1-1.el5.pp.i386.rpm
wget ftp://ftp.pbone.net/mirror/ftp.pramberger.at/systems/linux/contrib/rhel5/i386/qt45-sqlite-4.5.1-1.el5.pp.i386.rpm
Then, you will need to install the required packages used by the previous ones:
yum install dbus-devel fontconfig-devel freetype-devel glib2-devel libSM-devel libX11-devel libXcursor-devel libXext-devel libXfixes-devel libXi-devel libXinerama-devel libXrandr-devel libXrender-devel libpng-devel mesa-libGLU-devel glut glut-devel gcc-c++
After you can install the rpm packages you just download:
rpm -i qt45-4.5.1-1.el5.pp.i386.rpm
rpm -i qt45-sqlite-4.5.1-1.el5.pp.i386.rpm
rpm -i qt45-devel-4.5.1-1.el5.pp.i386.rpm
You have to export your PATH variable to the directory of qmake, which is by default :
export PATH=/usr/lib/qt45/qt/bin:/usr/lib/qt45/qt/include:$PATH
If it is not the case, try : find / | grep qmake and take the path given.
make will create the binary files
Go to the vite/src/trunk directory then :
./configure
make or gmake will create the binary file.
DOCUMENTATION
......@@ -49,4 +79,4 @@ For this release, the following platforms have been tested on :
HOW TO REPORT A BUG
If you think you have found a bug in ViTE, you can report it by mail at vite-developpeurs@lists.gforge.inria.fr or in the forum at https://gforge.inria.fr/forum/?group_id=1596
\ No newline at end of file
If you think you have found a bug in ViTE, you can report it by mail at vite-developpeurs@lists.gforge.inria.fr or in the forum at https://gforge.inria.fr/forum/?group_id=1596
#
# Find the OTF libraries and include dir
#
# OTF_INCLUDE_DIR - Directories to include to use OTF
# OTF_LIBRARY - Files to link against to use OTF
# OTF_FOUND - When false, don't try to use OTF
#
# OTF_DIR can be used to make it simpler to find the various include
# directories and compiled libraries when OTF was not installed in the
# usual/well-known directories (e.g. because you made an in tree-source
# compilation or because you installed it in an "unusual" directory).
# Just set OTF_DIR it to your specific installation directory
#
FIND_LIBRARY(OTF_LIBRARY otf
PATHS
/usr/lib
/usr/local/lib
${OTF_DIR}/lib
)
IF(OTF_LIBRARY)
GET_FILENAME_COMPONENT(OTF_GUESSED_INCLUDE_DIR_tmp "${OTF_LIBRARY}" PATH)
STRING(REGEX REPLACE "lib$" "include" OTF_GUESSED_INCLUDE_DIR "${OTF_GUESSED_INCLUDE_DIR_tmp}")
ENDIF(OTF_LIBRARY)
FIND_PATH( OTF_INCLUDE_DIR otf.h
PATHS
${OTF_GUESSED_INCLUDE_DIR}
${OTF_DIR}/include
/usr/include
/usr/local/include
)
IF( OTF_INCLUDE_DIR )
IF( OTF_LIBRARY )
SET( OTF_FOUND "YES" )
MARK_AS_ADVANCED( OTF_DIR )
MARK_AS_ADVANCED( OTF_INCLUDE_DIR )
MARK_AS_ADVANCED( OTF_LIBRARY )
ENDIF( OTF_LIBRARY )
ENDIF( OTF_INCLUDE_DIR )
IF( NOT OTF_FOUND )
MESSAGE("OTF installation was not found. Please provide OTF_DIR:")
MESSAGE(" - through the GUI when working with ccmake, ")
MESSAGE(" - as a command line argument when working with cmake e.g. ")
MESSAGE(" cmake .. -DOTF_DIR:PATH=/usr/local/otf ")
MESSAGE("Note: the following message is triggered by cmake on the first ")
MESSAGE(" undefined necessary PATH variable (e.g. OTF_INCLUDE_DIR).")
MESSAGE(" Providing OTF_DIR (as above described) is probably the")
MESSAGE(" simplest solution unless you have a really customized/odd")
MESSAGE(" OTF installation...")
SET(OTF_DIR "" CACHE PATH "Root of OTF install tree." )
ENDIF( NOT OTF_FOUND )
......@@ -80,6 +80,8 @@ OTFLIB_DIR = ./src/general/otf
all:
make -C \$(OTFLIB_DIR)
rm -rf \$(OTFLIB_DIR)/otflib/.libs/*so*
rm -rf \$(OTFLIB_DIR)/otflib/.libs/*dylib* # For mac
EOF
if "$WHICH" qmake-qt4 >/dev/null 2>&1 ; then
......
#
# This file is part of the ViTE project.
#
# This software is governed by the CeCILL-A license under French law
# and abiding by the rules of distribution of free software. You can
# use, modify and/or redistribute the software under the terms of the
# CeCILL-A license as circulated by CEA, CNRS and INRIA at the following
# URL: "http://www.cecill.info".
#
# As a counterpart to the access to the source code and rights to copy,
# modify and redistribute granted by the license, users are provided
# only with a limited warranty and the software's author, the holder of
# the economic rights, and the successive licensors have only limited
# liability.
#
# In this respect, the user's attention is drawn to the risks associated
# with loading, using, modifying and/or developing or reproducing the
# software by the user in light of its specific status of free software,
# that may mean that it is complicated to manipulate, and that also
# therefore means that it is reserved for developers and experienced
# professionals having in-depth computer knowledge. Users are therefore
# encouraged to load and test the software's suitability as regards
# their requirements in conditions enabling the security of their
# systems and/or data to be ensured and, more generally, to use and
# operate it in the same conditions as regards security.
#
# The fact that you are presently reading this means that you have had
# knowledge of the CeCILL-A license and that you accept its terms.
#
# ViTE developers are (for version 0.* to 1.0):
#
# - COULOMB Kevin
# - FAVERGE Mathieu
# - JAZEIX Johnny
# - LAGRASSE Olivier
# - MARCOUEILLE Jule
# - NOISETTE Pascal
# - REDONDY Arthur
# - VUCHENER Clment
# - (RICHART Nicolas)
#
#
SET(VITE_HDRS
common/common.hpp
common/Message.hpp
common/Errors.hpp
common/Tools.hpp
common/info.hpp
# Data structure headers
trace/values/Color.hpp
trace/values/Date.hpp
trace/values/Double.hpp
trace/values/Hex.hpp
trace/values/Integer.hpp
trace/values/Name.hpp
trace/values/String.hpp
trace/values/Value.hpp
trace/values/Values.hpp
trace/tree/BinaryTree.hpp
trace/tree/Node.hpp
trace/tree/Interval.hpp
trace/ContainerType.hpp
trace/EntityType.hpp
trace/EventType.hpp
trace/StateType.hpp
trace/LinkType.hpp
trace/VariableType.hpp
trace/EntityTypes.hpp
trace/EntityValue.hpp
trace/Container.hpp
trace/Entity.hpp
trace/Event.hpp
trace/State.hpp
trace/StateChange.hpp
trace/Link.hpp
trace/Entitys.hpp
trace/Variable.hpp
trace/DrawTrace.hpp
trace/DrawTree.hpp
trace/Trace.hpp
# Render headers
render/render.hpp
render/Render_area.hpp
render/Render_opengl_dl.hpp
render/Render_opengl.hpp
render/render_svg.hpp
render/render_stats.hpp
render/render_stats_opengl.hpp
render/render_stats_svg.hpp
#render/vbo.hpp
# Interface headers
interface/help.hpp
interface/resource.hpp
interface/parsing_thread.hpp
interface/interface.hpp
interface/interface_console.hpp
interface/interface_graphic.hpp
# Parser headers
parser/Definition.hpp
parser/Line.hpp
parser/Parser.hpp
parser/ParserDefinitionPaje.hpp
parser/ParserEventPaje.hpp
parser/ParserPaje.hpp
parser/ParserVite.hpp
parser/File.hpp
# Statistics headers
statistics/Stats_window.hpp
statistics/Statistic.hpp
statistics/DrawStats.hpp
statistics/DrawVDiagram.hpp
statistics/DrawHDiagram.hpp
statistics/DrawCounter.hpp
)
SET(VITE_UIS
interface/info_window.ui
interface/main_window.ui
interface/option_export_window.ui
interface/stats_viewer.ui
)
SET(VITE_SRCS
# Messages & Errors
common/Message.cpp
common/Errors.cpp
common/Tools.cpp
common/info.cpp
# Data structure code files
trace/values/Color.cpp
trace/values/Date.cpp
trace/values/Double.cpp
trace/values/Hex.cpp
trace/values/Integer.cpp
trace/values/Name.cpp
trace/values/String.cpp
trace/tree/Interval.cpp
trace/EntityValue.cpp
trace/ContainerType.cpp
trace/EntityType.cpp
trace/EventType.cpp
trace/StateType.cpp
trace/LinkType.cpp
trace/VariableType.cpp
trace/Entity.cpp
trace/Event.cpp
trace/State.cpp
trace/StateChange.cpp
trace/Link.cpp
trace/Variable.cpp
trace/Container.cpp
trace/Trace.cpp
# Render code files
render/Render_area.cpp
render/Render_opengl.cpp
render/render_svg.cpp
render/render_stats_opengl.cpp
render/render_stats_svg.cpp
#render/vbo.cpp
# Parser code files
parser/Definition.cpp
parser/Line.cpp
parser/File.cpp
parser/ParserDefinitionPaje.cpp
parser/ParserEventPaje.cpp
parser/ParserPaje.cpp
parser/ParserVite.cpp
# Statistics code files
statistics/Statistic.cpp
statistics/Stats_window.cpp
# Interface code files
interface/help.cpp
interface/parsing_thread.cpp
interface/interface_graphic.cpp
interface/interface_console.cpp
# Main
main.cpp
)
SET(VITE_RCCS
interface/vite.qrc
)
IF(VITE_ENABLE_OTF)
ADD_DEFINITIONS(-DWITH_OTF)
SET(VITE_HDRS
${VITE_HDRS}
parser/ParserDefinitionOTF.hpp
parser/ParserEventOTF.hpp
parser/ParserOTF.hpp
)
SET(VITE_SRCS
${VITE_SRCS}
parser/ParserDefinitionOTF.cpp
parser/ParserEventOTF.cpp
parser/ParserOTF.cpp
)
INCLUDE_DIRECTORIES(${OTF_INCLUDE_DIR})
ENDIF(VITE_ENABLE_OTF)
QT4_AUTOMOC(${VITE_SRCS})
FOREACH(_hdrs_file ${VITE_HDRS})
GET_FILENAME_COMPONENT(_abs_file ${_hdrs_file} ABSOLUTE)
FILE(READ ${_abs_file} _contents)
STRING(REGEX MATCHALL "Q_OBJECT" _match "${_contents}")
IF(_match)
SET(VITE_MOC_HDRS ${VITE_MOC_HDRS} ${_hdrs_file})
ENDIF(_match)
ENDFOREACH(_hdrs_file ${VITE_HDRS})
QT4_WRAP_UI(VITE_UIS_H ${VITE_UIS})
QT4_WRAP_CPP(VITE_MOC ${VITE_UIS_H} ${VITE_MOC_HDRS})
QT4_ADD_RESOURCES(VITE_RCC_SRCS ${VITE_RCCS})
ADD_DEFINITIONS(-DQT_NO_DEBUG)
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
)
ADD_EXECUTABLE(vite ${VITE_SRCS} ${VITE_MOC} ${VITE_RCC_SRCS})
TARGET_LINK_LIBRARIES(vite
${QT_LIBRARIES}
${GLUT_LIBRARIES}
)
IF(VITE_ENABLE_OTF)
TARGET_LINK_LIBRARIES(vite
${OTF_LIBRARY}
)
ENDIF(VITE_ENABLE_OTF)
INSTALL_TARGETS(/bin vite)
......@@ -40,9 +40,22 @@
** - VUCHENER Clément
**
*/
#include "Errors.hpp"
#include "../core/Core.hpp"
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <queue>
/* -- */
#include <QObject>
/* -- */
#ifndef VITE_DEBUG
# include "core/Core.hpp"
#endif
/* -- */
#include "common/Message.hpp"
#include "common/Errors.hpp"
/* -- */
using namespace std;
queue<string> Error::_errors;
......@@ -50,40 +63,40 @@ queue<string> Error::_warnings;
const int Error::_EVERYTHING = 0;
const int Error::_WARNING = 1;
const int Error::_ERROR = 2;
const int Error::_WARNING = 1;
const int Error::_ERROR = 2;
string Error::_content = QObject::tr("").toStdString();
const string Error::_PARSE = QObject::tr("expected \" before end of file").toStdString();
const string Error::_MMAP = QObject::tr("mmap error").toStdString();
const string Error::_EMPTY_FILE = QObject::tr("empty file").toStdString();
const string Error::_FSTAT = QObject::tr("status file error").toStdString();
const string Error::_OPEN = QObject::tr("open file error").toStdString();
const string Error::_MUNMAP = QObject::tr("munmap error").toStdString();
const string Error::_EXPECT_END_DEF = QObject::tr("expected %EndEventDef").toStdString();
const string Error::_EXPECT_EVENT_DEF = QObject::tr("expected %EventDef").toStdString();
const string Error::_EXPECT_NAME_DEF = QObject::tr("the definition is not named").toStdString();
const string Error::_EXPECT_ID_DEF = QObject::tr("the definition is not identified").toStdString();
const string Error::_UNKNOWN_ID_DEF = QObject::tr("there is no definition with the identity: ").toStdString();
const string Error::_EXTRA_TOKEN = QObject::tr("extra token(s) ignored").toStdString();
const string Error::_PARSE = QObject::tr("expected \" before end of file").toStdString();
const string Error::_MMAP = QObject::tr("mmap error").toStdString();
const string Error::_EMPTY_FILE = QObject::tr("empty file").toStdString();
const string Error::_FSTAT = QObject::tr("status file error").toStdString();
const string Error::_OPEN = QObject::tr("open file error").toStdString();
const string Error::_MUNMAP = QObject::tr("munmap error").toStdString();
const string Error::_EXPECT_END_DEF = QObject::tr("expected %EndEventDef").toStdString();
const string Error::_EXPECT_EVENT_DEF = QObject::tr("expected %EventDef").toStdString();
const string Error::_EXPECT_NAME_DEF = QObject::tr("the definition is not named").toStdString();
const string Error::_EXPECT_ID_DEF = QObject::tr("the definition is not identified").toStdString();
const string Error::_UNKNOWN_ID_DEF = QObject::tr("there is no definition with the identity: ").toStdString();
const string Error::_EXTRA_TOKEN = QObject::tr("extra token(s) ignored").toStdString();
const string Error::_UNKNOWN_EVENT_DEF = QObject::tr("the following event doesn't match with any event known: ").toStdString();
const string Error::_FIELD_TYPE_MISSING = QObject::tr("a field type is missing ").toStdString();
const string Error::_FIELD_TYPE_UNKNOWN = QObject::tr("the following field type is unknown: ").toStdString();
const string Error::_EMPTY_DEF = QObject::tr("a definition line is empty").toStdString();
const string Error::_EMPTY_DEF = QObject::tr("a definition line is empty").toStdString();
const string Error::_INCOMPATIBLE_VALUE_IN_EVENT = QObject::tr("incompatible value: ").toStdString();
const string Error::_BAD_FILE_EXTENSION = QObject::tr("the extension of the file is not .trace").toStdString();
const string Error::_BAD_FILE_EXTENSION = QObject::tr("the extension of the file is not .trace").toStdString();
const string Error::_LINE_TOO_SHORT_EVENT = QObject::tr("missing field value(s) in an event").toStdString();
const string Error::_UNKNOWN_CONTAINER_TYPE = QObject::tr("Unknown container type: ").toStdString();
const string Error::_UNKNOWN_CONTAINER = QObject::tr("Unknown container: ").toStdString();
const string Error::_UNKNOWN_EVENT_TYPE = QObject::tr("Unknown event type: ").toStdString();
const string Error::_UNKNOWN_STATE_TYPE = QObject::tr("Unknown state type: ").toStdString();
const string Error::_UNKNOWN_VARIABLE_TYPE = QObject::tr("Unknown variable type: ").toStdString();
const string Error::_UNKNOWN_LINK_TYPE = QObject::tr("Unknown link type: ").toStdString();
const string Error::_UNKNOWN_ENTITY_TYPE = QObject::tr("Unknown entity type: ").toStdString();
const string Error::_UNKNOWN_ENTITY_VALUE = QObject::tr("Unknown entity value: ").toStdString();
const string Error::_UNKNOWN_CONTAINER = QObject::tr("Unknown container: ").toStdString();
const string Error::_UNKNOWN_EVENT_TYPE = QObject::tr("Unknown event type: ").toStdString();
const string Error::_UNKNOWN_STATE_TYPE = QObject::tr("Unknown state type: ").toStdString();
const string Error::_UNKNOWN_VARIABLE_TYPE = QObject::tr("Unknown variable type: ").toStdString();
const string Error::_UNKNOWN_LINK_TYPE = QObject::tr("Unknown link type: ").toStdString();
const string Error::_UNKNOWN_ENTITY_TYPE = QObject::tr("Unknown entity type: ").toStdString();
const string Error::_UNKNOWN_ENTITY_VALUE = QObject::tr("Unknown entity value: ").toStdString();
void Error::set(const string kind_of_error, const int priority){
......
......@@ -43,18 +43,14 @@
#ifndef ERRORS_HPP
#define ERRORS_HPP
#include <string>
#include <queue>
/*!
* \file Errors.hpp
* This file contains all the significations of the errors or warnings that can be thrown by the parser
*
**/
#include <string>
#include <queue>
#include <iostream>
#include <fstream>
#include "Message.hpp"
/*! \class Error
* \brief Define errors and warnings used in the parser.
*/
......
......@@ -40,11 +40,42 @@
** - VUCHENER Clément
**
*/
#include "Message.hpp"
#include "../core/Core.hpp"
#include <sstream>
#include <iostream>
/* -- */
#include <QObject>
/* -- */
#ifdef VITE_DEBUG
/* Test mode */
class Interface {
public:
void error(const std::string& s) {
std::cerr <<"ERROR: " << s << std::endl;
}
void warning(const std::string& s) {
std::cerr <<"WARNING: " << s << std::endl;
}
void information(const std::string& s) {
std::cerr <<"INFORMATION: " << s << std::endl;
}
void selection_information(const std::string& s) {
std::cerr <<"INFORMATION: " << s << std::endl;
}
std::string get_filename(){
return "filename ";
}
};
#else
/* Release mode */
#include "core/Core.hpp"
#endif
/* -- */
#include "common/Message.hpp"
Message *Message::_message = NULL;
Message *Message::_message = NULL;
Interface *Message::_interface = NULL;
Message::Message() {
......
......@@ -43,48 +43,18 @@
#ifndef MESSAGE_HPP
#define MESSAGE_HPP
#include <sstream>
class Interface;
//#include <iostream>
//#ifndef VITE_DEBUG
//#else
/* Test mode */
//#include <iostream>
/*
class Interface {
public:
void error(const std::string& s) {
std::cerr <<"ERROR: " << s << std::endl;
}
void warning(const std::string& s) {
std::cerr <<"WARNING: " << s << std::endl;
}
void information(const std::string& s) {
std::cerr <<"INFORMATION: " << s << std::endl;
}
void selection_information(const std::string& s) {
std::cerr <<"INFORMATION: " << s << std::endl;
}
std::string get_filename(){
return "filename ";
}
};
*/
//#endif
/*!
* \class Message
* \brief Contains routine for easily send messages of informations, warnings or errors to the user
*/
class stringstream;
class ostream;
class Interface;
class Message: public std::stringstream {
private:
static Message *_message;
static Message *_message;
static Interface *_interface;
Message();
......@@ -96,9 +66,9 @@ public:
static const struct end_selection_information_t { } endsi;
static Message *get_instance();
static void kill();
static void kill();
static void set_interface(Interface *);
static void set_interface(Interface *);
static Interface *get_interface();
};
......
......@@ -40,18 +40,23 @@
** - VUCHENER Clément
**
*/
#include "Tools.hpp"
#include <cstdio>
// For translations
#include <QObject>
#include <cstdio>
#include <iostream>
/* -- */
#include <QObject> // For translations
/* -- */
#include <locale.h> // For dots or commas separator in double numbers
/* -- */
#include "Tools.hpp"
/* -- */
using namespace std;
double convert_to_double(const string arg){
double value = -1.0; // value returned
double value = -1.0; // value returned
string arg_temp = arg + " 3";
int useless;
int useless;
if(sscanf(arg_temp.c_str(), "%lf %d", &value, &useless) == 2){
return value; // It is the good format
}
......@@ -64,13 +69,15 @@ double convert_to_double(const string arg){
// We had dots initially, we need to have the english system
if(is_english_system_needed) {
if(setlocale(LC_NUMERIC, "en_GB.UTF-8") == NULL){
if((setlocale(LC_NUMERIC, "en_GB.UTF-8") == NULL) &&
(setlocale(LC_NUMERIC, "C") == NULL)){
cerr << QObject::tr("The locale en_GB.UTF-8 is unavailable so the decimal pointed will not be printed").toStdString() << endl;
}
}
else {
if ( setlocale(LC_NUMERIC, "fr_FR.UTF-8")==NULL && setlocale(LC_NUMERIC, "French") == NULL){
if ((setlocale(LC_NUMERIC, "fr_FR.UTF-8") == NULL) &&
(setlocale(LC_NUMERIC, "French") == NULL)){
cerr << QObject::tr("The locale fr_FR.UTF-8 is unavailable so the decimal with comma will not be printed").toStdString() << endl;
}
......
......@@ -49,10 +49,6 @@
#define TOOLS_HPP
#include <string>
#include <iostream>
// For dots or commas separator in double numbers
#include <locale.h>
/*!
* \fn convert_to_double(const std::string args)
......
......@@ -41,20 +41,28 @@
**
*/
/*!
*\file main_resource.hpp
*\file common.hpp
*\brief This file gives some common header files for the interface classes.
*/
#ifndef MAIN_RESOURCE_HPP
#define MAIN_RESOURCE_HPP
#ifndef COMMON_HPP
#define COMMON_HPP
#include <iostream>/* to use the C standard library input output functions */
#include <string>
#include <cstdlib> /* for macros EXIT_SUCCESS and EXIT_FAILURE */
#include<math.h> /* for min and max functions */
#include <math.h> /* for min and max functions */
#include <sstream>
/* -- */
/* -- */
#include "common/Errors.hpp" /* Message management */
#include "common/Message.hpp" /* Message management */
/* Example: