diff --git a/.github/_nixshell b/.github/_nixshell new file mode 100644 index 0000000..e519ea2 --- /dev/null +++ b/.github/_nixshell @@ -0,0 +1,13 @@ +let pkgs = import (builtins.fetchTarball + "https://github.com/goromal/anixpkgs/archive/refs/tags/v6.22.0.tar.gz") {}; +in with pkgs; mkShell { + nativeBuildInputs = [ + cmake + lcov + ]; + buildInputs = [ + boost + eigen + manif-geom-cpp + ]; +} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5ee0cca..1b87430 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,4 +20,58 @@ jobs: authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - run: > git config --global url."https://github.com/".insteadOf ssh://git@github.com/ - - run: export NIXPKGS_ALLOW_UNFREE=1 && nix-build -E 'with (import (fetchTarball "https://github.com/goromal/anixpkgs/archive/refs/tags/v0.5.0.tar.gz") {}); signals-cpp.override { pkg-src = lib.cleanSource ./.; }' + - run: export NIXPKGS_ALLOW_UNFREE=1 && nix-build -E 'with (import (fetchTarball "https://github.com/goromal/anixpkgs/archive/refs/heads/master.tar.gz") {}); signals-cpp.override { pkg-src = lib.cleanSource ./.; }' + code-cov: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: cachix/install-nix-action@v25 + with: + nix_path: nixpkgs=channel:nixos-unstable + - uses: cachix/cachix-action@v10 + with: + name: github-public + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + - name: Build, test, and generate coverage HTML report + run: | + mkdir build && cd build + nix-shell ../.github/_nixshell --run "cmake .. -DCMAKE_BUILD_TYPE=Debug && make unit-tests" + nix-shell ../.github/_nixshell --run "lcov --capture --directory . --output-file coverage.info && \ + lcov --remove coverage.info '/usr/*' '*/test/*' --output-file coverage.info.cleaned && \ + genhtml --branch-coverage --ignore-errors source --output-directory coverage_report coverage.info.cleaned" + - name: Upload coverage report artifact + uses: actions/upload-artifact@v4 + with: + name: code-coverage-report + path: build/coverage_report + - name: Post PR comment with coverage artifact (optional) + if: github.event_name == 'pull_request' + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const artifactUrl = `https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}`; + const comment = ` + ### 🧪 Code Coverage Report + The code coverage report has been generated for this PR. + + ➡️ [View coverage artifact](${artifactUrl}) + `; + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: comment + }); + - name: Copy coverage report into docs/ + run: | + mkdir -p docs/coverage + cp -r build/coverage_report/* docs/coverage/ + - name: Commit coverage report to docs/ + if: github.ref == 'refs/heads/master' + run: | + git config --global user.name "github-actions" + git config --global user.email "github-actions@github.com" + git add docs/coverage + git commit -m "Update coverage report [skip ci]" || echo "No changes to commit" + git push diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..10beb96 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "docs/doxygen-awesome-css"] + path = docs/doxygen-awesome-css + url = https://github.com/jothepro/doxygen-awesome-css.git diff --git a/CMakeLists.txt b/CMakeLists.txt index fb4d27b..fe98b88 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,10 +3,18 @@ cmake_minimum_required (VERSION 3.16) set(PROJ_NAME signals-cpp) project(${PROJ_NAME}) +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) +endif() + set(CMAKE_CXX_STANDARD 17) option(BUILD_TESTS "Build Tests" ON) +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage -O0 -g") +endif() + find_package(Eigen3 REQUIRED NO_MODULE) find_package(manif-geom-cpp REQUIRED) diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 0000000..b4c6ed2 --- /dev/null +++ b/Doxyfile @@ -0,0 +1,31 @@ +# Project-related information +PROJECT_NAME = "signals-cpp" +OUTPUT_DIRECTORY = "docs" # Directory where the docs are generated +RECURSIVE = YES # Recursively scan all subdirectories +EXTRACT_ALL = YES # Extract all code comments + +# HTML output settings +GENERATE_HTML = YES # Enable HTML documentation +GENERATE_LATEX = NO # Disable LaTeX documentation +HTML_OUTPUT = . # Specify HTML output directory + +# Awesome style settings +GENERATE_TREEVIEW = YES # optional. Also works without treeview +DISABLE_INDEX = NO +FULL_SIDEBAR = NO +HTML_EXTRA_STYLESHEET = docs/doxygen-awesome-css/doxygen-awesome.css +HTML_COLORSTYLE = LIGHT # required with Doxygen >= 1.9.5 + +# MathJax integration (for math rendering) +USE_MATHJAX = YES # Enable MathJax support for math rendering + +# Input settings (multiple directories) +INPUT = include # Include both C++ and Python directories for parsing + +# File patterns +FILE_PATTERNS = *.cpp *.h *.py # Specify the file types to be parsed + +# Additional settings for LaTeX-style math +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = YES +EXPAND_ONLY_PREDEF = NO \ No newline at end of file diff --git a/README.md b/README.md index 4086328..8e9a2b0 100644 --- a/README.md +++ b/README.md @@ -4,32 +4,26 @@ Header-only templated C++ library implementing rigid-body dynamics, derivatives, integrals, and interpolation. -**Under construction** +View the library documentation [HERE](https://andrewtorgesen.com/signals-cpp). -## Implemented Types +## Installation -### Signal Types +This code is meant to be built as a static library with CMake. It should be compatible with the latest versions of +Eigen and Boost (unit test framework only). +The library [manif-geom-cpp](https://github.com/goromal/manif-geom-cpp) must also be installed. -Scalar signal type: +Install with -```cpp -ScalarSignal x; +```bash +mkdir build +cd build +cmake .. +make # or make install ``` -Vector signal types: +By default, building will also build and run the unit tests, but this can be turned off with the CMake option `BUILD_TESTS`. -```cpp -Vector1Signal x; -Vector2Signal x; -Vector3Signal x; -Vector4Signal x; -Vector5Signal x; -Vector6Signal x; -Vector7Signal x; -Vector8Signal x; -Vector9Signal x; -Vector10Signal x; -``` +### Signals Manifold signal types: @@ -56,7 +50,7 @@ f(SignalType &xInt, TangentSignalType x, double t, bool insertHistory = false); f(SignalType &xInt, TangentSignalType x, double t, double dt, bool insertHistory = false); ``` -### Models +### System Models *Pending implementations:* @@ -74,3 +68,12 @@ f(SignalType &xInt, TangentSignalType x, double t, double dt, bool insertHistory - Rigid body system confined to a plane (unicycle model). - `RigidBodyDynamics6DOF` - Rigid body system in 3D space. + +## Docs Generation + +Generate updated docs in the `docs/` directory with + +```bash +doxygen Doxyfile +``` + diff --git a/docs/Integration_8h.html b/docs/Integration_8h.html new file mode 100644 index 0000000..2ca30c9 --- /dev/null +++ b/docs/Integration_8h.html @@ -0,0 +1,220 @@ + + + + + + + +signals-cpp: include/signals/Integration.h File Reference + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Integration.h File Reference
+
+
+
#include "signals/Signal.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + +

+Classes

struct  Integrator< IntegratorType >
 Base type for all integrators. More...
 
struct  EulerIntegratorSpec
 Specification for numerically integrating a black box function using Euler's method. More...
 
struct  TrapezoidalIntegratorSpec
 Specification for numerically integrating a black box function using the Trapezoidal method. More...
 
struct  SimpsonIntegratorSpec
 Specification for numerically integrating a black box function using Simpson's method. More...
 
+ + + +

+Macros

#define MAKE_INTEGRATOR(IntegratorName)
 
+ + + + + + + +

+Typedefs

typedef Integrator< EulerIntegratorSpecEulerIntegrator
 
typedef Integrator< TrapezoidalIntegratorSpecTrapezoidalIntegrator
 
typedef Integrator< SimpsonIntegratorSpecSimpsonIntegrator
 
+

Macro Definition Documentation

+ +

◆ MAKE_INTEGRATOR

+ +
+
+ + + + + + + +
#define MAKE_INTEGRATOR( IntegratorName)
+
+Value:
+
Base type for all integrators.
Definition Integration.h:18
+
+
+
+

Typedef Documentation

+ +

◆ EulerIntegrator

+ +
+
+ +
+
+ +

◆ SimpsonIntegrator

+ +
+
+ +
+
+ +

◆ TrapezoidalIntegrator

+ + +
+
+ + + + diff --git a/docs/Integration_8h.js b/docs/Integration_8h.js new file mode 100644 index 0000000..bc66010 --- /dev/null +++ b/docs/Integration_8h.js @@ -0,0 +1,11 @@ +var Integration_8h = +[ + [ "Integrator< IntegratorType >", "structIntegrator.html", null ], + [ "EulerIntegratorSpec", "structEulerIntegratorSpec.html", null ], + [ "TrapezoidalIntegratorSpec", "structTrapezoidalIntegratorSpec.html", null ], + [ "SimpsonIntegratorSpec", "structSimpsonIntegratorSpec.html", null ], + [ "MAKE_INTEGRATOR", "Integration_8h.html#ac22028f5bd0a2ecee786d53a348e4073", null ], + [ "EulerIntegrator", "Integration_8h.html#a0e36b47220a522ff9899d9624dd7c01b", null ], + [ "SimpsonIntegrator", "Integration_8h.html#a3ac408f7f30b4b1b5b218e5d48eca5ed", null ], + [ "TrapezoidalIntegrator", "Integration_8h.html#a123a7b32e66b7e1acc68d61a997abc96", null ] +]; \ No newline at end of file diff --git a/docs/Integration_8h_source.html b/docs/Integration_8h_source.html new file mode 100644 index 0000000..aca2b8e --- /dev/null +++ b/docs/Integration_8h_source.html @@ -0,0 +1,251 @@ + + + + + + + +signals-cpp: include/signals/Integration.h Source File + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Integration.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2#include "signals/Signal.h"
+
3
+
16template<typename IntegratorType>
+
+ +
18{
+
27 template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
30 const double& tf,
+
31 const bool& insertIntoHistory = false)
+
32 {
+
33 double t0 = xInt.t();
+
34 double dt;
+
35 if (!signal_utils::getTimeDelta(dt, t0, tf))
+
36 {
+
37 return false;
+
38 }
+
39 return IntegratorType::integrate(xInt, x, t0, tf, insertIntoHistory);
+
40 }
+
+
41
+
52 template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
55 const double& tf,
+
56 const double& dt,
+
57 const bool& insertIntoHistory = false)
+
58 {
+
59 double t_k = xInt.t();
+
60 bool success = true;
+
61 while (t_k < tf && success)
+
62 {
+
63 double dt_k;
+
64 if (signal_utils::getTimeDelta(dt_k, t_k, tf, dt))
+
65 {
+
66 double t_kp1 = t_k + dt_k;
+
67 success &= IntegratorType::integrate(xInt, x, t_k, t_kp1, insertIntoHistory);
+
68 t_k = t_kp1;
+
69 }
+
70 else
+
71 {
+
72 success = false;
+
73 }
+
74 }
+
75 return success;
+
76 }
+
+
77};
+
+
78
+
+ +
83{
+
97 template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
100 const double& t0,
+
101 const double& tf,
+
102 const bool& insertIntoHistory)
+
103 {
+
104 double dt = tf - t0;
+
105 return xInt.update(tf, xInt() + x(tf) * dt, x(tf), insertIntoHistory);
+
106 }
+
+
107};
+
+
108
+
+ +
113{
+
127 template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
130 const double& t0,
+
131 const double& tf,
+
132 const bool& insertIntoHistory)
+
133 {
+
134 double dt = tf - t0;
+
135 return xInt.update(tf, xInt() + (x(t0) + x(tf)) * dt / 2.0, x(tf), insertIntoHistory);
+
136 }
+
+
137};
+
+
138
+
+ +
143{
+
157 template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
160 const double& t0,
+
161 const double& tf,
+
162 const bool& insertIntoHistory)
+
163 {
+
164 double dt = tf - t0;
+
165 return xInt.update(tf,
+
166 xInt() + (x(t0) + 4.0 * x((t0 + tf) / 2.0) + x(tf)) * dt / 6.0,
+
167 x(tf),
+
168 insertIntoHistory);
+
169 }
+
+
170};
+
+
171
+
172#define MAKE_INTEGRATOR(IntegratorName) typedef Integrator<IntegratorName##IntegratorSpec> IntegratorName##Integrator;
+
173
+ +
175MAKE_INTEGRATOR(Trapezoidal)
+ +
#define MAKE_INTEGRATOR(IntegratorName)
Definition Integration.h:172
+ +
Definition Signal.h:38
+
double t() const
Definition Signal.h:105
+
bool update(const double &_t, const BaseType &_x, bool insertHistory=false)
Definition Signal.h:174
+
bool getTimeDelta(double &dt, const double &t0, const double &tf, const double &dt_max=std::numeric_limits< double >::max())
Definition Utils.h:11
+
Specification for numerically integrating a black box function using Euler's method.
Definition Integration.h:83
+
static bool integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)
Euler integration implementation.
Definition Integration.h:98
+
Base type for all integrators.
Definition Integration.h:18
+
static bool integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const double &dt, const bool &insertIntoHistory=false)
Integrate a signal from the current time to the specified end time, chunked up into smaller integrati...
Definition Integration.h:53
+
static bool integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const bool &insertIntoHistory=false)
Integrate a signal from the current time to the specified end time.
Definition Integration.h:28
+
Specification for numerically integrating a black box function using Simpson's method.
Definition Integration.h:143
+
static bool integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)
Simpson integration implementation.
Definition Integration.h:158
+
Specification for numerically integrating a black box function using the Trapezoidal method.
Definition Integration.h:113
+
static bool integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)
Trapezoidal integration implementation.
Definition Integration.h:128
+
+
+ + + + diff --git a/docs/Models_8h.html b/docs/Models_8h.html new file mode 100644 index 0000000..b7e1439 --- /dev/null +++ b/docs/Models_8h.html @@ -0,0 +1,510 @@ + + + + + + + +signals-cpp: include/signals/Models.h File Reference + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Models.h File Reference
+
+
+
#include <optional>
+#include "signals/State.h"
+#include "signals/Integration.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Classes

class  Model< DynamicsType >
 Base type for all model simulators. More...
 
struct  RigidBodyParams1D
 Parameters for a 1D rigid body model. More...
 
struct  RigidBodyParams2D
 Parameters for a 2D rigid body model. More...
 
struct  RigidBodyParams3D
 Parameters for a 3D rigid body model. More...
 
struct  TranslationalDynamicsBase< IST, SST, SDST, d, PT >
 Base class for defining the dynamics for 1D, 2D, and 3D point masses. More...
 
struct  RotationalDynamics1DOF< T >
 Definition of the dynamics for planar rotation-only motion of a mass. More...
 
struct  RotationalDynamics3DOF< T >
 Definition of the dynamics for 3D rotation-only motion of a mass. More...
 
struct  RigidBodyDynamics3DOF< T >
 Definition of the dynamics for planar motion of a mass that's allowed to rotate. More...
 
struct  RigidBodyDynamics6DOF< T >
 Definition of the dynamics for a 3D rigid body that can rotate about any axis. More...
 
+ + + +

+Macros

#define MAKE_MODEL(ModelBaseName, ModelDOF)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

template<typename T>
using TranslationalDynamics1DOF
 
template<typename T>
using TranslationalDynamics2DOF
 
template<typename T>
using TranslationalDynamics3DOF
 
template<typename T>
using Translational1DOFModel = Model<TranslationalDynamics1DOF<T>>
 
typedef Translational1DOFModel< double > Translational1DOFModeld
 
template<typename T>
using Translational2DOFModel = Model<TranslationalDynamics2DOF<T>>
 
typedef Translational2DOFModel< double > Translational2DOFModeld
 
template<typename T>
using Translational3DOFModel = Model<TranslationalDynamics3DOF<T>>
 
typedef Translational3DOFModel< double > Translational3DOFModeld
 
template<typename T>
using Rotational1DOFModel = Model<RotationalDynamics1DOF<T>>
 
typedef Rotational1DOFModel< double > Rotational1DOFModeld
 
template<typename T>
using Rotational3DOFModel = Model<RotationalDynamics3DOF<T>>
 
typedef Rotational3DOFModel< double > Rotational3DOFModeld
 
template<typename T>
using RigidBody3DOFModel = Model<RigidBodyDynamics3DOF<T>>
 
typedef RigidBody3DOFModel< double > RigidBody3DOFModeld
 
template<typename T>
using RigidBody6DOFModel = Model<RigidBodyDynamics6DOF<T>>
 
typedef RigidBody6DOFModel< double > RigidBody6DOFModeld
 
+

Macro Definition Documentation

+ +

◆ MAKE_MODEL

+ +
+
+ + + + + + + + + + + +
#define MAKE_MODEL( ModelBaseName,
ModelDOF )
+
+Value:
template<typename T> \
+
using ModelBaseName##ModelDOF##Model = Model<ModelBaseName##Dynamics##ModelDOF<T>>; \
+
typedef ModelBaseName##ModelDOF##Model<double> ModelBaseName##ModelDOF##Modeld;
+
Base type for all model simulators.
Definition Models.h:25
+
+
+
+

Typedef Documentation

+ +

◆ RigidBody3DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using RigidBody3DOFModel = Model<RigidBodyDynamics3DOF<T>>
+
+ +
+
+ +

◆ RigidBody3DOFModeld

+ +
+
+ + + + +
typedef RigidBody3DOFModel<double> RigidBody3DOFModeld
+
+ +
+
+ +

◆ RigidBody6DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using RigidBody6DOFModel = Model<RigidBodyDynamics6DOF<T>>
+
+ +
+
+ +

◆ RigidBody6DOFModeld

+ +
+
+ + + + +
typedef RigidBody6DOFModel<double> RigidBody6DOFModeld
+
+ +
+
+ +

◆ Rotational1DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using Rotational1DOFModel = Model<RotationalDynamics1DOF<T>>
+
+ +
+
+ +

◆ Rotational1DOFModeld

+ +
+
+ + + + +
typedef Rotational1DOFModel<double> Rotational1DOFModeld
+
+ +
+
+ +

◆ Rotational3DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using Rotational3DOFModel = Model<RotationalDynamics3DOF<T>>
+
+ +
+
+ +

◆ Rotational3DOFModeld

+ +
+
+ + + + +
typedef Rotational3DOFModel<double> Rotational3DOFModeld
+
+ +
+
+ +

◆ Translational1DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using Translational1DOFModel = Model<TranslationalDynamics1DOF<T>>
+
+ +
+
+ +

◆ Translational1DOFModeld

+ +
+
+ + + + +
typedef Translational1DOFModel<double> Translational1DOFModeld
+
+ +
+
+ +

◆ Translational2DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using Translational2DOFModel = Model<TranslationalDynamics2DOF<T>>
+
+ +
+
+ +

◆ Translational2DOFModeld

+ +
+
+ + + + +
typedef Translational2DOFModel<double> Translational2DOFModeld
+
+ +
+
+ +

◆ Translational3DOFModel

+ +
+
+
+template<typename T>
+ + + + +
using Translational3DOFModel = Model<TranslationalDynamics3DOF<T>>
+
+ +
+
+ +

◆ Translational3DOFModeld

+ +
+
+ + + + +
typedef Translational3DOFModel<double> Translational3DOFModeld
+
+ +
+
+ +

◆ TranslationalDynamics1DOF

+ +
+
+
+template<typename T>
+ + + + +
using TranslationalDynamics1DOF
+
+Initial value:
+ +
Signal< ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > > ScalarStateSignal
Definition State.h:213
+
Parameters for a 1D rigid body model.
Definition Models.h:165
+
Base class for defining the dynamics for 1D, 2D, and 3D point masses.
Definition Models.h:236
+
+
+
+ +

◆ TranslationalDynamics2DOF

+ +
+
+
+template<typename T>
+ + + + +
using TranslationalDynamics2DOF
+
+Initial value:
+ +
VectorStateSignal< T, 2 > Vector2StateSignal
Definition State.h:264
+
Parameters for a 2D rigid body model.
Definition Models.h:185
+
+
+
+ +

◆ TranslationalDynamics3DOF

+ +
+
+
+template<typename T>
+ + + + +
using TranslationalDynamics3DOF
+
+Initial value:
+ +
VectorStateSignal< T, 3 > Vector3StateSignal
Definition State.h:265
+
Parameters for a 3D rigid body model.
Definition Models.h:211
+
+
+
+
+
+ + + + diff --git a/docs/Models_8h.js b/docs/Models_8h.js new file mode 100644 index 0000000..e54d3a9 --- /dev/null +++ b/docs/Models_8h.js @@ -0,0 +1,30 @@ +var Models_8h = +[ + [ "Model< DynamicsType >", "classModel.html", "classModel" ], + [ "RigidBodyParams1D", "structRigidBodyParams1D.html", "structRigidBodyParams1D" ], + [ "RigidBodyParams2D", "structRigidBodyParams2D.html", "structRigidBodyParams2D" ], + [ "RigidBodyParams3D", "structRigidBodyParams3D.html", "structRigidBodyParams3D" ], + [ "TranslationalDynamicsBase< IST, SST, SDST, d, PT >", "structTranslationalDynamicsBase.html", "structTranslationalDynamicsBase" ], + [ "RotationalDynamics1DOF< T >", "structRotationalDynamics1DOF.html", "structRotationalDynamics1DOF" ], + [ "RotationalDynamics3DOF< T >", "structRotationalDynamics3DOF.html", "structRotationalDynamics3DOF" ], + [ "RigidBodyDynamics3DOF< T >", "structRigidBodyDynamics3DOF.html", "structRigidBodyDynamics3DOF" ], + [ "RigidBodyDynamics6DOF< T >", "structRigidBodyDynamics6DOF.html", "structRigidBodyDynamics6DOF" ], + [ "MAKE_MODEL", "Models_8h.html#a01637abb86bd3009fcff2cebc8a8735a", null ], + [ "RigidBody3DOFModel", "Models_8h.html#ab084e172ef604e5975b5ff17e33d06ce", null ], + [ "RigidBody3DOFModeld", "Models_8h.html#a46f2319cb159c02e4eb4801d850d54d9", null ], + [ "RigidBody6DOFModel", "Models_8h.html#a8f7d8c7063cb9c51d2bb794931db3a34", null ], + [ "RigidBody6DOFModeld", "Models_8h.html#a40c2fc8d427c1bd6dfee02295ccb3cb6", null ], + [ "Rotational1DOFModel", "Models_8h.html#abc1d5223da3343a9537cc0a6f5abd239", null ], + [ "Rotational1DOFModeld", "Models_8h.html#af9b104589a404874af160185cf8a725c", null ], + [ "Rotational3DOFModel", "Models_8h.html#a287ab38fdf9b2634bf844a17719b9115", null ], + [ "Rotational3DOFModeld", "Models_8h.html#a51e40a2924a4b6ff134878368461bb1a", null ], + [ "Translational1DOFModel", "Models_8h.html#af9ad4901a092a7e81f8b092d1dbcf5f5", null ], + [ "Translational1DOFModeld", "Models_8h.html#ab405c6c48aa770f74c7e942302b956c5", null ], + [ "Translational2DOFModel", "Models_8h.html#aee5681b9331f5514938a77680e9e1162", null ], + [ "Translational2DOFModeld", "Models_8h.html#a7768cd6b33a5d94a677357664052d096", null ], + [ "Translational3DOFModel", "Models_8h.html#a3d0d9bd06d48c1d0022090b040895a62", null ], + [ "Translational3DOFModeld", "Models_8h.html#a3c501b1f5d946eb9aa36b92d2ec611c5", null ], + [ "TranslationalDynamics1DOF", "Models_8h.html#aac436ed3df206f07f93110e3daffe773", null ], + [ "TranslationalDynamics2DOF", "Models_8h.html#ae3889fdff8dd169aef62fcdf6340e0e1", null ], + [ "TranslationalDynamics3DOF", "Models_8h.html#ad1ba77eac61f5da29df59b8b4b0d7a0d", null ] +]; \ No newline at end of file diff --git a/docs/Models_8h_source.html b/docs/Models_8h_source.html new file mode 100644 index 0000000..117b332 --- /dev/null +++ b/docs/Models_8h_source.html @@ -0,0 +1,633 @@ + + + + + + + +signals-cpp: include/signals/Models.h Source File + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Models.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2#include <optional>
+
3#include "signals/State.h"
+ +
5
+
6using namespace Eigen;
+
7
+
23template<typename DynamicsType>
+
+
24class Model
+
25{
+
26public:
+
27 using InputSignalType = typename DynamicsType::InputSignalType;
+
28 using StateDotSignalType = typename DynamicsType::StateDotSignalType;
+
29 using StateSignalType = typename DynamicsType::StateSignalType;
+
30 using ParamsType = typename DynamicsType::ParamsType;
+
31
+ + +
40
+
+
41 Model() : params_{std::nullopt}
+
42 {
+
43 reset();
+
44 }
+
+
45
+
+
51 void setParams(const ParamsType& params)
+
52 {
+
53 params_ = params;
+
54 }
+
+
55
+
+
59 bool hasParams()
+
60 {
+
61 return params_.has_value();
+
62 }
+
+
63
+
+
67 void reset()
+
68 {
+
69 x.reset();
+
70 xdot.reset();
+
71 }
+
+
72
+
+
76 double t() const
+
77 {
+
78 return x.t();
+
79 }
+
+
80
+
89 template<typename IntegratorType>
+
+ +
91 const double& tf,
+
92 const bool& insertIntoHistory = false,
+
93 const bool& calculateXddot = false)
+
94 {
+
95 if (!hasParams())
+
96 return false;
+
97 double t0 = x.t();
+
98 double dt;
+
99 if (!signal_utils::getTimeDelta(dt, t0, tf))
+
100 {
+
101 return false;
+
102 }
+
103 if (!DynamicsType::update(xdot, x, u, t0, tf, params_.value(), insertIntoHistory, calculateXddot))
+
104 {
+
105 return false;
+
106 }
+
107 if (!IntegratorType::integrate(x, xdot, tf, insertIntoHistory))
+
108 {
+
109 return false;
+
110 }
+
111 return true;
+
112 }
+
+
113
+
124 template<typename IntegratorType>
+
+ +
126 const double& tf,
+
127 const double& dt,
+
128 const bool& insertIntoHistory = false,
+
129 const bool& calculateXddot = false)
+
130 {
+
131 if (!hasParams())
+
132 return false;
+
133 double t_k = x.t();
+
134 while (t_k < tf)
+
135 {
+
136 double dt_k;
+
137 if (!signal_utils::getTimeDelta(dt_k, t_k, tf, dt))
+
138 {
+
139 return false;
+
140 }
+
141 double t_kp1 = t_k + dt_k;
+
142 if (!DynamicsType::update(xdot, x, u, t_k, t_kp1, params_.value(), insertIntoHistory, calculateXddot))
+
143 {
+
144 return false;
+
145 }
+
146 if (!IntegratorType::integrate(x, xdot, t_kp1, insertIntoHistory))
+
147 {
+
148 return false;
+
149 }
+
150 t_k = t_kp1;
+
151 }
+
152 return true;
+
153 }
+
+
154
+
155private:
+
156 std::optional<ParamsType> params_;
+
157};
+
+
158
+
+ +
165{
+
166 RigidBodyParams1D() : m(1), g(0) {}
+
170 double m;
+
176 double g;
+
177};
+
+
178
+
+ +
185{
+
186 RigidBodyParams2D() : m(1), J(1), g(Vector2d::Zero()) {}
+
190 double m;
+
196 double J;
+
202 Vector2d g;
+
203};
+
+
204
+
+ +
211{
+
212 RigidBodyParams3D() : m(1), J(Matrix3d::Identity()), g(Vector3d::Zero()) {}
+
216 double m;
+
222 Matrix3d J;
+
228 Vector3d g;
+
229};
+
+
230
+
234template<typename IST, typename SST, typename SDST, size_t d, typename PT>
+
+ +
236{
+
237 using InputSignalType = IST;
+ +
239 using StateSignalType = SDST;
+
240
+
241 using InputType = typename InputSignalType::BaseType;
+
242 using StateType = typename StateSignalType::BaseType;
+
243 using StateDotType = typename StateDotSignalType::BaseType;
+
244 using StateDotDotType = typename StateDotSignalType::TangentType;
+
245
+
246 using ParamsType = PT;
+
247
+
+
259 static bool update(StateDotSignalType& xdot,
+
260 const StateSignalType& x,
+
261 const InputSignalType& u,
+
262 const double& t0,
+
263 const double& tf,
+
264 const ParamsType& params,
+
265 const bool& insertIntoHistory = false,
+
266 const bool& calculateXddot = false)
+
267 {
+
268 InputType u_k = u(t0);
+
269 StateType x_k = x(t0);
+
270
+
271 StateDotType xdot_k;
+
272 xdot_k.pose = x_k.twist;
+
273 xdot_k.twist = -params.g + u_k / params.m;
+
274
+
275 if (calculateXddot)
+
276 {
+
277 return xdot.update(tf, xdot_k, insertIntoHistory);
+
278 }
+
279 else
+
280 {
+
281 return xdot.update(tf, xdot_k, StateDotDotType::identity(), insertIntoHistory);
+
282 }
+
283 }
+
+
284};
+
+
285
+
286template<typename T>
+ + +
289
+
290template<typename T>
+ + +
293
+
294template<typename T>
+ + +
297
+
301template<typename T>
+
+ +
303{
+ + + +
307
+ + + + +
312
+ +
314
+
+
326 static bool update(StateDotSignalType& xdot,
+
327 const StateSignalType& x,
+
328 const InputSignalType& u,
+
329 const double& t0,
+
330 const double& tf,
+
331 const ParamsType& params,
+
332 const bool& insertIntoHistory = false,
+
333 const bool& calculateXddot = false)
+
334 {
+
335 InputType u_k = u(t0);
+
336 StateType x_k = x(t0);
+
337
+
338 StateDotType xdot_k;
+
339 xdot_k.pose = x_k.twist;
+
340 xdot_k.twist = u_k / params.J;
+
341
+
342 if (calculateXddot)
+
343 {
+
344 return xdot.update(tf, xdot_k, insertIntoHistory);
+
345 }
+
346 else
+
347 {
+
348 return xdot.update(tf, xdot_k, StateDotDotType::identity(), insertIntoHistory);
+
349 }
+
350 }
+
+
351};
+
+
352
+
356template<typename T>
+
+ +
358{
+ + + +
362
+ + + + +
367
+ +
369
+
+
381 static bool update(StateDotSignalType& xdot,
+
382 const StateSignalType& x,
+
383 const InputSignalType& u,
+
384 const double& t0,
+
385 const double& tf,
+
386 const ParamsType& params,
+
387 const bool& insertIntoHistory = false,
+
388 const bool& calculateXddot = false)
+
389 {
+
390 InputType u_k = u(t0);
+
391 StateType x_k = x(t0);
+
392
+
393 StateDotType xdot_k;
+
394 xdot_k.pose = x_k.twist;
+
395 xdot_k.twist = params.J.inverse() * (-x_k.twist.cross(params.J * x_k.twist) + u_k);
+
396
+
397 if (calculateXddot)
+
398 {
+
399 return xdot.update(tf, xdot_k, insertIntoHistory);
+
400 }
+
401 else
+
402 {
+
403 return xdot.update(tf, xdot_k, StateDotDotType::identity(), insertIntoHistory);
+
404 }
+
405 }
+
+
406};
+
+
407
+
411template<typename T>
+
+ +
413{
+ + + +
417
+ + + + +
422
+ +
424
+
+
436 static bool update(StateDotSignalType& xdot,
+
437 const StateSignalType& x,
+
438 const InputSignalType& u,
+
439 const double& t0,
+
440 const double& tf,
+
441 const ParamsType& params,
+
442 const bool& insertIntoHistory = false,
+
443 const bool& calculateXddot = false)
+
444 {
+
445 InputType u_k = u(t0);
+
446 StateType x_k = x(t0);
+
447
+
448 StateDotType xdot_k;
+
449 xdot_k.pose = x_k.twist;
+
450 xdot_k.twist.template block<2, 1>(0, 0) = -(x_k.pose.q().inverse() * params.g) -
+
451 x_k.twist(2) * Matrix<T, 2, 1>(-x_k.twist(1), x_k.twist(0)) +
+
452 1.0 / params.m * u_k.template block<2, 1>(0, 0);
+
453 xdot_k.twist(2) = u_k(2) / params.J;
+
454
+
455 if (calculateXddot)
+
456 {
+
457 return xdot.update(tf, xdot_k, insertIntoHistory);
+
458 }
+
459 else
+
460 {
+
461 return xdot.update(tf, xdot_k, StateDotDotType::identity(), insertIntoHistory);
+
462 }
+
463 }
+
+
464};
+
+
465
+
469template<typename T>
+
+ +
471{
+ + + +
475
+ + + + +
480
+ +
482
+
+
494 static bool update(StateDotSignalType& xdot,
+
495 const StateSignalType& x,
+
496 const InputSignalType& u,
+
497 const double& t0,
+
498 const double& tf,
+
499 const ParamsType& params,
+
500 const bool& insertIntoHistory = false,
+
501 const bool& calculateXddot = false)
+
502 {
+
503 InputType u_k = u(t0);
+
504 StateType x_k = x(t0);
+
505
+
506 // The entire xdot vector is in the body-frame, since we're using it as a local perturbation
+
507 // vector for the oplus and ominus operations from SE(3). i.e., we increment the translation
+
508 // vector and attitude jointly, unlike with many filter/controller implementations.
+
509 StateDotType xdot_k;
+
510 xdot_k.pose = x_k.twist;
+
511 xdot_k.twist.template block<3, 1>(0, 0) =
+
512 -(x_k.pose.q().inverse() * params.g) -
+
513 x_k.twist.template block<3, 1>(3, 0).cross(x_k.twist.template block<3, 1>(0, 0)) +
+
514 1.0 / params.m * u_k.template block<3, 1>(0, 0);
+
515 xdot_k.twist.template block<3, 1>(3, 0) =
+
516 params.J.inverse() *
+
517 (-x_k.twist.template block<3, 1>(3, 0).cross(params.J * x_k.twist.template block<3, 1>(3, 0)) +
+
518 u_k.template block<3, 1>(3, 0));
+
519
+
520 if (calculateXddot)
+
521 {
+
522 return xdot.update(tf, xdot_k, insertIntoHistory);
+
523 }
+
524 else
+
525 {
+
526 return xdot.update(tf, xdot_k, StateDotDotType::identity(), insertIntoHistory);
+
527 }
+
528 }
+
+
529};
+
+
530
+
+
531#define MAKE_MODEL(ModelBaseName, ModelDOF) \
+
532 template<typename T> \
+
533 using ModelBaseName##ModelDOF##Model = Model<ModelBaseName##Dynamics##ModelDOF<T>>; \
+
534 typedef ModelBaseName##ModelDOF##Model<double> ModelBaseName##ModelDOF##Modeld;
+
+
535
+
536MAKE_MODEL(Translational, 1DOF)
+
537MAKE_MODEL(Translational, 2DOF)
+
538MAKE_MODEL(Translational, 3DOF)
+
539MAKE_MODEL(Rotational, 1DOF)
+
540MAKE_MODEL(Rotational, 3DOF)
+
541MAKE_MODEL(RigidBody, 3DOF)
+
542MAKE_MODEL(RigidBody, 6DOF)
+ +
#define MAKE_MODEL(ModelBaseName, ModelDOF)
Definition Models.h:531
+
TranslationalDynamicsBase< ScalarSignal< T >, ScalarStateSignal< T >, ScalarStateSignal< T >, 1, RigidBodyParams1D > TranslationalDynamics1DOF
Definition Models.h:287
+
TranslationalDynamicsBase< Vector3Signal< T >, Vector3StateSignal< T >, Vector3StateSignal< T >, 3, RigidBodyParams3D > TranslationalDynamics3DOF
Definition Models.h:295
+
TranslationalDynamicsBase< Vector2Signal< T >, Vector2StateSignal< T >, Vector2StateSignal< T >, 2, RigidBodyParams2D > TranslationalDynamics2DOF
Definition Models.h:291
+
VectorSignal< T, 6 > Vector6Signal
Definition Signal.h:706
+
VectorSignal< T, 1 > Vector1Signal
Definition Signal.h:701
+
VectorSignal< T, 3 > Vector3Signal
Definition Signal.h:703
+ +
ManifoldStateSignal< T, SO3< T >, 4, 3 > SO3StateSignal
Definition State.h:274
+
VectorStateSignal< T, 6 > Vector6StateSignal
Definition State.h:268
+
ManifoldStateSignal< T, SE3< T >, 7, 6 > SE3StateSignal
Definition State.h:276
+
ManifoldStateSignal< T, SO2< T >, 2, 1 > SO2StateSignal
Definition State.h:273
+
Signal< ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > > ScalarStateSignal
Definition State.h:213
+
VectorStateSignal< T, 2 > Vector2StateSignal
Definition State.h:264
+
VectorStateSignal< T, 1 > Vector1StateSignal
Definition State.h:263
+
VectorStateSignal< T, 3 > Vector3StateSignal
Definition State.h:265
+
ManifoldStateSignal< T, SE2< T >, 4, 3 > SE2StateSignal
Definition State.h:275
+
Model()
Definition Models.h:41
+
bool hasParams()
Definition Models.h:59
+
typename DynamicsType::StateSignalType StateSignalType
Definition Models.h:29
+
double t() const
Definition Models.h:76
+
void reset()
Zero out the model state and derivative variables and reset simulation time to zero.
Definition Models.h:67
+
typename DynamicsType::StateDotSignalType StateDotSignalType
Definition Models.h:28
+
void setParams(const ParamsType &params)
Definition Models.h:51
+
StateDotSignalType xdot
Definition Models.h:39
+
StateSignalType x
Definition Models.h:35
+
bool simulate(const InputSignalType &u, const double &tf, const double &dt, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Definition Models.h:125
+
bool simulate(const InputSignalType &u, const double &tf, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Definition Models.h:90
+
typename DynamicsType::InputSignalType InputSignalType
Definition Models.h:27
+
typename DynamicsType::ParamsType ParamsType
Definition Models.h:30
+
typename VectorSignalSpec< T, d >::Type BaseType
Definition Signal.h:40
+
typename VectorStateSignalSpec< T, d >::Type TangentType
Definition Signal.h:41
+
bool update(const double &_t, const BaseType &_x, bool insertHistory=false)
Definition Signal.h:174
+
bool getTimeDelta(double &dt, const double &t0, const double &tf, const double &dt_max=std::numeric_limits< double >::max())
Definition Utils.h:11
+
Definition of the dynamics for planar motion of a mass that's allowed to rotate.
Definition Models.h:413
+
SE2StateSignal< T > StateSignalType
Definition Models.h:415
+
Vector3StateSignal< T > StateDotSignalType
Definition Models.h:416
+
Vector3Signal< T > InputSignalType
Definition Models.h:414
+
typename StateSignalType::BaseType StateType
Definition Models.h:419
+
typename StateDotSignalType::TangentType StateDotDotType
Definition Models.h:421
+
typename StateDotSignalType::BaseType StateDotType
Definition Models.h:420
+
typename InputSignalType::BaseType InputType
Definition Models.h:418
+
static bool update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Update a provided state time derivative given an input and time interval.
Definition Models.h:436
+
RigidBodyParams2D ParamsType
Definition Models.h:423
+
Definition of the dynamics for a 3D rigid body that can rotate about any axis.
Definition Models.h:471
+
typename StateDotSignalType::TangentType StateDotDotType
Definition Models.h:479
+
Vector6Signal< T > InputSignalType
Definition Models.h:472
+
typename StateDotSignalType::BaseType StateDotType
Definition Models.h:478
+
typename InputSignalType::BaseType InputType
Definition Models.h:476
+
RigidBodyParams3D ParamsType
Definition Models.h:481
+
SE3StateSignal< T > StateSignalType
Definition Models.h:473
+
typename StateSignalType::BaseType StateType
Definition Models.h:477
+
static bool update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Update a provided state time derivative given an input and time interval.
Definition Models.h:494
+
Vector6StateSignal< T > StateDotSignalType
Definition Models.h:474
+
Parameters for a 1D rigid body model.
Definition Models.h:165
+
double m
Model mass.
Definition Models.h:170
+
double g
Gravitational constant.
Definition Models.h:176
+
RigidBodyParams1D()
Definition Models.h:166
+
Parameters for a 2D rigid body model.
Definition Models.h:185
+
double m
Model mass.
Definition Models.h:190
+
RigidBodyParams2D()
Definition Models.h:186
+
double J
Moment of inertia.
Definition Models.h:196
+
Vector2d g
Gravitational vector.
Definition Models.h:202
+
Parameters for a 3D rigid body model.
Definition Models.h:211
+
Matrix3d J
Moment of inertia.
Definition Models.h:222
+
Vector3d g
Gravitational vector.
Definition Models.h:228
+
RigidBodyParams3D()
Definition Models.h:212
+
double m
Model mass.
Definition Models.h:216
+
Definition of the dynamics for planar rotation-only motion of a mass.
Definition Models.h:303
+
Vector1StateSignal< T > StateDotSignalType
Definition Models.h:306
+
RigidBodyParams2D ParamsType
Definition Models.h:313
+
static bool update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Update a provided state time derivative given an input and time interval.
Definition Models.h:326
+
typename StateDotSignalType::TangentType StateDotDotType
Definition Models.h:311
+
typename StateDotSignalType::BaseType StateDotType
Definition Models.h:310
+
Vector1Signal< T > InputSignalType
Definition Models.h:304
+
typename StateSignalType::BaseType StateType
Definition Models.h:309
+
SO2StateSignal< T > StateSignalType
Definition Models.h:305
+
typename InputSignalType::BaseType InputType
Definition Models.h:308
+
Definition of the dynamics for 3D rotation-only motion of a mass.
Definition Models.h:358
+
SO3StateSignal< T > StateSignalType
Definition Models.h:360
+
RigidBodyParams3D ParamsType
Definition Models.h:368
+
typename StateDotSignalType::BaseType StateDotType
Definition Models.h:365
+
Vector3StateSignal< T > StateDotSignalType
Definition Models.h:361
+
typename StateDotSignalType::TangentType StateDotDotType
Definition Models.h:366
+
Vector3Signal< T > InputSignalType
Definition Models.h:359
+
typename StateSignalType::BaseType StateType
Definition Models.h:364
+
typename InputSignalType::BaseType InputType
Definition Models.h:363
+
static bool update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Update a provided state time derivative given an input and time interval.
Definition Models.h:381
+
Base class for defining the dynamics for 1D, 2D, and 3D point masses.
Definition Models.h:236
+
SDST StateSignalType
Definition Models.h:239
+
typename StateDotSignalType::BaseType StateDotType
Definition Models.h:243
+
SST StateDotSignalType
Definition Models.h:238
+
static bool update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
Update a provided state time derivative given an input and time interval.
Definition Models.h:259
+
typename StateDotSignalType::TangentType StateDotDotType
Definition Models.h:244
+
PT ParamsType
Definition Models.h:246
+
typename StateSignalType::BaseType StateType
Definition Models.h:242
+
IST InputSignalType
Definition Models.h:237
+
typename InputSignalType::BaseType InputType
Definition Models.h:241
+
+
+ + + + diff --git a/docs/Signal_8h.html b/docs/Signal_8h.html new file mode 100644 index 0000000..bdf6a6d --- /dev/null +++ b/docs/Signal_8h.html @@ -0,0 +1,1059 @@ + + + + + + + +signals-cpp: include/signals/Signal.h File Reference + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Signal.h File Reference
+
+
+
#include <algorithm>
+#include <limits>
+#include <Eigen/Core>
+#include <SO2.h>
+#include <SO3.h>
+#include <SE2.h>
+#include <SE3.h>
+#include "Utils.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + + +

+Classes

class  Signal< BaseSignalSpec, TangentSignalSpec >
 
struct  Signal< BaseSignalSpec, TangentSignalSpec >::SignalDP
 
struct  ScalarSignalSpec< T >
 
struct  VectorSignalSpec< T, d >
 
struct  ManifoldSignalSpec< ManifoldType >
 
+ + + + + +

+Macros

#define MAKE_VECTOR_SIGNAL(Dimension)
 
#define MAKE_MANIF_SIGNAL(Manif, Dimension)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

template<typename T>
using ScalarSignal = Signal<ScalarSignalSpec<T>, ScalarSignalSpec<T>>
 
template<typename T, size_t d>
using VectorSignal = Signal<VectorSignalSpec<T, d>, VectorSignalSpec<T, d>>
 
template<typename T, typename ManifoldType, size_t d>
using ManifoldSignal = Signal<ManifoldSignalSpec<ManifoldType>, VectorSignalSpec<T, d>>
 
typedef ScalarSignal< double > ScalardSignal
 
template<typename T>
using Vector1Signal = VectorSignal<T, 1>
 
typedef Vector1Signal< double > Vector1dSignal
 
template<typename T>
using Vector2Signal = VectorSignal<T, 2>
 
typedef Vector2Signal< double > Vector2dSignal
 
template<typename T>
using Vector3Signal = VectorSignal<T, 3>
 
typedef Vector3Signal< double > Vector3dSignal
 
template<typename T>
using Vector4Signal = VectorSignal<T, 4>
 
typedef Vector4Signal< double > Vector4dSignal
 
template<typename T>
using Vector5Signal = VectorSignal<T, 5>
 
typedef Vector5Signal< double > Vector5dSignal
 
template<typename T>
using Vector6Signal = VectorSignal<T, 6>
 
typedef Vector6Signal< double > Vector6dSignal
 
template<typename T>
using Vector7Signal = VectorSignal<T, 7>
 
typedef Vector7Signal< double > Vector7dSignal
 
template<typename T>
using Vector8Signal = VectorSignal<T, 8>
 
typedef Vector8Signal< double > Vector8dSignal
 
template<typename T>
using Vector9Signal = VectorSignal<T, 9>
 
typedef Vector9Signal< double > Vector9dSignal
 
template<typename T>
using Vector10Signal = VectorSignal<T, 10>
 
typedef Vector10Signal< double > Vector10dSignal
 
template<typename T>
using SO2Signal = ManifoldSignal<T, SO2<T>, 1>
 
typedef SO2Signal< double > SO2dSignal
 
template<typename T>
using SO3Signal = ManifoldSignal<T, SO3<T>, 3>
 
typedef SO3Signal< double > SO3dSignal
 
template<typename T>
using SE2Signal = ManifoldSignal<T, SE2<T>, 3>
 
typedef SE2Signal< double > SE2dSignal
 
template<typename T>
using SE3Signal = ManifoldSignal<T, SE3<T>, 6>
 
typedef SE3Signal< double > SE3dSignal
 
+ + + + + + + + +

+Enumerations

enum  InterpolationMethod { ZERO_ORDER_HOLD +, LINEAR +, CUBIC_SPLINE + }
 TODO. More...
 
enum  ExtrapolationMethod { NANS +, ZEROS +, CLOSEST + }
 
enum  DerivativeMethod { DIRTY +, FINITE_DIFF + }
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<typename BaseSignalSpec, typename TangentSignalSpec>
Signal< BaseSignalSpec, TangentSignalSpec > operator+ (const Signal< BaseSignalSpec, TangentSignalSpec > &l, const Signal< TangentSignalSpec, TangentSignalSpec > &r)
 
template<typename BaseSignalSpec, typename TangentSignalSpec>
Signal< TangentSignalSpec, TangentSignalSpec > operator- (const Signal< BaseSignalSpec, TangentSignalSpec > &l, const Signal< BaseSignalSpec, TangentSignalSpec > &r)
 
template<typename BaseSignalSpec, typename TangentSignalSpec>
Signal< BaseSignalSpec, TangentSignalSpec > operator* (const double &l, const Signal< BaseSignalSpec, TangentSignalSpec > &r)
 
template<typename BaseSignalSpec, typename TangentSignalSpec>
Signal< BaseSignalSpec, TangentSignalSpec > operator* (const Signal< BaseSignalSpec, TangentSignalSpec > &l, const double &r)
 
template<typename T>
std::ostream & operator<< (std::ostream &os, const ScalarSignal< T > &x)
 
template<typename T, size_t d>
std::ostream & operator<< (std::ostream &os, const VectorSignal< T, d > &x)
 
template<typename T, typename ManifoldType, size_t d>
std::ostream & operator<< (std::ostream &os, const ManifoldSignal< T, ManifoldType, d > &x)
 
+

Macro Definition Documentation

+ +

◆ MAKE_MANIF_SIGNAL

+ +
+
+ + + + + + + + + + + +
#define MAKE_MANIF_SIGNAL( Manif,
Dimension )
+
+Value:
template<typename T> \
+
using Manif##Signal = ManifoldSignal<T, Manif<T>, Dimension>; \
+
typedef Manif##Signal<double> Manif##dSignal;
+
Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > > ManifoldSignal
Definition Signal.h:681
+
Definition Signal.h:38
+
+
+
+ +

◆ MAKE_VECTOR_SIGNAL

+ +
+
+ + + + + + + +
#define MAKE_VECTOR_SIGNAL( Dimension)
+
+Value:
template<typename T> \
+
using Vector##Dimension##Signal = VectorSignal<T, Dimension>; \
+
typedef Vector##Dimension##Signal<double> Vector##Dimension##dSignal;
+
Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > > VectorSignal
Definition Signal.h:671
+
+
+
+

Typedef Documentation

+ +

◆ ManifoldSignal

+ +
+
+
+template<typename T, typename ManifoldType, size_t d>
+ + + + +
using ManifoldSignal = Signal<ManifoldSignalSpec<ManifoldType>, VectorSignalSpec<T, d>>
+
+ +
+
+ +

◆ ScalardSignal

+ +
+
+ + + + +
typedef ScalarSignal<double> ScalardSignal
+
+ +
+
+ +

◆ ScalarSignal

+ +
+
+
+template<typename T>
+ + + + +
using ScalarSignal = Signal<ScalarSignalSpec<T>, ScalarSignalSpec<T>>
+
+ +
+
+ +

◆ SE2dSignal

+ +
+
+ + + + +
typedef SE2Signal<double> SE2dSignal
+
+ +
+
+ +

◆ SE2Signal

+ +
+
+
+template<typename T>
+ + + + +
using SE2Signal = ManifoldSignal<T, SE2<T>, 3>
+
+ +
+
+ +

◆ SE3dSignal

+ +
+
+ + + + +
typedef SE3Signal<double> SE3dSignal
+
+ +
+
+ +

◆ SE3Signal

+ +
+
+
+template<typename T>
+ + + + +
using SE3Signal = ManifoldSignal<T, SE3<T>, 6>
+
+ +
+
+ +

◆ SO2dSignal

+ +
+
+ + + + +
typedef SO2Signal<double> SO2dSignal
+
+ +
+
+ +

◆ SO2Signal

+ +
+
+
+template<typename T>
+ + + + +
using SO2Signal = ManifoldSignal<T, SO2<T>, 1>
+
+ +
+
+ +

◆ SO3dSignal

+ +
+
+ + + + +
typedef SO3Signal<double> SO3dSignal
+
+ +
+
+ +

◆ SO3Signal

+ +
+
+
+template<typename T>
+ + + + +
using SO3Signal = ManifoldSignal<T, SO3<T>, 3>
+
+ +
+
+ +

◆ Vector10dSignal

+ +
+
+ + + + +
typedef Vector10Signal<double> Vector10dSignal
+
+ +
+
+ +

◆ Vector10Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector10Signal = VectorSignal<T, 10>
+
+ +
+
+ +

◆ Vector1dSignal

+ +
+
+ + + + +
typedef Vector1Signal<double> Vector1dSignal
+
+ +
+
+ +

◆ Vector1Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector1Signal = VectorSignal<T, 1>
+
+ +
+
+ +

◆ Vector2dSignal

+ +
+
+ + + + +
typedef Vector2Signal<double> Vector2dSignal
+
+ +
+
+ +

◆ Vector2Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector2Signal = VectorSignal<T, 2>
+
+ +
+
+ +

◆ Vector3dSignal

+ +
+
+ + + + +
typedef Vector3Signal<double> Vector3dSignal
+
+ +
+
+ +

◆ Vector3Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector3Signal = VectorSignal<T, 3>
+
+ +
+
+ +

◆ Vector4dSignal

+ +
+
+ + + + +
typedef Vector4Signal<double> Vector4dSignal
+
+ +
+
+ +

◆ Vector4Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector4Signal = VectorSignal<T, 4>
+
+ +
+
+ +

◆ Vector5dSignal

+ +
+
+ + + + +
typedef Vector5Signal<double> Vector5dSignal
+
+ +
+
+ +

◆ Vector5Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector5Signal = VectorSignal<T, 5>
+
+ +
+
+ +

◆ Vector6dSignal

+ +
+
+ + + + +
typedef Vector6Signal<double> Vector6dSignal
+
+ +
+
+ +

◆ Vector6Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector6Signal = VectorSignal<T, 6>
+
+ +
+
+ +

◆ Vector7dSignal

+ +
+
+ + + + +
typedef Vector7Signal<double> Vector7dSignal
+
+ +
+
+ +

◆ Vector7Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector7Signal = VectorSignal<T, 7>
+
+ +
+
+ +

◆ Vector8dSignal

+ +
+
+ + + + +
typedef Vector8Signal<double> Vector8dSignal
+
+ +
+
+ +

◆ Vector8Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector8Signal = VectorSignal<T, 8>
+
+ +
+
+ +

◆ Vector9dSignal

+ +
+
+ + + + +
typedef Vector9Signal<double> Vector9dSignal
+
+ +
+
+ +

◆ Vector9Signal

+ +
+
+
+template<typename T>
+ + + + +
using Vector9Signal = VectorSignal<T, 9>
+
+ +
+
+ +

◆ VectorSignal

+ +
+
+
+template<typename T, size_t d>
+ + + + +
using VectorSignal = Signal<VectorSignalSpec<T, d>, VectorSignalSpec<T, d>>
+
+ +
+
+

Enumeration Type Documentation

+ +

◆ DerivativeMethod

+ +
+
+ + + + +
enum DerivativeMethod
+
+ + + +
Enumerator
DIRTY 
FINITE_DIFF 
+ +
+
+ +

◆ ExtrapolationMethod

+ +
+
+ + + + +
enum ExtrapolationMethod
+
+ + + + +
Enumerator
NANS 
ZEROS 
CLOSEST 
+ +
+
+ +

◆ InterpolationMethod

+ +
+
+ + + + +
enum InterpolationMethod
+
+ +

TODO.

+ + + + +
Enumerator
ZERO_ORDER_HOLD 
LINEAR 
CUBIC_SPLINE 
+ +
+
+

Function Documentation

+ +

◆ operator*() [1/2]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + + + + + + + +
Signal< BaseSignalSpec, TangentSignalSpec > operator* (const double & l,
const Signal< BaseSignalSpec, TangentSignalSpec > & r )
+
+ +
+
+ +

◆ operator*() [2/2]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + + + + + + + +
Signal< BaseSignalSpec, TangentSignalSpec > operator* (const Signal< BaseSignalSpec, TangentSignalSpec > & l,
const double & r )
+
+ +
+
+ +

◆ operator+()

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + + + + + + + +
Signal< BaseSignalSpec, TangentSignalSpec > operator+ (const Signal< BaseSignalSpec, TangentSignalSpec > & l,
const Signal< TangentSignalSpec, TangentSignalSpec > & r )
+
+ +
+
+ +

◆ operator-()

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + + + + + + + +
Signal< TangentSignalSpec, TangentSignalSpec > operator- (const Signal< BaseSignalSpec, TangentSignalSpec > & l,
const Signal< BaseSignalSpec, TangentSignalSpec > & r )
+
+ +
+
+ +

◆ operator<<() [1/3]

+ +
+
+
+template<typename T, typename ManifoldType, size_t d>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const ManifoldSignal< T, ManifoldType, d > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [2/3]

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const ScalarSignal< T > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [3/3]

+ +
+
+
+template<typename T, size_t d>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const VectorSignal< T, d > & x )
+
+inline
+
+ +
+
+
+
+ + + + diff --git a/docs/Signal_8h.js b/docs/Signal_8h.js new file mode 100644 index 0000000..bac5337 --- /dev/null +++ b/docs/Signal_8h.js @@ -0,0 +1,63 @@ +var Signal_8h = +[ + [ "Signal< BaseSignalSpec, TangentSignalSpec >", "classSignal.html", "classSignal" ], + [ "Signal< BaseSignalSpec, TangentSignalSpec >::SignalDP", "structSignal_1_1SignalDP.html", "structSignal_1_1SignalDP" ], + [ "ScalarSignalSpec< T >", "structScalarSignalSpec.html", "structScalarSignalSpec" ], + [ "VectorSignalSpec< T, d >", "structVectorSignalSpec.html", "structVectorSignalSpec" ], + [ "ManifoldSignalSpec< ManifoldType >", "structManifoldSignalSpec.html", "structManifoldSignalSpec" ], + [ "MAKE_MANIF_SIGNAL", "Signal_8h.html#adf89e7a1e286d52fa755d04f0c087ea3", null ], + [ "MAKE_VECTOR_SIGNAL", "Signal_8h.html#a45ef87a3bf4ac7938147e95995f76849", null ], + [ "ManifoldSignal", "Signal_8h.html#a278e5023dd90a58b58ce28b413ecec4a", null ], + [ "ScalardSignal", "Signal_8h.html#a5d3a7fde60e049b3fb16e62c397585a0", null ], + [ "ScalarSignal", "Signal_8h.html#a19e9e3fdf9dac462c6fb79ee572d2b4c", null ], + [ "SE2dSignal", "Signal_8h.html#a27317de3cebe688fdf9b1f89e8d749ea", null ], + [ "SE2Signal", "Signal_8h.html#a5c686d1c1e780f578c950182943ecf41", null ], + [ "SE3dSignal", "Signal_8h.html#a13875f09fcdcc6dd114766bacc38f01b", null ], + [ "SE3Signal", "Signal_8h.html#ab87588076a67398d28c7f77a2103470b", null ], + [ "SO2dSignal", "Signal_8h.html#a43a8b3bb4241f080c75114c98502e21b", null ], + [ "SO2Signal", "Signal_8h.html#acbd9dbde916447b024121b565ee6ea96", null ], + [ "SO3dSignal", "Signal_8h.html#a1fbce3445fc6d54d3dfc2aa95fdcc37f", null ], + [ "SO3Signal", "Signal_8h.html#a25f5e910566ad4b1b610a8eebb96274d", null ], + [ "Vector10dSignal", "Signal_8h.html#a75b25f1facc38a02d21c155ec05655cc", null ], + [ "Vector10Signal", "Signal_8h.html#acda8904322955c5f969f290bf1a42595", null ], + [ "Vector1dSignal", "Signal_8h.html#a22bc2b41e336fe6237cfa41ac7b57d0b", null ], + [ "Vector1Signal", "Signal_8h.html#a532b7bae92d23faa5962b50fab59ee1a", null ], + [ "Vector2dSignal", "Signal_8h.html#a718e737386d2321f3e31df01ffe2fd61", null ], + [ "Vector2Signal", "Signal_8h.html#af4c2088cbc0c8f8c95be6f22e990d0d1", null ], + [ "Vector3dSignal", "Signal_8h.html#addff0c3095fce02a8ae3d8669292ea8a", null ], + [ "Vector3Signal", "Signal_8h.html#a59c30838434bb9eabab59a54a0dceb9f", null ], + [ "Vector4dSignal", "Signal_8h.html#a785560e5ddb26fcf9edc2eb9f34e7ec8", null ], + [ "Vector4Signal", "Signal_8h.html#a04b5a6ff0c189cb66f0e3137b1362c30", null ], + [ "Vector5dSignal", "Signal_8h.html#ad0b807d45bcfe07cc9a2f54648dd4821", null ], + [ "Vector5Signal", "Signal_8h.html#a9f0b242918cfdc4b6eaecdeb6574b6cb", null ], + [ "Vector6dSignal", "Signal_8h.html#acb50cf2886559fdfc3aba4ee722f511a", null ], + [ "Vector6Signal", "Signal_8h.html#a4da3e39a6224769606055a56f1508e6b", null ], + [ "Vector7dSignal", "Signal_8h.html#afea76be78e2b329344fb610a62c421e9", null ], + [ "Vector7Signal", "Signal_8h.html#ac71cd26f6afca210f51cc394d520779b", null ], + [ "Vector8dSignal", "Signal_8h.html#ad2214d5fb3267b191128fcccb515448b", null ], + [ "Vector8Signal", "Signal_8h.html#a6fe111909e599c7d732507ef08213e06", null ], + [ "Vector9dSignal", "Signal_8h.html#acd349d949f45a7bce633414d05043cc3", null ], + [ "Vector9Signal", "Signal_8h.html#ae78698ceb51c16ea2ffea1ea2b5507e3", null ], + [ "VectorSignal", "Signal_8h.html#a51a32a4dd69ee28867dba6202c812c5a", null ], + [ "DerivativeMethod", "Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242", [ + [ "DIRTY", "Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242a6a4e132eb192a22c351397837d4c082c", null ], + [ "FINITE_DIFF", "Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242a31a5b438304c770230e3fbb9999c9c2e", null ] + ] ], + [ "ExtrapolationMethod", "Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4", [ + [ "NANS", "Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4af4517d0db561241ccfcf150e1629767f", null ], + [ "ZEROS", "Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4a5d7341ec5879a7f47c5cb82c0fdf6b5f", null ], + [ "CLOSEST", "Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4a901e715f86c693ccd2851e8c0b64cca3", null ] + ] ], + [ "InterpolationMethod", "Signal_8h.html#aa0081e804011c551ea0f4a596a64b284", [ + [ "ZERO_ORDER_HOLD", "Signal_8h.html#aa0081e804011c551ea0f4a596a64b284ad873f8ab97a3f6e892c8b834b23db574", null ], + [ "LINEAR", "Signal_8h.html#aa0081e804011c551ea0f4a596a64b284adc101ebf31c49c2d4b80b7c6f59f22cb", null ], + [ "CUBIC_SPLINE", "Signal_8h.html#aa0081e804011c551ea0f4a596a64b284a13480ea7779c90806a9fa4ef70322ebc", null ] + ] ], + [ "operator*", "Signal_8h.html#ad77fa5fab1a3e9a6ca4d7e87364003b9", null ], + [ "operator*", "Signal_8h.html#ae0b0bee5051aeec3c9cff9fd148d8cb5", null ], + [ "operator+", "Signal_8h.html#aa4dc7aa056ee91a7dc4ec540b6bc9cd3", null ], + [ "operator-", "Signal_8h.html#afd611b1d0ab8c1f43be72184926ec8ac", null ], + [ "operator<<", "Signal_8h.html#a6a76598b459ea2e14353617de437c808", null ], + [ "operator<<", "Signal_8h.html#a47318c97bced9b7ee828c94c1a4eeb29", null ], + [ "operator<<", "Signal_8h.html#aeb7f6d79d7e692981221b685c0863d54", null ] +]; \ No newline at end of file diff --git a/docs/Signal_8h_source.html b/docs/Signal_8h_source.html new file mode 100644 index 0000000..a9335b2 --- /dev/null +++ b/docs/Signal_8h_source.html @@ -0,0 +1,980 @@ + + + + + + + +signals-cpp: include/signals/Signal.h Source File + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Signal.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2#include <algorithm>
+
3#include <limits>
+
4#include <Eigen/Core>
+
5#include <SO2.h>
+
6#include <SO3.h>
+
7#include <SE2.h>
+
8#include <SE3.h>
+
9#include "Utils.h"
+
10
+
11using namespace Eigen;
+
12
+ +
22
+
+ +
24{
+ + + +
28};
+
+
29
+
+ +
31{
+ + +
34};
+
+
35
+
36template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+
37class Signal
+
38{
+
39public:
+
40 using BaseType = typename BaseSignalSpec::Type;
+
41 using TangentType = typename TangentSignalSpec::Type;
+
42
+
+
43 struct SignalDP
+
44 {
+
45 double t;
+ + +
48 };
+
+
49
+
50 struct
+
51 {
+
52 bool operator()(SignalDP a, SignalDP b) const
+
53 {
+
54 return a.t < b.t;
+
55 }
+ +
57
+ + + +
61
+ +
69
+
+
70 Signal(const Signal& other)
+
71 {
+
72 this->interpolationMethod = other.interpolationMethod;
+
73 this->extrapolationMethod = other.extrapolationMethod;
+
74 this->derivativeMethod = other.derivativeMethod;
+
75 this->t_ = other.t_;
+
76 this->x_ = other.x_;
+
77 this->xdot_ = other.xdot_;
+
78 this->signalHistory_ = other.signalHistory_;
+
79 this->needsSort_ = other.needsSort_;
+
80 }
+
+
81
+
+ +
83 {
+ +
85 for (auto signalDP : signalHistory_)
+
86 {
+
87 signalDot.update(signalDP.t, signalDP.xdot, true);
+
88 }
+
89 signalDot.update(t(), dot());
+
90 return signalDot;
+
91 }
+
+
92
+
93 template<typename BSS, typename TSS>
+ +
95
+
96 template<typename BSS, typename TSS>
+ +
98
+
99 template<typename BSS, typename TSS>
+
100 friend Signal<BSS, TSS> operator*(const double& l, const Signal<BSS, TSS>& r);
+
101
+
102 template<typename BSS, typename TSS>
+
103 friend Signal<BSS, TSS> operator*(const Signal<BSS, TSS>& l, const double& r);
+
104
+
+
105 double t() const
+
106 {
+
107 return t_;
+
108 }
+
+
109
+
+ +
111 {
+
112 return x_;
+
113 }
+
+
114
+
+ +
116 {
+
117 return xdot_;
+
118 }
+
+
119
+
+
120 BaseType operator()(const double& t) const
+
121 {
+
122 return xAt(t);
+
123 }
+
+
124
+
+
125 TangentType dot(const double& t) const
+
126 {
+
127 return xDotAt(t);
+
128 }
+
+
129
+
+
130 std::vector<BaseType> operator()(const std::vector<double>& t) const
+
131 {
+
132 std::vector<BaseType> xInterp;
+
133 for (size_t i = 0; i < t.size(); i++)
+
134 {
+
135 xInterp.push_back(xAt(t[i]));
+
136 }
+
137 return xInterp;
+
138 }
+
+
139
+
+
140 std::vector<TangentType> dot(const std::vector<double>& t) const
+
141 {
+
142 std::vector<TangentType> xDotInterp;
+
143 for (size_t i = 0; i < t.size(); i++)
+
144 {
+
145 xDotInterp.push_back(xDotAt(t[i]));
+
146 }
+
147 return xDotInterp;
+
148 }
+
+
149
+
+ +
151 {
+
152 interpolationMethod = method;
+
153 }
+
+
154
+
+ +
156 {
+
157 extrapolationMethod = method;
+
158 }
+
+
159
+
+ +
161 {
+
162 derivativeMethod = method;
+
163 }
+
+
164
+
+
165 void reset()
+
166 {
+
167 t_ = -1.0;
+
168 x_ = BaseSignalSpec::ZeroType();
+
169 xdot_ = TangentSignalSpec::ZeroType();
+
170 signalHistory_.clear();
+
171 needsSort_ = false;
+
172 }
+
+
173
+
+
174 bool update(const double& _t, const BaseType& _x, bool insertHistory = false)
+
175 {
+
176 TangentType _xdot;
+
177 if (!calculateDerivative(_t, _x, _xdot))
+
178 {
+
179 return false;
+
180 }
+
181 return update(_t, _x, _xdot, insertHistory);
+
182 }
+
+
183
+
+
184 bool update(const double& _t, const BaseType& _x, const TangentType& _xdot, bool insertHistory = false)
+
185 {
+
186 t_ = _t;
+
187 x_ = _x;
+
188 xdot_ = _xdot;
+
189 if (insertHistory)
+
190 {
+
191 if (insertIntoHistory(_t, _x, _xdot))
+
192 {
+
193 if (needsSort_)
+
194 {
+
195 std::sort(signalHistory_.begin(), signalHistory_.end(), SignalDPComparator);
+
196 needsSort_ = false;
+
197 }
+
198 return true;
+
199 }
+
200 else
+
201 {
+
202 return false;
+
203 }
+
204 }
+
205 return true;
+
206 }
+
+
207
+
+
208 bool update(const std::vector<double>& _tHistory, const std::vector<BaseType>& _xHistory)
+
209 {
+
210 size_t nTH = _tHistory.size();
+
211 size_t nXH = _xHistory.size();
+
212 if (nTH != nXH)
+
213 {
+
214 return false;
+
215 }
+
216 for (size_t i = 0; i < nXH; i++)
+
217 {
+
218 TangentType _xdot;
+
219 if (!calculateDerivative(_tHistory[i], _xHistory[i], _xdot))
+
220 {
+
221 return false;
+
222 }
+
223 if (!insertIntoHistory(_tHistory[i], _xHistory[i], _xdot))
+
224 {
+
225 return false;
+
226 }
+
227 }
+
228 if (needsSort_)
+
229 {
+
230 std::sort(signalHistory_.begin(), signalHistory_.end(), SignalDPComparator);
+
231 needsSort_ = false;
+
232 }
+
233 return true;
+
234 }
+
+
235
+
+
236 bool update(const std::vector<double>& _tHistory,
+
237 const std::vector<BaseType>& _xHistory,
+
238 const std::vector<TangentType>& _xdotHistory)
+
239 {
+
240 size_t nTH = _tHistory.size();
+
241 size_t nXH = _xHistory.size();
+
242 size_t nXDH = _xdotHistory.size();
+
243 if (nXH != nXDH || nXDH != nTH)
+
244 {
+
245 return false;
+
246 }
+
247 for (size_t i = 0; i < nXH; i++)
+
248 {
+
249 if (!insertIntoHistory(_tHistory[i], _xHistory[i], _xdotHistory[i]))
+
250 {
+
251 return false;
+
252 }
+
253 }
+
254 if (needsSort_)
+
255 {
+
256 std::sort(signalHistory_.begin(), signalHistory_.end(), SignalDPComparator);
+
257 needsSort_ = false;
+
258 }
+
259 return true;
+
260 }
+
+
261
+
262private:
+
263 double t_;
+
264 BaseType x_;
+
265 TangentType xdot_;
+
266 std::vector<SignalDP> signalHistory_;
+
267 bool needsSort_;
+
268
+
269 bool insertIntoHistory(const double& _t, const BaseType& _x, const TangentType& _xdot)
+
270 {
+
271 if (_t > t_)
+
272 {
+
273 t_ = _t;
+
274 x_ = _x;
+
275 xdot_ = _xdot;
+
276 }
+
277 if (signalHistory_.size() > 0)
+
278 {
+
279 double mostRecentTime = signalHistory_[signalHistory_.size() - 1].t;
+
280 if (_t == mostRecentTime)
+
281 {
+
282 return false;
+
283 }
+
284 else if (_t < mostRecentTime)
+
285 {
+
286 needsSort_ = true;
+
287 }
+
288 }
+
289 signalHistory_.push_back({_t, _x, _xdot});
+
290 return true;
+
291 }
+
292
+
293 BaseType xAt(const double& t) const
+
294 {
+
295 if (t == t_)
+
296 {
+
297 return x_;
+
298 }
+
299 else if (signalHistory_.size() > 0)
+
300 {
+
301 int idx = getInterpIndex(t);
+
302 if (idx < 0 || idx >= static_cast<int>(signalHistory_.size()))
+
303 {
+
304 switch (extrapolationMethod)
+
305 {
+ +
307 return BaseSignalSpec::NansType();
+
308 break;
+ +
310 if (idx < 0)
+
311 {
+
312 return signalHistory_[0].x;
+
313 }
+
314 else
+
315 {
+
316 return signalHistory_[signalHistory_.size() - 1].x;
+
317 }
+
318 break;
+ +
320 default:
+
321 return BaseSignalSpec::ZeroType();
+
322 break;
+
323 }
+
324 }
+
325 else
+
326 {
+
327 BaseType y = xAtIdx(idx);
+
328 TangentType dy;
+
329 switch (interpolationMethod)
+
330 {
+ +
332 dy = TangentSignalSpec::ZeroType();
+
333 break;
+
334 }
+ +
336 double t1 = tAtIdx(idx);
+
337 double t2 = tAtIdx(idx + 1);
+
338 BaseType y1 = xAtIdx(idx);
+
339 BaseType y2 = xAtIdx(idx + 1);
+
340 dy = (t - t1) / (t2 - t1) * (y2 - y1);
+
341 break;
+
342 }
+ +
344 double t0 = tAtIdx(idx - 1);
+
345 double t1 = tAtIdx(idx);
+
346 double t2 = tAtIdx(idx + 1);
+
347 double t3 = tAtIdx(idx + 2);
+
348 BaseType y0 = xAtIdx(idx - 1);
+
349 BaseType y1 = xAtIdx(idx);
+
350 BaseType y2 = xAtIdx(idx + 1);
+
351 BaseType y3 = xAtIdx(idx + 2);
+
352 dy =
+
353 (t - t1) / (t2 - t1) *
+
354 ((y2 - y1) + (t2 - t) / (2. * (t2 - t1) * (t2 - t1)) *
+
355 (((t2 - t) * (t2 * (y1 - y0) + t0 * (y2 - y1) - t1 * (y2 - y0))) / (t1 - t0) +
+
356 ((t - t1) * (t3 * (y2 - y1) + t2 * (y3 - y1) - t1 * (y3 - y2))) / (t3 - t2)));
+
357 break;
+
358 }
+
359 }
+
360 return y + dy;
+
361 }
+
362 }
+
363 else
+
364 {
+
365 return BaseSignalSpec::ZeroType();
+
366 }
+
367 }
+
368
+
369 TangentType xDotAt(const double& t) const
+
370 {
+
371 if (t == t_)
+
372 {
+
373 return xdot_;
+
374 }
+
375 else if (signalHistory_.size() > 0)
+
376 {
+
377 int idx = getInterpIndex(t);
+
378 if (idx < 0 || idx >= static_cast<int>(signalHistory_.size()))
+
379 {
+
380 switch (extrapolationMethod)
+
381 {
+ +
383 return TangentSignalSpec::NansType();
+
384 break;
+ +
386 if (idx < 0)
+
387 {
+
388 return signalHistory_[0].xdot;
+
389 }
+
390 else
+
391 {
+
392 return signalHistory_[signalHistory_.size() - 1].xdot;
+
393 }
+
394 break;
+ +
396 default:
+
397 return TangentSignalSpec::ZeroType();
+
398 break;
+
399 }
+
400 }
+
401 else
+
402 {
+
403 TangentType y = xDotAtIdx(idx);
+
404 TangentType dy;
+
405 switch (interpolationMethod)
+
406 {
+ +
408 dy = TangentSignalSpec::ZeroType();
+
409 break;
+
410 }
+ +
412 double t1 = tAtIdx(idx);
+
413 double t2 = tAtIdx(idx + 1);
+
414 TangentType y1 = xDotAtIdx(idx);
+
415 TangentType y2 = xDotAtIdx(idx + 1);
+
416 dy = (t - t1) / (t2 - t1) * (y2 - y1);
+
417 break;
+
418 }
+ +
420 double t0 = tAtIdx(idx - 1);
+
421 double t1 = tAtIdx(idx);
+
422 double t2 = tAtIdx(idx + 1);
+
423 double t3 = tAtIdx(idx + 2);
+
424 TangentType y0 = xDotAtIdx(idx - 1);
+
425 TangentType y1 = xDotAtIdx(idx);
+
426 TangentType y2 = xDotAtIdx(idx + 1);
+
427 TangentType y3 = xDotAtIdx(idx + 2);
+
428 dy =
+
429 (t - t1) / (t2 - t1) *
+
430 ((y2 - y1) + (t2 - t) / (2. * (t2 - t1) * (t2 - t1)) *
+
431 (((t2 - t) * (t2 * (y1 - y0) + t0 * (y2 - y1) - t1 * (y2 - y0))) / (t1 - t0) +
+
432 ((t - t1) * (t3 * (y2 - y1) + t2 * (y3 - y1) - t1 * (y3 - y2))) / (t3 - t2)));
+
433 break;
+
434 }
+
435 }
+
436 return y + dy;
+
437 }
+
438 }
+
439 else
+
440 {
+
441 return TangentSignalSpec::ZeroType();
+
442 }
+
443 }
+
444
+
445 // Implementation note: signal history size must > 0
+
446 int getInterpIndex(const double& t) const
+
447 {
+
448 if (t < signalHistory_[0].t)
+
449 {
+
450 return -1;
+
451 }
+
452 else if (t > signalHistory_[signalHistory_.size() - 1].t)
+
453 {
+
454 return static_cast<int>(signalHistory_.size());
+
455 }
+
456 else
+
457 {
+
458 for (size_t i = 0; i < signalHistory_.size(); i++)
+
459 {
+
460 double t_i = signalHistory_[i].t;
+
461 double t_ip1 = tAtIdx(i + 1);
+
462 if (t_i <= t && t_ip1 > t)
+
463 {
+
464 return static_cast<int>(i);
+
465 }
+
466 }
+
467 return -1;
+
468 }
+
469 }
+
470
+
471 double tAtIdx(const int& idx) const
+
472 {
+
473 if (idx < 0)
+
474 {
+
475 return signalHistory_[0].t + static_cast<double>(idx);
+
476 }
+
477 else if (idx >= signalHistory_.size())
+
478 {
+
479 return signalHistory_[signalHistory_.size() - 1].t +
+
480 static_cast<double>(idx - static_cast<int>(signalHistory_.size() - 1));
+
481 }
+
482 else
+
483 {
+
484 return signalHistory_[idx].t;
+
485 }
+
486 }
+
487
+
488 BaseType xAtIdx(const int& idx) const
+
489 {
+
490 if (idx < 0)
+
491 {
+
492 return signalHistory_[0].x;
+
493 }
+
494 else if (idx >= signalHistory_.size())
+
495 {
+
496 return signalHistory_[signalHistory_.size() - 1].x;
+
497 }
+
498 else
+
499 {
+
500 return signalHistory_[idx].x;
+
501 }
+
502 }
+
503
+
504 TangentType xDotAtIdx(const int& idx) const
+
505 {
+
506 if (idx < 0)
+
507 {
+
508 return signalHistory_[0].xdot;
+
509 }
+
510 else if (idx >= signalHistory_.size())
+
511 {
+
512 return signalHistory_[signalHistory_.size() - 1].xdot;
+
513 }
+
514 else
+
515 {
+
516 return signalHistory_[idx].xdot;
+
517 }
+
518 }
+
519
+
520 // Implementation note: should always be followed by a call to update()
+
521 bool calculateDerivative(const double& _t, const BaseType& _x, TangentType& _xdot)
+
522 {
+
523 const static double sigma = 0.05;
+
524 if (_t <= t_)
+
525 {
+
526 return false;
+
527 }
+
528 if (t_ >= 0)
+
529 {
+
530 const double dt = _t - t_;
+
531 const TangentType dx = _x - x_;
+
532 switch (derivativeMethod)
+
533 {
+ +
535 _xdot = (2. * sigma - dt) / (2. * sigma + dt) * xdot_ + 2. / (2. * sigma + dt) * dx;
+
536 break;
+ +
538 _xdot = dx / dt;
+
539 break;
+
540 }
+
541 }
+
542 else
+
543 {
+
544 _xdot = TangentSignalSpec::ZeroType();
+
545 }
+
546 return true;
+
547 }
+
548};
+
+
549
+
550template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
553{
+ +
555 lpr.x_ += r(l.t());
+
556 lpr.xdot_ += r.dot(l.t());
+
557 for (auto& signalDP : lpr.signalHistory_)
+
558 {
+
559 signalDP.x += r(signalDP.t);
+
560 signalDP.xdot += r.dot(signalDP.t);
+
561 }
+
562 return lpr;
+
563}
+
+
564
+
565template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+ + +
568{
+ + + + +
573 lmr.needsSort_ = l.needsSort_;
+
574 lmr.t_ = l.t();
+
575 lmr.x_ = l() - r(l.t());
+
576 lmr.xdot_ = l.dot() - r.dot(l.t());
+
577 std::vector<double> tHistory;
+
578 std::vector<typename TangentSignalSpec::Type> xHistory;
+
579 std::vector<typename TangentSignalSpec::Type> xdotHistory;
+
580 for (auto& signalDP : l.signalHistory_)
+
581 {
+
582 tHistory.push_back(signalDP.t);
+
583 xHistory.push_back(signalDP.x - r(signalDP.t));
+
584 xdotHistory.push_back(signalDP.xdot - r.dot(signalDP.t));
+
585 }
+
586 lmr.update(tHistory, xHistory, xdotHistory);
+
587 return lmr;
+
588}
+
+
589
+
590template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+ +
592{
+ +
594 lr.x_ *= l;
+
595 lr.xdot_ *= l;
+
596 for (auto& signalDP : lr.signalHistory_)
+
597 {
+
598 signalDP.x *= l;
+
599 signalDP.xdot *= l;
+
600 }
+
601 return lr;
+
602}
+
+
603
+
604template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+ +
606{
+ +
608 lr.x_ *= r;
+
609 lr.xdot_ *= r;
+
610 for (auto& signalDP : lr.signalHistory_)
+
611 {
+
612 signalDP.x *= r;
+
613 signalDP.xdot *= r;
+
614 }
+
615 return lr;
+
616}
+
+
617
+
618template<typename T>
+
+ +
620{
+
621 using Type = T;
+
+
622 static Type ZeroType()
+
623 {
+
624 return (T)0.0;
+
625 }
+
+
+
626 static Type NansType()
+
627 {
+
628 return (T)1. / 0.;
+
629 }
+
+
630};
+
+
631
+
632template<typename T, size_t d>
+
+ +
634{
+
635 using Type = Matrix<T, d, 1>;
+
+
636 static Type ZeroType()
+
637 {
+
638 return Type::Zero();
+
639 }
+
+
+
640 static Type NansType()
+
641 {
+
642 return Type::Constant(std::numeric_limits<T>::quiet_NaN());
+
643 }
+
+
644};
+
+
645
+
646template<typename ManifoldType>
+
+ +
648{
+
649 using Type = ManifoldType;
+
+
650 static Type ZeroType()
+
651 {
+
652 return Type::identity();
+
653 }
+
+
+
654 static Type NansType()
+
655 {
+
656 return Type::nans();
+
657 }
+
+
658};
+
+
659
+
660template<typename T>
+ +
662
+
663template<typename T>
+
+
664inline std::ostream& operator<<(std::ostream& os, const ScalarSignal<T>& x)
+
665{
+
666 os << "ScalarSignal at t=" << x.t() << ": " << x();
+
667 return os;
+
668}
+
+
669
+
670template<typename T, size_t d>
+ +
672
+
673template<typename T, size_t d>
+
+
674inline std::ostream& operator<<(std::ostream& os, const VectorSignal<T, d>& x)
+
675{
+
676 os << "VectorSignal at t=" << x.t() << ": " << x().transpose();
+
677 return os;
+
678}
+
+
679
+
680template<typename T, typename ManifoldType, size_t d>
+ +
682
+
683template<typename T, typename ManifoldType, size_t d>
+
+
684inline std::ostream& operator<<(std::ostream& os, const ManifoldSignal<T, ManifoldType, d>& x)
+
685{
+
686 os << "ManifoldSignal at t=" << x.t() << ": " << x();
+
687 return os;
+
688}
+
+
689
+
+
690#define MAKE_VECTOR_SIGNAL(Dimension) \
+
691 template<typename T> \
+
692 using Vector##Dimension##Signal = VectorSignal<T, Dimension>; \
+
693 typedef Vector##Dimension##Signal<double> Vector##Dimension##dSignal;
+
+
694
+
+
695#define MAKE_MANIF_SIGNAL(Manif, Dimension) \
+
696 template<typename T> \
+
697 using Manif##Signal = ManifoldSignal<T, Manif<T>, Dimension>; \
+
698 typedef Manif##Signal<double> Manif##dSignal;
+
+
699
+ + + + + + + + + + + + + + + +
Signal< ScalarSignalSpec< T >, ScalarSignalSpec< T > > ScalarSignal
Definition Signal.h:661
+
Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > > ManifoldSignal
Definition Signal.h:681
+
DerivativeMethod
Definition Signal.h:31
+
@ FINITE_DIFF
Definition Signal.h:33
+
@ DIRTY
Definition Signal.h:32
+
#define MAKE_VECTOR_SIGNAL(Dimension)
Definition Signal.h:690
+
std::ostream & operator<<(std::ostream &os, const ScalarSignal< T > &x)
Definition Signal.h:664
+
Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > > VectorSignal
Definition Signal.h:671
+
ScalarSignal< double > ScalardSignal
Definition Signal.h:700
+
ExtrapolationMethod
Definition Signal.h:24
+
@ ZEROS
Definition Signal.h:26
+
@ CLOSEST
Definition Signal.h:27
+
@ NANS
Definition Signal.h:25
+
InterpolationMethod
TODO.
Definition Signal.h:17
+
@ CUBIC_SPLINE
Definition Signal.h:20
+
@ ZERO_ORDER_HOLD
Definition Signal.h:18
+
@ LINEAR
Definition Signal.h:19
+
Signal< BaseSignalSpec, TangentSignalSpec > operator+(const Signal< BaseSignalSpec, TangentSignalSpec > &l, const Signal< TangentSignalSpec, TangentSignalSpec > &r)
Definition Signal.h:551
+
Signal< BaseSignalSpec, TangentSignalSpec > operator*(const double &l, const Signal< BaseSignalSpec, TangentSignalSpec > &r)
Definition Signal.h:591
+
#define MAKE_MANIF_SIGNAL(Manif, Dimension)
Definition Signal.h:695
+
Signal< TangentSignalSpec, TangentSignalSpec > operator-(const Signal< BaseSignalSpec, TangentSignalSpec > &l, const Signal< BaseSignalSpec, TangentSignalSpec > &r)
Definition Signal.h:566
+ +
Definition Signal.h:38
+
double t() const
Definition Signal.h:105
+
friend Signal< TSS, TSS > operator-(const Signal< BSS, TSS > &l, const Signal< BSS, TSS > &r)
+
BaseType operator()() const
Definition Signal.h:110
+
bool update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory)
Definition Signal.h:208
+
bool update(const double &_t, const BaseType &_x, const TangentType &_xdot, bool insertHistory=false)
Definition Signal.h:184
+
struct Signal::@053250032031010315204017007310244260026177164207 SignalDPComparator
+
bool update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory, const std::vector< TangentType > &_xdotHistory)
Definition Signal.h:236
+
Signal(const Signal &other)
Definition Signal.h:70
+
TangentType dot(const double &t) const
Definition Signal.h:125
+
TangentType dot() const
Definition Signal.h:115
+
Signal()
Definition Signal.h:62
+
void setDerivativeMethod(DerivativeMethod method)
Definition Signal.h:160
+
void reset()
Definition Signal.h:165
+
Signal< ScalarSignalSpec< T >, ScalarSignalSpec< T > > dotSignal()
Definition Signal.h:82
+
typename BaseSignalSpec::Type BaseType
Definition Signal.h:40
+
typename TangentSignalSpec::Type TangentType
Definition Signal.h:41
+
std::vector< TangentType > dot(const std::vector< double > &t) const
Definition Signal.h:140
+
bool update(const double &_t, const BaseType &_x, bool insertHistory=false)
Definition Signal.h:174
+
std::vector< BaseType > operator()(const std::vector< double > &t) const
Definition Signal.h:130
+
DerivativeMethod derivativeMethod
Definition Signal.h:60
+
void setExtrapolationMethod(ExtrapolationMethod method)
Definition Signal.h:155
+
BaseType operator()(const double &t) const
Definition Signal.h:120
+
friend Signal< BSS, TSS > operator*(const double &l, const Signal< BSS, TSS > &r)
+
InterpolationMethod interpolationMethod
Definition Signal.h:58
+
friend Signal< BSS, TSS > operator*(const Signal< BSS, TSS > &l, const double &r)
+
friend Signal< BSS, TSS > operator+(const Signal< BSS, TSS > &l, const Signal< TSS, TSS > &r)
+
void setInterpolationMethod(InterpolationMethod method)
Definition Signal.h:150
+
ExtrapolationMethod extrapolationMethod
Definition Signal.h:59
+
Definition Signal.h:648
+
static Type ZeroType()
Definition Signal.h:650
+
static Type NansType()
Definition Signal.h:654
+
ManifoldType Type
Definition Signal.h:649
+
Definition Signal.h:620
+
static Type NansType()
Definition Signal.h:626
+
T Type
Definition Signal.h:621
+
static Type ZeroType()
Definition Signal.h:622
+
Definition Signal.h:44
+
TangentType xdot
Definition Signal.h:47
+
BaseType x
Definition Signal.h:46
+
double t
Definition Signal.h:45
+
Definition Signal.h:634
+
static Type NansType()
Definition Signal.h:640
+
static Type ZeroType()
Definition Signal.h:636
+
Matrix< T, d, 1 > Type
Definition Signal.h:635
+
+
+ + + + diff --git a/docs/Signals_8h.html b/docs/Signals_8h.html new file mode 100644 index 0000000..1a1b1ac --- /dev/null +++ b/docs/Signals_8h.html @@ -0,0 +1,126 @@ + + + + + + + +signals-cpp: include/signals/Signals.h File Reference + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Signals.h File Reference
+
+ +
+ + + + diff --git a/docs/Signals_8h_source.html b/docs/Signals_8h_source.html new file mode 100644 index 0000000..7b076d3 --- /dev/null +++ b/docs/Signals_8h_source.html @@ -0,0 +1,131 @@ + + + + + + + +signals-cpp: include/signals/Signals.h Source File + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Signals.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2
+
3#include "signals/Signal.h"
+ +
5#include "signals/State.h"
+
6#include "signals/Models.h"
+
7
+ + + + +
+
+ + + + diff --git a/docs/State_8h.html b/docs/State_8h.html new file mode 100644 index 0000000..b736e2c --- /dev/null +++ b/docs/State_8h.html @@ -0,0 +1,1722 @@ + + + + + + + +signals-cpp: include/signals/State.h File Reference + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
State.h File Reference
+
+
+
#include "signals/Signal.h"
+
+

Go to the source code of this file.

+ + + + + + + + + + + +

+Classes

struct  State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >
 Base type for all Model state representations. More...
 
struct  ScalarStateSignalSpec< T >
 
struct  VectorStateSignalSpec< T, d >
 
struct  ManifoldStateSignalSpec< T, ManifoldType, PD, TD >
 
+ + + + + +

+Macros

#define MAKE_VECTOR_STATES(Dimension)
 
#define MAKE_MANIF_STATES(Manif, Dimension, TangentDimension)
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Typedefs

template<typename T>
using ScalarStateType = State<T, ScalarSignalSpec<T>, 1, ScalarSignalSpec<T>, 1>
 
template<typename T, size_t d>
using VectorStateType = State<T, VectorSignalSpec<T, d>, d, VectorSignalSpec<T, d>, d>
 
template<typename T, typename ManifoldType, size_t PD, size_t TD>
using ManifoldStateType = State<T, ManifoldSignalSpec<ManifoldType>, PD, VectorSignalSpec<T, TD>, TD>
 
template<typename T>
using ScalarStateSignal = Signal<ScalarStateSignalSpec<T>, ScalarStateSignalSpec<T>>
 
template<typename T, size_t d>
using VectorStateSignal = Signal<VectorStateSignalSpec<T, d>, VectorStateSignalSpec<T, d>>
 
template<typename T, typename ManifoldType, size_t PD, size_t TD>
using ManifoldStateSignal = Signal<ManifoldStateSignalSpec<T, ManifoldType, PD, TD>, VectorStateSignalSpec<T, TD>>
 
template<typename T>
using ScalarState = ScalarStateType<T>
 
typedef ScalarState< double > ScalardState
 
typedef ScalarStateSignal< double > ScalardStateSignal
 
template<typename T>
using Vector1State = VectorStateType<T, 1>
 
template<typename T>
using Vector1StateSignal = VectorStateSignal<T, 1>
 
typedef Vector1State< double > Vector1dState
 
typedef Vector1StateSignal< double > Vector1dStateSignal
 
template<typename T>
using Vector2State = VectorStateType<T, 2>
 
template<typename T>
using Vector2StateSignal = VectorStateSignal<T, 2>
 
typedef Vector2State< double > Vector2dState
 
typedef Vector2StateSignal< double > Vector2dStateSignal
 
template<typename T>
using Vector3State = VectorStateType<T, 3>
 
template<typename T>
using Vector3StateSignal = VectorStateSignal<T, 3>
 
typedef Vector3State< double > Vector3dState
 
typedef Vector3StateSignal< double > Vector3dStateSignal
 
template<typename T>
using Vector4State = VectorStateType<T, 4>
 
template<typename T>
using Vector4StateSignal = VectorStateSignal<T, 4>
 
typedef Vector4State< double > Vector4dState
 
typedef Vector4StateSignal< double > Vector4dStateSignal
 
template<typename T>
using Vector5State = VectorStateType<T, 5>
 
template<typename T>
using Vector5StateSignal = VectorStateSignal<T, 5>
 
typedef Vector5State< double > Vector5dState
 
typedef Vector5StateSignal< double > Vector5dStateSignal
 
template<typename T>
using Vector6State = VectorStateType<T, 6>
 
template<typename T>
using Vector6StateSignal = VectorStateSignal<T, 6>
 
typedef Vector6State< double > Vector6dState
 
typedef Vector6StateSignal< double > Vector6dStateSignal
 
template<typename T>
using Vector7State = VectorStateType<T, 7>
 
template<typename T>
using Vector7StateSignal = VectorStateSignal<T, 7>
 
typedef Vector7State< double > Vector7dState
 
typedef Vector7StateSignal< double > Vector7dStateSignal
 
template<typename T>
using Vector8State = VectorStateType<T, 8>
 
template<typename T>
using Vector8StateSignal = VectorStateSignal<T, 8>
 
typedef Vector8State< double > Vector8dState
 
typedef Vector8StateSignal< double > Vector8dStateSignal
 
template<typename T>
using Vector9State = VectorStateType<T, 9>
 
template<typename T>
using Vector9StateSignal = VectorStateSignal<T, 9>
 
typedef Vector9State< double > Vector9dState
 
typedef Vector9StateSignal< double > Vector9dStateSignal
 
template<typename T>
using Vector10State = VectorStateType<T, 10>
 
template<typename T>
using Vector10StateSignal = VectorStateSignal<T, 10>
 
typedef Vector10State< double > Vector10dState
 
typedef Vector10StateSignal< double > Vector10dStateSignal
 
template<typename T>
using SO2State = ManifoldStateType<T, SO2<T>, 2, 1>
 
template<typename T>
using SO2StateSignal = ManifoldStateSignal<T, SO2<T>, 2, 1>
 
typedef SO2State< double > SO2dState
 
typedef SO2StateSignal< double > SO2dStateSignal
 
template<typename T>
using SO3State = ManifoldStateType<T, SO3<T>, 4, 3>
 
template<typename T>
using SO3StateSignal = ManifoldStateSignal<T, SO3<T>, 4, 3>
 
typedef SO3State< double > SO3dState
 
typedef SO3StateSignal< double > SO3dStateSignal
 
template<typename T>
using SE2State = ManifoldStateType<T, SE2<T>, 4, 3>
 
template<typename T>
using SE2StateSignal = ManifoldStateSignal<T, SE2<T>, 4, 3>
 
typedef SE2State< double > SE2dState
 
typedef SE2StateSignal< double > SE2dStateSignal
 
template<typename T>
using SE3State = ManifoldStateType<T, SE3<T>, 7, 6>
 
template<typename T>
using SE3StateSignal = ManifoldStateSignal<T, SE3<T>, 7, 6>
 
typedef SE3State< double > SE3dState
 
typedef SE3StateSignal< double > SE3dStateSignal
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
State< T, PTS, PD, TTS, TD > operator+ (const State< T, PTS, PD, TTS, TD > &l, const State< T, TTS, TD, TTS, TD > &r)
 
template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
State< T, TTS, TD, TTS, TD > operator- (const State< T, PTS, PD, TTS, TD > &l, const State< T, PTS, PD, TTS, TD > &r)
 
template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
State< T, PTS, PD, TTS, TD > operator* (const double &l, const State< T, PTS, PD, TTS, TD > &r)
 
template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
State< T, PTS, PD, TTS, TD > operator* (const State< T, PTS, PD, TTS, TD > &l, const double &r)
 
template<typename T>
std::ostream & operator<< (std::ostream &os, const ScalarStateType< T > &x)
 
template<typename T>
ScalarStateType< T > operator/ (const ScalarStateType< T > &l, const double &r)
 
template<typename T, size_t d>
std::ostream & operator<< (std::ostream &os, const VectorStateType< T, d > &x)
 
template<typename T, size_t d>
VectorStateType< T, d > operator/ (const VectorStateType< T, d > &l, const double &r)
 
template<typename T, typename ManifoldType, size_t PD, size_t TD>
std::ostream & operator<< (std::ostream &os, const ManifoldStateType< T, ManifoldType, PD, TD > &x)
 
template<typename T>
std::ostream & operator<< (std::ostream &os, const ScalarStateSignal< T > &x)
 
template<typename T, size_t d>
std::ostream & operator<< (std::ostream &os, const VectorStateSignal< T, d > &x)
 
template<typename T, typename ManifoldType, size_t PD, size_t TD>
std::ostream & operator<< (std::ostream &os, const ManifoldStateSignal< T, ManifoldType, PD, TD > &x)
 
+

Macro Definition Documentation

+ +

◆ MAKE_MANIF_STATES

+ +
+
+ + + + + + + + + + + + + + + + +
#define MAKE_MANIF_STATES( Manif,
Dimension,
TangentDimension )
+
+Value:
template<typename T> \
+
using Manif##State = ManifoldStateType<T, Manif<T>, Dimension, TangentDimension>; \
+
template<typename T> \
+
using Manif##StateSignal = ManifoldStateSignal<T, Manif<T>, Dimension, TangentDimension>; \
+
typedef Manif##State<double> Manif##dState; \
+
typedef Manif##StateSignal<double> Manif##dStateSignal;
+
Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > > ManifoldStateSignal
Definition State.h:234
+
State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD > ManifoldStateType
Definition State.h:161
+
Base type for all Model state representations.
Definition State.h:34
+
+
+
+ +

◆ MAKE_VECTOR_STATES

+ +
+
+ + + + + + + +
#define MAKE_VECTOR_STATES( Dimension)
+
+Value:
template<typename T> \
+
using Vector##Dimension##State = VectorStateType<T, Dimension>; \
+
template<typename T> \
+
using Vector##Dimension##StateSignal = VectorStateSignal<T, Dimension>; \
+
typedef Vector##Dimension##State<double> Vector##Dimension##dState; \
+
typedef Vector##Dimension##StateSignal<double> Vector##Dimension##dStateSignal;
+
Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > > VectorStateSignal
Definition State.h:223
+
State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d > VectorStateType
Definition State.h:142
+
+
+
+

Typedef Documentation

+ +

◆ ManifoldStateSignal

+ +
+
+
+template<typename T, typename ManifoldType, size_t PD, size_t TD>
+ + + + +
using ManifoldStateSignal = Signal<ManifoldStateSignalSpec<T, ManifoldType, PD, TD>, VectorStateSignalSpec<T, TD>>
+
+ +
+
+ +

◆ ManifoldStateType

+ +
+
+
+template<typename T, typename ManifoldType, size_t PD, size_t TD>
+ + + + +
using ManifoldStateType = State<T, ManifoldSignalSpec<ManifoldType>, PD, VectorSignalSpec<T, TD>, TD>
+
+ +
+
+ +

◆ ScalardState

+ +
+
+ + + + +
typedef ScalarState<double> ScalardState
+
+ +
+
+ +

◆ ScalardStateSignal

+ +
+
+ + + + +
typedef ScalarStateSignal<double> ScalardStateSignal
+
+ +
+
+ +

◆ ScalarState

+ +
+
+
+template<typename T>
+ + + + +
using ScalarState = ScalarStateType<T>
+
+ +
+
+ +

◆ ScalarStateSignal

+ +
+
+
+template<typename T>
+ + + + +
using ScalarStateSignal = Signal<ScalarStateSignalSpec<T>, ScalarStateSignalSpec<T>>
+
+ +
+
+ +

◆ ScalarStateType

+ +
+
+
+template<typename T>
+ + + + +
using ScalarStateType = State<T, ScalarSignalSpec<T>, 1, ScalarSignalSpec<T>, 1>
+
+ +
+
+ +

◆ SE2dState

+ +
+
+ + + + +
typedef SE2State<double> SE2dState
+
+ +
+
+ +

◆ SE2dStateSignal

+ +
+
+ + + + +
typedef SE2StateSignal<double> SE2dStateSignal
+
+ +
+
+ +

◆ SE2State

+ +
+
+
+template<typename T>
+ + + + +
using SE2State = ManifoldStateType<T, SE2<T>, 4, 3>
+
+ +
+
+ +

◆ SE2StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using SE2StateSignal = ManifoldStateSignal<T, SE2<T>, 4, 3>
+
+ +
+
+ +

◆ SE3dState

+ +
+
+ + + + +
typedef SE3State<double> SE3dState
+
+ +
+
+ +

◆ SE3dStateSignal

+ +
+
+ + + + +
typedef SE3StateSignal<double> SE3dStateSignal
+
+ +
+
+ +

◆ SE3State

+ +
+
+
+template<typename T>
+ + + + +
using SE3State = ManifoldStateType<T, SE3<T>, 7, 6>
+
+ +
+
+ +

◆ SE3StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using SE3StateSignal = ManifoldStateSignal<T, SE3<T>, 7, 6>
+
+ +
+
+ +

◆ SO2dState

+ +
+
+ + + + +
typedef SO2State<double> SO2dState
+
+ +
+
+ +

◆ SO2dStateSignal

+ +
+
+ + + + +
typedef SO2StateSignal<double> SO2dStateSignal
+
+ +
+
+ +

◆ SO2State

+ +
+
+
+template<typename T>
+ + + + +
using SO2State = ManifoldStateType<T, SO2<T>, 2, 1>
+
+ +
+
+ +

◆ SO2StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using SO2StateSignal = ManifoldStateSignal<T, SO2<T>, 2, 1>
+
+ +
+
+ +

◆ SO3dState

+ +
+
+ + + + +
typedef SO3State<double> SO3dState
+
+ +
+
+ +

◆ SO3dStateSignal

+ +
+
+ + + + +
typedef SO3StateSignal<double> SO3dStateSignal
+
+ +
+
+ +

◆ SO3State

+ +
+
+
+template<typename T>
+ + + + +
using SO3State = ManifoldStateType<T, SO3<T>, 4, 3>
+
+ +
+
+ +

◆ SO3StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using SO3StateSignal = ManifoldStateSignal<T, SO3<T>, 4, 3>
+
+ +
+
+ +

◆ Vector10dState

+ +
+
+ + + + +
typedef Vector10State<double> Vector10dState
+
+ +
+
+ +

◆ Vector10dStateSignal

+ +
+
+ + + + +
typedef Vector10StateSignal<double> Vector10dStateSignal
+
+ +
+
+ +

◆ Vector10State

+ +
+
+
+template<typename T>
+ + + + +
using Vector10State = VectorStateType<T, 10>
+
+ +
+
+ +

◆ Vector10StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector10StateSignal = VectorStateSignal<T, 10>
+
+ +
+
+ +

◆ Vector1dState

+ +
+
+ + + + +
typedef Vector1State<double> Vector1dState
+
+ +
+
+ +

◆ Vector1dStateSignal

+ +
+
+ + + + +
typedef Vector1StateSignal<double> Vector1dStateSignal
+
+ +
+
+ +

◆ Vector1State

+ +
+
+
+template<typename T>
+ + + + +
using Vector1State = VectorStateType<T, 1>
+
+ +
+
+ +

◆ Vector1StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector1StateSignal = VectorStateSignal<T, 1>
+
+ +
+
+ +

◆ Vector2dState

+ +
+
+ + + + +
typedef Vector2State<double> Vector2dState
+
+ +
+
+ +

◆ Vector2dStateSignal

+ +
+
+ + + + +
typedef Vector2StateSignal<double> Vector2dStateSignal
+
+ +
+
+ +

◆ Vector2State

+ +
+
+
+template<typename T>
+ + + + +
using Vector2State = VectorStateType<T, 2>
+
+ +
+
+ +

◆ Vector2StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector2StateSignal = VectorStateSignal<T, 2>
+
+ +
+
+ +

◆ Vector3dState

+ +
+
+ + + + +
typedef Vector3State<double> Vector3dState
+
+ +
+
+ +

◆ Vector3dStateSignal

+ +
+
+ + + + +
typedef Vector3StateSignal<double> Vector3dStateSignal
+
+ +
+
+ +

◆ Vector3State

+ +
+
+
+template<typename T>
+ + + + +
using Vector3State = VectorStateType<T, 3>
+
+ +
+
+ +

◆ Vector3StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector3StateSignal = VectorStateSignal<T, 3>
+
+ +
+
+ +

◆ Vector4dState

+ +
+
+ + + + +
typedef Vector4State<double> Vector4dState
+
+ +
+
+ +

◆ Vector4dStateSignal

+ +
+
+ + + + +
typedef Vector4StateSignal<double> Vector4dStateSignal
+
+ +
+
+ +

◆ Vector4State

+ +
+
+
+template<typename T>
+ + + + +
using Vector4State = VectorStateType<T, 4>
+
+ +
+
+ +

◆ Vector4StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector4StateSignal = VectorStateSignal<T, 4>
+
+ +
+
+ +

◆ Vector5dState

+ +
+
+ + + + +
typedef Vector5State<double> Vector5dState
+
+ +
+
+ +

◆ Vector5dStateSignal

+ +
+
+ + + + +
typedef Vector5StateSignal<double> Vector5dStateSignal
+
+ +
+
+ +

◆ Vector5State

+ +
+
+
+template<typename T>
+ + + + +
using Vector5State = VectorStateType<T, 5>
+
+ +
+
+ +

◆ Vector5StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector5StateSignal = VectorStateSignal<T, 5>
+
+ +
+
+ +

◆ Vector6dState

+ +
+
+ + + + +
typedef Vector6State<double> Vector6dState
+
+ +
+
+ +

◆ Vector6dStateSignal

+ +
+
+ + + + +
typedef Vector6StateSignal<double> Vector6dStateSignal
+
+ +
+
+ +

◆ Vector6State

+ +
+
+
+template<typename T>
+ + + + +
using Vector6State = VectorStateType<T, 6>
+
+ +
+
+ +

◆ Vector6StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector6StateSignal = VectorStateSignal<T, 6>
+
+ +
+
+ +

◆ Vector7dState

+ +
+
+ + + + +
typedef Vector7State<double> Vector7dState
+
+ +
+
+ +

◆ Vector7dStateSignal

+ +
+
+ + + + +
typedef Vector7StateSignal<double> Vector7dStateSignal
+
+ +
+
+ +

◆ Vector7State

+ +
+
+
+template<typename T>
+ + + + +
using Vector7State = VectorStateType<T, 7>
+
+ +
+
+ +

◆ Vector7StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector7StateSignal = VectorStateSignal<T, 7>
+
+ +
+
+ +

◆ Vector8dState

+ +
+
+ + + + +
typedef Vector8State<double> Vector8dState
+
+ +
+
+ +

◆ Vector8dStateSignal

+ +
+
+ + + + +
typedef Vector8StateSignal<double> Vector8dStateSignal
+
+ +
+
+ +

◆ Vector8State

+ +
+
+
+template<typename T>
+ + + + +
using Vector8State = VectorStateType<T, 8>
+
+ +
+
+ +

◆ Vector8StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector8StateSignal = VectorStateSignal<T, 8>
+
+ +
+
+ +

◆ Vector9dState

+ +
+
+ + + + +
typedef Vector9State<double> Vector9dState
+
+ +
+
+ +

◆ Vector9dStateSignal

+ +
+
+ + + + +
typedef Vector9StateSignal<double> Vector9dStateSignal
+
+ +
+
+ +

◆ Vector9State

+ +
+
+
+template<typename T>
+ + + + +
using Vector9State = VectorStateType<T, 9>
+
+ +
+
+ +

◆ Vector9StateSignal

+ +
+
+
+template<typename T>
+ + + + +
using Vector9StateSignal = VectorStateSignal<T, 9>
+
+ +
+
+ +

◆ VectorStateSignal

+ +
+
+
+template<typename T, size_t d>
+ + + + +
using VectorStateSignal = Signal<VectorStateSignalSpec<T, d>, VectorStateSignalSpec<T, d>>
+
+ +
+
+ +

◆ VectorStateType

+ +
+
+
+template<typename T, size_t d>
+ + + + +
using VectorStateType = State<T, VectorSignalSpec<T, d>, d, VectorSignalSpec<T, d>, d>
+
+ +
+
+

Function Documentation

+ +

◆ operator*() [1/2]

+ +
+
+
+template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+ + + + + + + + + + + +
State< T, PTS, PD, TTS, TD > operator* (const double & l,
const State< T, PTS, PD, TTS, TD > & r )
+
+ +
+
+ +

◆ operator*() [2/2]

+ +
+
+
+template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+ + + + + + + + + + + +
State< T, PTS, PD, TTS, TD > operator* (const State< T, PTS, PD, TTS, TD > & l,
const double & r )
+
+ +
+
+ +

◆ operator+()

+ +
+
+
+template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+ + + + + + + + + + + +
State< T, PTS, PD, TTS, TD > operator+ (const State< T, PTS, PD, TTS, TD > & l,
const State< T, TTS, TD, TTS, TD > & r )
+
+ +
+
+ +

◆ operator-()

+ +
+
+
+template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+ + + + + + + + + + + +
State< T, TTS, TD, TTS, TD > operator- (const State< T, PTS, PD, TTS, TD > & l,
const State< T, PTS, PD, TTS, TD > & r )
+
+ +
+
+ +

◆ operator/() [1/2]

+ +
+
+
+template<typename T>
+ + + + + + + + + + + +
ScalarStateType< T > operator/ (const ScalarStateType< T > & l,
const double & r )
+
+ +
+
+ +

◆ operator/() [2/2]

+ +
+
+
+template<typename T, size_t d>
+ + + + + + + + + + + +
VectorStateType< T, d > operator/ (const VectorStateType< T, d > & l,
const double & r )
+
+ +
+
+ +

◆ operator<<() [1/6]

+ +
+
+
+template<typename T, typename ManifoldType, size_t PD, size_t TD>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const ManifoldStateSignal< T, ManifoldType, PD, TD > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [2/6]

+ +
+
+
+template<typename T, typename ManifoldType, size_t PD, size_t TD>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const ManifoldStateType< T, ManifoldType, PD, TD > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [3/6]

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const ScalarStateSignal< T > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [4/6]

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const ScalarStateType< T > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [5/6]

+ +
+
+
+template<typename T, size_t d>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const VectorStateSignal< T, d > & x )
+
+inline
+
+ +
+
+ +

◆ operator<<() [6/6]

+ +
+
+
+template<typename T, size_t d>
+ + + + + +
+ + + + + + + + + + + +
std::ostream & operator<< (std::ostream & os,
const VectorStateType< T, d > & x )
+
+inline
+
+ +
+
+
+
+ + + + diff --git a/docs/State_8h.js b/docs/State_8h.js new file mode 100644 index 0000000..d3d0388 --- /dev/null +++ b/docs/State_8h.js @@ -0,0 +1,86 @@ +var State_8h = +[ + [ "State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >", "structState.html", "structState" ], + [ "ScalarStateSignalSpec< T >", "structScalarStateSignalSpec.html", "structScalarStateSignalSpec" ], + [ "VectorStateSignalSpec< T, d >", "structVectorStateSignalSpec.html", "structVectorStateSignalSpec" ], + [ "ManifoldStateSignalSpec< T, ManifoldType, PD, TD >", "structManifoldStateSignalSpec.html", "structManifoldStateSignalSpec" ], + [ "MAKE_MANIF_STATES", "State_8h.html#a72800aeb486c7eebe1ab0fe8cfae6294", null ], + [ "MAKE_VECTOR_STATES", "State_8h.html#aed0e3d5bd576a92c33ab3950c98a4e3b", null ], + [ "ManifoldStateSignal", "State_8h.html#a111e9957b3bae43e71ce97678f712b8c", null ], + [ "ManifoldStateType", "State_8h.html#a73655df4c5d92f1cf1cf69d5fa057753", null ], + [ "ScalardState", "State_8h.html#aab879370bd488ae3cb270da1dfc5f695", null ], + [ "ScalardStateSignal", "State_8h.html#a95f500a02b3d50ef0a73883e96ae8768", null ], + [ "ScalarState", "State_8h.html#ae2fe8fddd28ed110fbc33b4ca506bd0f", null ], + [ "ScalarStateSignal", "State_8h.html#a7059d2190879b0e80afad377593fb225", null ], + [ "ScalarStateType", "State_8h.html#aad51d946606df50291c6c2f546030f11", null ], + [ "SE2dState", "State_8h.html#abf8de0fae02a60506ddd6e134b75ae00", null ], + [ "SE2dStateSignal", "State_8h.html#a709efdac7ba2c93eedbf1533c74e42f5", null ], + [ "SE2State", "State_8h.html#acc2213abe7e1f1169bce3603e87f44d2", null ], + [ "SE2StateSignal", "State_8h.html#ae34074b7d367592e7022441b0ee836d9", null ], + [ "SE3dState", "State_8h.html#a98daf00f053bcc148a93319eac4901e4", null ], + [ "SE3dStateSignal", "State_8h.html#a9b00d890fcdbf16abfbb263061e9bc98", null ], + [ "SE3State", "State_8h.html#a41c34d11317aa1e268232a6ddf9c0ba7", null ], + [ "SE3StateSignal", "State_8h.html#a337f5beba24e405d11550802e4375c73", null ], + [ "SO2dState", "State_8h.html#af87fca61f7adfb8b62056d2f6c815e51", null ], + [ "SO2dStateSignal", "State_8h.html#a4f4b421bf1a450cd6514a24b8c16e8cb", null ], + [ "SO2State", "State_8h.html#ab2d123ee7121bd4e6c7e55ce62c770ee", null ], + [ "SO2StateSignal", "State_8h.html#a455c23e3eed1fa310813120299d8cc95", null ], + [ "SO3dState", "State_8h.html#a7ab722ee104a5c16222f5cbd0d682657", null ], + [ "SO3dStateSignal", "State_8h.html#a7069682eef4672ac723761c44e44bc5a", null ], + [ "SO3State", "State_8h.html#ae37ec421e65f8ce1346e62704e6ea859", null ], + [ "SO3StateSignal", "State_8h.html#a07ec000c82b285e661a861ae5f90736a", null ], + [ "Vector10dState", "State_8h.html#ac15f89e56010b705e5a2e0d9c3c50a6d", null ], + [ "Vector10dStateSignal", "State_8h.html#af22d4a3a8e0b033da1e86fbb86d62025", null ], + [ "Vector10State", "State_8h.html#ae80b1d8972029135f755109d7c9cefcc", null ], + [ "Vector10StateSignal", "State_8h.html#a1317973b896b1e34cafa85ed9476facc", null ], + [ "Vector1dState", "State_8h.html#a1fccb71007e0830388d5c21c85e3344e", null ], + [ "Vector1dStateSignal", "State_8h.html#a62568e2f3d59e51a60168009aa1a54bf", null ], + [ "Vector1State", "State_8h.html#abc0badbf8fbf6b0c2669496da71cda67", null ], + [ "Vector1StateSignal", "State_8h.html#ab5090b8cb9c45dbe82c31d42d73d785e", null ], + [ "Vector2dState", "State_8h.html#ae54c0630e02ee333a48fe6531d00e071", null ], + [ "Vector2dStateSignal", "State_8h.html#a100a0048450baf6c0d0c2f444eccaf8a", null ], + [ "Vector2State", "State_8h.html#a7f9f341c30868667e4855dbb3092e78d", null ], + [ "Vector2StateSignal", "State_8h.html#a8733dc322548a85201a19ddea01ea50e", null ], + [ "Vector3dState", "State_8h.html#a0e9c381070552b28ffb2683b44e7b5a3", null ], + [ "Vector3dStateSignal", "State_8h.html#a1e20c96461ce98997ef1a3c0ab7b6668", null ], + [ "Vector3State", "State_8h.html#a76ad6fc3428b4c484c36cb9b24db72f0", null ], + [ "Vector3StateSignal", "State_8h.html#ae29a8cc7a8cfe9179c9befa2d9cf217d", null ], + [ "Vector4dState", "State_8h.html#a8add6ebebc487c439430cb69d2892bbf", null ], + [ "Vector4dStateSignal", "State_8h.html#a9013e9f17201a38fdb10648f14ea5c95", null ], + [ "Vector4State", "State_8h.html#a7123f01cd05975f377e8ff9e6ee1a06a", null ], + [ "Vector4StateSignal", "State_8h.html#a5c328c48320c78070fff7e7982b311e9", null ], + [ "Vector5dState", "State_8h.html#a45d6b402de0ba422a815e117b084dde3", null ], + [ "Vector5dStateSignal", "State_8h.html#a7a8f2f6fd14951fd2fe337c952b0cb74", null ], + [ "Vector5State", "State_8h.html#ab5ce046688e9436f8b33892d42309eee", null ], + [ "Vector5StateSignal", "State_8h.html#a4af99c5e283d22f79b5556ff27474965", null ], + [ "Vector6dState", "State_8h.html#af07e3586e98f931acac5d0ffd9b17cee", null ], + [ "Vector6dStateSignal", "State_8h.html#a9df3c94eca5a8200ce96b3221995c46b", null ], + [ "Vector6State", "State_8h.html#a5b9da17f6286f92692b0004ee4966bc9", null ], + [ "Vector6StateSignal", "State_8h.html#a10d976072ce9070523cb22605d2ab584", null ], + [ "Vector7dState", "State_8h.html#ad58fbc5cd721c46fe64d385cc3317380", null ], + [ "Vector7dStateSignal", "State_8h.html#a901bd18eae58b6365b68227b38b8a6e1", null ], + [ "Vector7State", "State_8h.html#a78b7e325313bda6591c62d59c25b2009", null ], + [ "Vector7StateSignal", "State_8h.html#a0e0d0803fd68f9e69ed39bed579c0a8c", null ], + [ "Vector8dState", "State_8h.html#acfdf1934f5783c1dcab2987c242ef8af", null ], + [ "Vector8dStateSignal", "State_8h.html#a25968e689d254876cbae1ff352b3f184", null ], + [ "Vector8State", "State_8h.html#ae8dd0ef45fa5734f0e752551ba62e863", null ], + [ "Vector8StateSignal", "State_8h.html#a9b199ed43adea9fec91e40f9bab9457f", null ], + [ "Vector9dState", "State_8h.html#a865c1f4de96010d38ee17edc48d6c611", null ], + [ "Vector9dStateSignal", "State_8h.html#a0237ae6ced288b7b3853654cd4ce796c", null ], + [ "Vector9State", "State_8h.html#af1297813c5b5754edb4cf75ca0875849", null ], + [ "Vector9StateSignal", "State_8h.html#a9ab7680e24d1538be50e761b8a8ecb21", null ], + [ "VectorStateSignal", "State_8h.html#a214bd9926c3d8a2bb83b9b471744775b", null ], + [ "VectorStateType", "State_8h.html#a60d0230d5788084bb8f559f4561d4d96", null ], + [ "operator*", "State_8h.html#a795d2ff5c53f24de712134f27e197001", null ], + [ "operator*", "State_8h.html#a7fa016cf853be0dbc882359bf5b637f9", null ], + [ "operator+", "State_8h.html#ac3e1ccc35f63b762bdd2c87478f8aad6", null ], + [ "operator-", "State_8h.html#ad7ac1ecc8c925fbc991d2fa8ca50d4eb", null ], + [ "operator/", "State_8h.html#af3ec1e7d28a9aac4e1cde4c7f3438128", null ], + [ "operator/", "State_8h.html#a0f388e10603fb47846a1147ff5b6839d", null ], + [ "operator<<", "State_8h.html#a6c0f637d1f1980a2de56f125e9cf4ec1", null ], + [ "operator<<", "State_8h.html#a494fe74e8c2fc3cd3f7e14886eeb7d6c", null ], + [ "operator<<", "State_8h.html#ab6fe6347b40120d5f45445b1fc6596f4", null ], + [ "operator<<", "State_8h.html#ae29ac55bb38cdbd3acce109857e8e7a4", null ], + [ "operator<<", "State_8h.html#a1675ff98779b45e08f5d169056e26a4d", null ], + [ "operator<<", "State_8h.html#af1eca508289d2fcbdecd0cc136eed43d", null ] +]; \ No newline at end of file diff --git a/docs/State_8h_source.html b/docs/State_8h_source.html new file mode 100644 index 0000000..288bc9f --- /dev/null +++ b/docs/State_8h_source.html @@ -0,0 +1,470 @@ + + + + + + + +signals-cpp: include/signals/State.h Source File + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
State.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2#include "signals/Signal.h"
+
3
+
4using namespace Eigen;
+
5
+
32template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
+
+
33struct State
+
34{
+
35 using PoseType = typename PoseTypeSpec::Type;
+
36 using TwistType = typename TwistTypeSpec::Type;
+
37
+ + +
43
+
44 State() {}
+
45
+
46 State(T* arr) : pose(arr), twist(arr + PoseDim) {}
+
47
+
+
48 State(const State& other)
+
49 {
+
50 this->pose = other.pose;
+
51 this->twist = other.twist;
+
52 }
+
+
53
+
+
54 static State identity()
+
55 {
+
56 State x;
+
57 x.pose = PoseTypeSpec::ZeroType();
+
58 x.twist = TwistTypeSpec::ZeroType();
+
59 return x;
+
60 }
+
+
61
+
+
62 static State nans()
+
63 {
+
64 State x;
+
65 x.pose = PoseTypeSpec::NansType();
+
66 x.twist = TwistTypeSpec::NansType();
+
67 return x;
+
68 }
+
+
69
+
+
70 State& operator*=(const double& s)
+
71 {
+
72 pose *= s;
+
73 twist *= s;
+
74 return *this;
+
75 }
+
+
76
+
77 template<typename T2>
+
+ +
79 {
+
80 pose += r.pose;
+
81 twist += r.twist;
+
82 return *this;
+
83 }
+
+
84};
+
+
85
+
86template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+
+ +
88{
+ +
90 lpr.pose += r.pose;
+
91 lpr.twist += r.twist;
+
92 return lpr;
+
93}
+
+
94
+
95template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+
+ +
97{
+ +
99 lmr.pose = l.pose - r.pose;
+
100 lmr.twist = l.twist - r.twist;
+
101 return lmr;
+
102}
+
+
103
+
104template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+
+ +
106{
+ +
108 lr.pose *= l;
+
109 lr.twist *= l;
+
110 return lr;
+
111}
+
+
112
+
113template<typename T, typename PTS, size_t PD, typename TTS, size_t TD>
+
+ +
115{
+ +
117 lr.pose *= r;
+
118 lr.twist *= r;
+
119 return lr;
+
120}
+
+
121
+
122template<typename T>
+ +
124
+
125template<typename T>
+
+
126inline std::ostream& operator<<(std::ostream& os, const ScalarStateType<T>& x)
+
127{
+
128 os << "ScalarStateType: pose=" << x.pose << "; twist=" << x.twist;
+
129 return os;
+
130}
+
+
131
+
132template<typename T>
+
+ +
134{
+
135 ScalarStateType<T> lr = l;
+
136 lr.pose /= r;
+
137 lr.twist /= r;
+
138 return lr;
+
139}
+
+
140
+
141template<typename T, size_t d>
+ +
143
+
144template<typename T, size_t d>
+
+
145inline std::ostream& operator<<(std::ostream& os, const VectorStateType<T, d>& x)
+
146{
+
147 os << "VectorStateType: pose=" << x.pose.transpose() << "; twist=" << x.twist.transpose();
+
148 return os;
+
149}
+
+
150
+
151template<typename T, size_t d>
+
+ +
153{
+ +
155 lr.pose /= r;
+
156 lr.twist /= r;
+
157 return lr;
+
158}
+
+
159
+
160template<typename T, typename ManifoldType, size_t PD, size_t TD>
+ +
162
+
163template<typename T, typename ManifoldType, size_t PD, size_t TD>
+
+
164inline std::ostream& operator<<(std::ostream& os, const ManifoldStateType<T, ManifoldType, PD, TD>& x)
+
165{
+
166 os << "VectorStateType: pose=" << x.pose << "; twist=" << x.twist;
+
167 return os;
+
168}
+
+
169
+
170template<typename T>
+
+ +
172{
+ +
+
174 static Type ZeroType()
+
175 {
+
176 return Type::identity();
+
177 }
+
+
+
178 static Type NansType()
+
179 {
+
180 return Type::nans();
+
181 }
+
+
182};
+
+
183
+
184template<typename T, size_t d>
+
+ +
186{
+ +
+
188 static Type ZeroType()
+
189 {
+
190 return Type::identity();
+
191 }
+
+
+
192 static Type NansType()
+
193 {
+
194 return Type::nans();
+
195 }
+
+
196};
+
+
197
+
198template<typename T, typename ManifoldType, size_t PD, size_t TD>
+
+ +
200{
+ +
+
202 static Type ZeroType()
+
203 {
+
204 return Type::identity();
+
205 }
+
+
+
206 static Type NansType()
+
207 {
+
208 return Type::nans();
+
209 }
+
+
210};
+
+
211
+
212template<typename T>
+ +
214
+
215template<typename T>
+
+
216inline std::ostream& operator<<(std::ostream& os, const ScalarStateSignal<T>& x)
+
217{
+
218 os << "ScalarStateSignal at t=" << x.t() << ": pose=" << x().pose << "; twist=" << x().twist;
+
219 return os;
+
220}
+
+
221
+
222template<typename T, size_t d>
+ +
224
+
225template<typename T, size_t d>
+
+
226inline std::ostream& operator<<(std::ostream& os, const VectorStateSignal<T, d>& x)
+
227{
+
228 os << "VectorStateSignal at t=" << x.t() << ": pose=" << x().pose.transpose()
+
229 << "; twist=" << x().twist.transpose();
+
230 return os;
+
231}
+
+
232
+
233template<typename T, typename ManifoldType, size_t PD, size_t TD>
+ +
235
+
236template<typename T, typename ManifoldType, size_t PD, size_t TD>
+
+
237inline std::ostream& operator<<(std::ostream& os, const ManifoldStateSignal<T, ManifoldType, PD, TD>& x)
+
238{
+
239 os << "ManifoldStateSignal at t=" << x.t() << ": pose=" << x().pose << "; twist=" << x().twist;
+
240 return os;
+
241}
+
+
242
+
+
243#define MAKE_VECTOR_STATES(Dimension) \
+
244 template<typename T> \
+
245 using Vector##Dimension##State = VectorStateType<T, Dimension>; \
+
246 template<typename T> \
+
247 using Vector##Dimension##StateSignal = VectorStateSignal<T, Dimension>; \
+
248 typedef Vector##Dimension##State<double> Vector##Dimension##dState; \
+
249 typedef Vector##Dimension##StateSignal<double> Vector##Dimension##dStateSignal;
+
+
250
+
+
251#define MAKE_MANIF_STATES(Manif, Dimension, TangentDimension) \
+
252 template<typename T> \
+
253 using Manif##State = ManifoldStateType<T, Manif<T>, Dimension, TangentDimension>; \
+
254 template<typename T> \
+
255 using Manif##StateSignal = ManifoldStateSignal<T, Manif<T>, Dimension, TangentDimension>; \
+
256 typedef Manif##State<double> Manif##dState; \
+
257 typedef Manif##StateSignal<double> Manif##dStateSignal;
+
+
258
+
259template<typename T>
+ + + + + + + + + + + + + + + + + + +
Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > > ManifoldStateSignal
Definition State.h:234
+
Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > > VectorStateSignal
Definition State.h:223
+
State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d > VectorStateType
Definition State.h:142
+
Signal< ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > > ScalarStateSignal
Definition State.h:213
+
#define MAKE_MANIF_STATES(Manif, Dimension, TangentDimension)
Definition State.h:251
+
State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD > ManifoldStateType
Definition State.h:161
+
State< T, PTS, PD, TTS, TD > operator*(const double &l, const State< T, PTS, PD, TTS, TD > &r)
Definition State.h:105
+
ScalarStateSignal< double > ScalardStateSignal
Definition State.h:262
+
ScalarState< double > ScalardState
Definition State.h:261
+
State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 > ScalarStateType
Definition State.h:123
+
State< T, PTS, PD, TTS, TD > operator+(const State< T, PTS, PD, TTS, TD > &l, const State< T, TTS, TD, TTS, TD > &r)
Definition State.h:87
+
State< T, TTS, TD, TTS, TD > operator-(const State< T, PTS, PD, TTS, TD > &l, const State< T, PTS, PD, TTS, TD > &r)
Definition State.h:96
+
std::ostream & operator<<(std::ostream &os, const ScalarStateType< T > &x)
Definition State.h:126
+
ScalarStateType< T > ScalarState
Definition State.h:260
+
#define MAKE_VECTOR_STATES(Dimension)
Definition State.h:243
+
ScalarStateType< T > operator/(const ScalarStateType< T > &l, const double &r)
Definition State.h:133
+
Definition Signal.h:38
+
double t() const
Definition Signal.h:105
+
Definition State.h:200
+
static Type NansType()
Definition State.h:206
+
static Type ZeroType()
Definition State.h:202
+
ManifoldStateType< T, ManifoldType, PD, TD > Type
Definition State.h:201
+
Definition Signal.h:620
+
Definition State.h:172
+
static Type ZeroType()
Definition State.h:174
+
ScalarStateType< T > Type
Definition State.h:173
+
static Type NansType()
Definition State.h:178
+
Base type for all Model state representations.
Definition State.h:34
+ + + +
typename PoseTypeSpec::Type PoseType
Definition State.h:35
+ +
State & operator+=(const State< T2, ScalarSignalSpec< T >, TwistDim, ScalarSignalSpec< T >, TwistDim > &r)
Definition State.h:78
+ +
State(const State &other)
Definition State.h:48
+
typename TwistTypeSpec::Type TwistType
Definition State.h:36
+
State()
Definition State.h:44
+
State & operator*=(const double &s)
Definition State.h:70
+
Definition Signal.h:634
+
Definition State.h:186
+
VectorStateType< T, d > Type
Definition State.h:187
+
static Type NansType()
Definition State.h:192
+
static Type ZeroType()
Definition State.h:188
+
+
+ + + + diff --git a/docs/Utils_8h.html b/docs/Utils_8h.html new file mode 100644 index 0000000..467420a --- /dev/null +++ b/docs/Utils_8h.html @@ -0,0 +1,137 @@ + + + + + + + +signals-cpp: include/signals/Utils.h File Reference + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Utils.h File Reference
+
+
+
#include <algorithm>
+
+

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  signal_utils
 
+ + + +

+Functions

bool signal_utils::getTimeDelta (double &dt, const double &t0, const double &tf, const double &dt_max=std::numeric_limits< double >::max())
 
+
+
+ + + + diff --git a/docs/Utils_8h.js b/docs/Utils_8h.js new file mode 100644 index 0000000..15acde7 --- /dev/null +++ b/docs/Utils_8h.js @@ -0,0 +1,4 @@ +var Utils_8h = +[ + [ "signal_utils::getTimeDelta", "namespacesignal__utils.html#ad7667542f893604d059a5d0022d2890c", null ] +]; \ No newline at end of file diff --git a/docs/Utils_8h_source.html b/docs/Utils_8h_source.html new file mode 100644 index 0000000..7ab3673 --- /dev/null +++ b/docs/Utils_8h_source.html @@ -0,0 +1,143 @@ + + + + + + + +signals-cpp: include/signals/Utils.h Source File + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Utils.h
+
+
+Go to the documentation of this file.
1#pragma once
+
2#include <algorithm>
+
3
+
+
4namespace signal_utils
+
5{
+
10inline bool
+
+
11getTimeDelta(double& dt, const double& t0, const double& tf, const double& dt_max = std::numeric_limits<double>::max())
+
12{
+
13 if (t0 >= tf || t0 < 0)
+
14 {
+
15 return false;
+
16 }
+
17 dt = std::min(tf - t0, dt_max);
+
18 return true;
+
19}
+
+
20
+
21} // end namespace signal_utils
+
+
Definition Utils.h:5
+
bool getTimeDelta(double &dt, const double &t0, const double &tf, const double &dt_max=std::numeric_limits< double >::max())
Definition Utils.h:11
+
+
+ + + + diff --git a/docs/annotated.html b/docs/annotated.html new file mode 100644 index 0000000..10e0802 --- /dev/null +++ b/docs/annotated.html @@ -0,0 +1,145 @@ + + + + + + + +signals-cpp: Class List + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + + + + + + + + + + +
 CEulerIntegratorSpecSpecification for numerically integrating a black box function using Euler's method
 CIntegratorBase type for all integrators
 CManifoldSignalSpec
 CManifoldStateSignalSpec
 CModelBase type for all model simulators
 CRigidBodyDynamics3DOFDefinition of the dynamics for planar motion of a mass that's allowed to rotate
 CRigidBodyDynamics6DOFDefinition of the dynamics for a 3D rigid body that can rotate about any axis
 CRigidBodyParams1DParameters for a 1D rigid body model
 CRigidBodyParams2DParameters for a 2D rigid body model
 CRigidBodyParams3DParameters for a 3D rigid body model
 CRotationalDynamics1DOFDefinition of the dynamics for planar rotation-only motion of a mass
 CRotationalDynamics3DOFDefinition of the dynamics for 3D rotation-only motion of a mass
 CScalarSignalSpec
 CScalarStateSignalSpec
 CSignal
 CSignalDP
 CSimpsonIntegratorSpecSpecification for numerically integrating a black box function using Simpson's method
 CStateBase type for all Model state representations
 CTranslationalDynamicsBaseBase class for defining the dynamics for 1D, 2D, and 3D point masses
 CTrapezoidalIntegratorSpecSpecification for numerically integrating a black box function using the Trapezoidal method
 CVectorSignalSpec
 CVectorStateSignalSpec
+
+
+
+ + + + diff --git a/docs/annotated_dup.js b/docs/annotated_dup.js new file mode 100644 index 0000000..ddb7013 --- /dev/null +++ b/docs/annotated_dup.js @@ -0,0 +1,24 @@ +var annotated_dup = +[ + [ "EulerIntegratorSpec", "structEulerIntegratorSpec.html", null ], + [ "Integrator", "structIntegrator.html", null ], + [ "ManifoldSignalSpec", "structManifoldSignalSpec.html", "structManifoldSignalSpec" ], + [ "ManifoldStateSignalSpec", "structManifoldStateSignalSpec.html", "structManifoldStateSignalSpec" ], + [ "Model", "classModel.html", "classModel" ], + [ "RigidBodyDynamics3DOF", "structRigidBodyDynamics3DOF.html", "structRigidBodyDynamics3DOF" ], + [ "RigidBodyDynamics6DOF", "structRigidBodyDynamics6DOF.html", "structRigidBodyDynamics6DOF" ], + [ "RigidBodyParams1D", "structRigidBodyParams1D.html", "structRigidBodyParams1D" ], + [ "RigidBodyParams2D", "structRigidBodyParams2D.html", "structRigidBodyParams2D" ], + [ "RigidBodyParams3D", "structRigidBodyParams3D.html", "structRigidBodyParams3D" ], + [ "RotationalDynamics1DOF", "structRotationalDynamics1DOF.html", "structRotationalDynamics1DOF" ], + [ "RotationalDynamics3DOF", "structRotationalDynamics3DOF.html", "structRotationalDynamics3DOF" ], + [ "ScalarSignalSpec", "structScalarSignalSpec.html", "structScalarSignalSpec" ], + [ "ScalarStateSignalSpec", "structScalarStateSignalSpec.html", "structScalarStateSignalSpec" ], + [ "Signal", "classSignal.html", "classSignal" ], + [ "SimpsonIntegratorSpec", "structSimpsonIntegratorSpec.html", null ], + [ "State", "structState.html", "structState" ], + [ "TranslationalDynamicsBase", "structTranslationalDynamicsBase.html", "structTranslationalDynamicsBase" ], + [ "TrapezoidalIntegratorSpec", "structTrapezoidalIntegratorSpec.html", null ], + [ "VectorSignalSpec", "structVectorSignalSpec.html", "structVectorSignalSpec" ], + [ "VectorStateSignalSpec", "structVectorStateSignalSpec.html", "structVectorStateSignalSpec" ] +]; \ No newline at end of file diff --git a/docs/bc_s.png b/docs/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/docs/bc_s.png differ diff --git a/docs/bc_sd.png b/docs/bc_sd.png new file mode 100644 index 0000000..31ca888 Binary files /dev/null and b/docs/bc_sd.png differ diff --git a/docs/classModel-members.html b/docs/classModel-members.html new file mode 100644 index 0000000..c37ef33 --- /dev/null +++ b/docs/classModel-members.html @@ -0,0 +1,135 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Model< DynamicsType > Member List
+
+
+ +

This is the complete list of members for Model< DynamicsType >, including all inherited members.

+ + + + + + + + + + + + + + +
hasParams()Model< DynamicsType >inline
InputSignalType typedefModel< DynamicsType >
Model()Model< DynamicsType >inline
ParamsType typedefModel< DynamicsType >
reset()Model< DynamicsType >inline
setParams(const ParamsType &params)Model< DynamicsType >inline
simulate(const InputSignalType &u, const double &tf, const bool &insertIntoHistory=false, const bool &calculateXddot=false)Model< DynamicsType >inline
simulate(const InputSignalType &u, const double &tf, const double &dt, const bool &insertIntoHistory=false, const bool &calculateXddot=false)Model< DynamicsType >inline
StateDotSignalType typedefModel< DynamicsType >
StateSignalType typedefModel< DynamicsType >
t() constModel< DynamicsType >inline
xModel< DynamicsType >
xdotModel< DynamicsType >
+
+ + + + diff --git a/docs/classModel.html b/docs/classModel.html new file mode 100644 index 0000000..6626ec3 --- /dev/null +++ b/docs/classModel.html @@ -0,0 +1,557 @@ + + + + + + + +signals-cpp: Model< DynamicsType > Class Template Reference + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Model< DynamicsType > Class Template Reference
+
+
+ +

Base type for all model simulators. + More...

+ +

#include <Models.h>

+ + + + + + + + + + +

+Public Types

using InputSignalType = typename DynamicsType::InputSignalType
 
using StateDotSignalType = typename DynamicsType::StateDotSignalType
 
using StateSignalType = typename DynamicsType::StateSignalType
 
using ParamsType = typename DynamicsType::ParamsType
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Model ()
 
void setParams (const ParamsType &params)
 Initialize the model with any required parameters.
 
bool hasParams ()
 Verify that the model has parameters explicity set by setParams().
 
void reset ()
 Zero out the model state and derivative variables and reset simulation time to zero.
 
double t () const
 Get the current simulation time.
 
template<typename IntegratorType>
bool simulate (const InputSignalType &u, const double &tf, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
 Simulate the system response to an input over a specified time interval.
 
template<typename IntegratorType>
bool simulate (const InputSignalType &u, const double &tf, const double &dt, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
 Simulate the system response to an input over a specified time interval, chunked up into smaller integration increments.
 
+ + + + + + + +

+Public Attributes

StateSignalType x
 Model state signal.
 
StateDotSignalType xdot
 Time derivative of the model state signal.
 
+

Detailed Description

+
template<typename DynamicsType>
+class Model< DynamicsType >

Base type for all model simulators.

+

Provides methods for initialization, reset, and simulation of dynamic models.

+

Derived types:

+ +

Member Typedef Documentation

+ +

◆ InputSignalType

+ +
+
+
+template<typename DynamicsType>
+ + + + +
using Model< DynamicsType >::InputSignalType = typename DynamicsType::InputSignalType
+
+ +
+
+ +

◆ ParamsType

+ +
+
+
+template<typename DynamicsType>
+ + + + +
using Model< DynamicsType >::ParamsType = typename DynamicsType::ParamsType
+
+ +
+
+ +

◆ StateDotSignalType

+ +
+
+
+template<typename DynamicsType>
+ + + + +
using Model< DynamicsType >::StateDotSignalType = typename DynamicsType::StateDotSignalType
+
+ +
+
+ +

◆ StateSignalType

+ +
+
+
+template<typename DynamicsType>
+ + + + +
using Model< DynamicsType >::StateSignalType = typename DynamicsType::StateSignalType
+
+ +
+
+

Constructor & Destructor Documentation

+ +

◆ Model()

+ +
+
+
+template<typename DynamicsType>
+ + + + + +
+ + + + + + + +
Model< DynamicsType >::Model ()
+
+inline
+
+ +
+
+

Member Function Documentation

+ +

◆ hasParams()

+ +
+
+
+template<typename DynamicsType>
+ + + + + +
+ + + + + + + +
bool Model< DynamicsType >::hasParams ()
+
+inline
+
+ +

Verify that the model has parameters explicity set by setParams().

+ +
+
+ +

◆ reset()

+ +
+
+
+template<typename DynamicsType>
+ + + + + +
+ + + + + + + +
void Model< DynamicsType >::reset ()
+
+inline
+
+ +

Zero out the model state and derivative variables and reset simulation time to zero.

+ +
+
+ +

◆ setParams()

+ +
+
+
+template<typename DynamicsType>
+ + + + + +
+ + + + + + + +
void Model< DynamicsType >::setParams (const ParamsType & params)
+
+inline
+
+ +

Initialize the model with any required parameters.

+

The required parameters are determined by the model / dynamics specialization.

+ +
+
+ +

◆ simulate() [1/2]

+ +
+
+
+template<typename DynamicsType>
+
+template<typename IntegratorType>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
bool Model< DynamicsType >::simulate (const InputSignalType & u,
const double & tf,
const bool & insertIntoHistory = false,
const bool & calculateXddot = false )
+
+inline
+
+ +

Simulate the system response to an input over a specified time interval.

+
Parameters
+ + + + + +
uThe input signal, which should be defined up to tf.
tfThe time to simulate to. Ideally the delta from the current time is small.
insertIntoHistoryWhether to store the result in state memory.
calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
+
+
+
Returns
Whether the simulation was successful.
+ +
+
+ +

◆ simulate() [2/2]

+ +
+
+
+template<typename DynamicsType>
+
+template<typename IntegratorType>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
bool Model< DynamicsType >::simulate (const InputSignalType & u,
const double & tf,
const double & dt,
const bool & insertIntoHistory = false,
const bool & calculateXddot = false )
+
+inline
+
+ +

Simulate the system response to an input over a specified time interval, chunked up into smaller integration increments.

+
Parameters
+ + + + + + +
uThe input signal, which should be defined up to tf.
tfThe time to simulate to.
dtTime delta length by which to chunk up the integrations. Ideally this is small.
insertIntoHistoryWhether to store the result in state memory.
calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
+
+
+
Returns
Whether the simulation was successful.
+ +
+
+ +

◆ t()

+ +
+
+
+template<typename DynamicsType>
+ + + + + +
+ + + + + + + +
double Model< DynamicsType >::t () const
+
+inline
+
+ +

Get the current simulation time.

+ +
+
+

Member Data Documentation

+ +

◆ x

+ +
+
+
+template<typename DynamicsType>
+ + + + +
StateSignalType Model< DynamicsType >::x
+
+ +

Model state signal.

+ +
+
+ +

◆ xdot

+ +
+
+
+template<typename DynamicsType>
+ + + + +
StateDotSignalType Model< DynamicsType >::xdot
+
+ +

Time derivative of the model state signal.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classModel.js b/docs/classModel.js new file mode 100644 index 0000000..e40c2f4 --- /dev/null +++ b/docs/classModel.js @@ -0,0 +1,16 @@ +var classModel = +[ + [ "InputSignalType", "classModel.html#ac990dd4740b30e4477bca86fc6172970", null ], + [ "ParamsType", "classModel.html#aec20251d98505785fa51c52eb81dd3a2", null ], + [ "StateDotSignalType", "classModel.html#a8abdf37c6158386a9f1d2c6c506f6839", null ], + [ "StateSignalType", "classModel.html#a643e1a47ddbb10c5c10844f9aea5be98", null ], + [ "Model", "classModel.html#a3cbccc00606661a35110dbe111af54ad", null ], + [ "hasParams", "classModel.html#a4f059d658bfda1665bf44a36b7aaf8e5", null ], + [ "reset", "classModel.html#a823536a9764d6a35cce173573ee62e90", null ], + [ "setParams", "classModel.html#a96533143a30ab87c379e411fcae59643", null ], + [ "simulate", "classModel.html#ac7446138b27c8feba779ebfe8e82b99d", null ], + [ "simulate", "classModel.html#ac2550ae8ed888d167450160ce55286df", null ], + [ "t", "classModel.html#a7661852411b9ffd59240d5d5ca0e4dd3", null ], + [ "x", "classModel.html#abfe8871b9f0eac35c76af3f5cfcdea35", null ], + [ "xdot", "classModel.html#ab8bb4819a03ed642326295c28bea6fa7", null ] +]; \ No newline at end of file diff --git a/docs/classSignal-members.html b/docs/classSignal-members.html new file mode 100644 index 0000000..ee8f0b6 --- /dev/null +++ b/docs/classSignal-members.html @@ -0,0 +1,150 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Signal< BaseSignalSpec, TangentSignalSpec > Member List
+
+
+ +

This is the complete list of members for Signal< BaseSignalSpec, TangentSignalSpec >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BaseType typedefSignal< BaseSignalSpec, TangentSignalSpec >
derivativeMethodSignal< BaseSignalSpec, TangentSignalSpec >
dot() constSignal< BaseSignalSpec, TangentSignalSpec >inline
dot(const double &t) constSignal< BaseSignalSpec, TangentSignalSpec >inline
dot(const std::vector< double > &t) constSignal< BaseSignalSpec, TangentSignalSpec >inline
dotSignal()Signal< BaseSignalSpec, TangentSignalSpec >inline
extrapolationMethodSignal< BaseSignalSpec, TangentSignalSpec >
interpolationMethodSignal< BaseSignalSpec, TangentSignalSpec >
operator()() constSignal< BaseSignalSpec, TangentSignalSpec >inline
operator()(const double &t) constSignal< BaseSignalSpec, TangentSignalSpec >inline
operator()(const std::vector< double > &t) constSignal< BaseSignalSpec, TangentSignalSpec >inline
operator*(const double &l, const Signal< BSS, TSS > &r)Signal< BaseSignalSpec, TangentSignalSpec >friend
operator*(const Signal< BSS, TSS > &l, const double &r)Signal< BaseSignalSpec, TangentSignalSpec >friend
operator+(const Signal< BSS, TSS > &l, const Signal< TSS, TSS > &r)Signal< BaseSignalSpec, TangentSignalSpec >friend
operator-(const Signal< BSS, TSS > &l, const Signal< BSS, TSS > &r)Signal< BaseSignalSpec, TangentSignalSpec >friend
reset()Signal< BaseSignalSpec, TangentSignalSpec >inline
setDerivativeMethod(DerivativeMethod method)Signal< BaseSignalSpec, TangentSignalSpec >inline
setExtrapolationMethod(ExtrapolationMethod method)Signal< BaseSignalSpec, TangentSignalSpec >inline
setInterpolationMethod(InterpolationMethod method)Signal< BaseSignalSpec, TangentSignalSpec >inline
Signal()Signal< BaseSignalSpec, TangentSignalSpec >inline
Signal(const Signal &other)Signal< BaseSignalSpec, TangentSignalSpec >inline
SignalDPComparatorSignal< BaseSignalSpec, TangentSignalSpec >
t() constSignal< BaseSignalSpec, TangentSignalSpec >inline
TangentType typedefSignal< BaseSignalSpec, TangentSignalSpec >
update(const double &_t, const BaseType &_x, bool insertHistory=false)Signal< BaseSignalSpec, TangentSignalSpec >inline
update(const double &_t, const BaseType &_x, const TangentType &_xdot, bool insertHistory=false)Signal< BaseSignalSpec, TangentSignalSpec >inline
update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory)Signal< BaseSignalSpec, TangentSignalSpec >inline
update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory, const std::vector< TangentType > &_xdotHistory)Signal< BaseSignalSpec, TangentSignalSpec >inline
+
+ + + + diff --git a/docs/classSignal.html b/docs/classSignal.html new file mode 100644 index 0000000..03a4620 --- /dev/null +++ b/docs/classSignal.html @@ -0,0 +1,965 @@ + + + + + + + +signals-cpp: Signal< BaseSignalSpec, TangentSignalSpec > Class Template Reference + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Signal< BaseSignalSpec, TangentSignalSpec > Class Template Reference
+
+
+ +

#include <Signal.h>

+ + + + +

+Classes

struct  SignalDP
 
+ + + + + +

+Public Types

using BaseType = typename BaseSignalSpec::Type
 
using TangentType = typename TangentSignalSpec::Type
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Signal ()
 
 Signal (const Signal &other)
 
Signal< TangentSignalSpec, TangentSignalSpec > dotSignal ()
 
double t () const
 
BaseType operator() () const
 
TangentType dot () const
 
BaseType operator() (const double &t) const
 
TangentType dot (const double &t) const
 
std::vector< BaseTypeoperator() (const std::vector< double > &t) const
 
std::vector< TangentTypedot (const std::vector< double > &t) const
 
void setInterpolationMethod (InterpolationMethod method)
 
void setExtrapolationMethod (ExtrapolationMethod method)
 
void setDerivativeMethod (DerivativeMethod method)
 
void reset ()
 
bool update (const double &_t, const BaseType &_x, bool insertHistory=false)
 
bool update (const double &_t, const BaseType &_x, const TangentType &_xdot, bool insertHistory=false)
 
bool update (const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory)
 
bool update (const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory, const std::vector< TangentType > &_xdotHistory)
 
+ + + + + + + + + + + +

+Public Attributes

struct { 
 
SignalDPComparator 
 
InterpolationMethod interpolationMethod
 
ExtrapolationMethod extrapolationMethod
 
DerivativeMethod derivativeMethod
 
+ + + + + + + + + + + + + +

+Friends

template<typename BSS, typename TSS>
Signal< BSS, TSS > operator+ (const Signal< BSS, TSS > &l, const Signal< TSS, TSS > &r)
 
template<typename BSS, typename TSS>
Signal< TSS, TSS > operator- (const Signal< BSS, TSS > &l, const Signal< BSS, TSS > &r)
 
template<typename BSS, typename TSS>
Signal< BSS, TSS > operator* (const double &l, const Signal< BSS, TSS > &r)
 
template<typename BSS, typename TSS>
Signal< BSS, TSS > operator* (const Signal< BSS, TSS > &l, const double &r)
 
+

Member Typedef Documentation

+ +

◆ BaseType

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + +
using Signal< BaseSignalSpec, TangentSignalSpec >::BaseType = typename BaseSignalSpec::Type
+
+ +
+
+ +

◆ TangentType

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + +
using Signal< BaseSignalSpec, TangentSignalSpec >::TangentType = typename TangentSignalSpec::Type
+
+ +
+
+

Constructor & Destructor Documentation

+ +

◆ Signal() [1/2]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
Signal< BaseSignalSpec, TangentSignalSpec >::Signal ()
+
+inline
+
+ +
+
+ +

◆ Signal() [2/2]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
Signal< BaseSignalSpec, TangentSignalSpec >::Signal (const Signal< BaseSignalSpec, TangentSignalSpec > & other)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +

◆ dot() [1/3]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
TangentType Signal< BaseSignalSpec, TangentSignalSpec >::dot () const
+
+inline
+
+ +
+
+ +

◆ dot() [2/3]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
TangentType Signal< BaseSignalSpec, TangentSignalSpec >::dot (const double & t) const
+
+inline
+
+ +
+
+ +

◆ dot() [3/3]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
std::vector< TangentType > Signal< BaseSignalSpec, TangentSignalSpec >::dot (const std::vector< double > & t) const
+
+inline
+
+ +
+
+ +

◆ dotSignal()

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
Signal< TangentSignalSpec, TangentSignalSpec > Signal< BaseSignalSpec, TangentSignalSpec >::dotSignal ()
+
+inline
+
+ +
+
+ +

◆ operator()() [1/3]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
BaseType Signal< BaseSignalSpec, TangentSignalSpec >::operator() () const
+
+inline
+
+ +
+
+ +

◆ operator()() [2/3]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
BaseType Signal< BaseSignalSpec, TangentSignalSpec >::operator() (const double & t) const
+
+inline
+
+ +
+
+ +

◆ operator()() [3/3]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
std::vector< BaseType > Signal< BaseSignalSpec, TangentSignalSpec >::operator() (const std::vector< double > & t) const
+
+inline
+
+ +
+
+ +

◆ reset()

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
void Signal< BaseSignalSpec, TangentSignalSpec >::reset ()
+
+inline
+
+ +
+
+ +

◆ setDerivativeMethod()

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
void Signal< BaseSignalSpec, TangentSignalSpec >::setDerivativeMethod (DerivativeMethod method)
+
+inline
+
+ +
+
+ +

◆ setExtrapolationMethod()

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
void Signal< BaseSignalSpec, TangentSignalSpec >::setExtrapolationMethod (ExtrapolationMethod method)
+
+inline
+
+ +
+
+ +

◆ setInterpolationMethod()

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
void Signal< BaseSignalSpec, TangentSignalSpec >::setInterpolationMethod (InterpolationMethod method)
+
+inline
+
+ +
+
+ +

◆ t()

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + +
double Signal< BaseSignalSpec, TangentSignalSpec >::t () const
+
+inline
+
+ +
+
+ +

◆ update() [1/4]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + + + + + + + + + + +
bool Signal< BaseSignalSpec, TangentSignalSpec >::update (const double & _t,
const BaseType & _x,
bool insertHistory = false )
+
+inline
+
+ +
+
+ +

◆ update() [2/4]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
bool Signal< BaseSignalSpec, TangentSignalSpec >::update (const double & _t,
const BaseType & _x,
const TangentType & _xdot,
bool insertHistory = false )
+
+inline
+
+ +
+
+ +

◆ update() [3/4]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + + + + + +
bool Signal< BaseSignalSpec, TangentSignalSpec >::update (const std::vector< double > & _tHistory,
const std::vector< BaseType > & _xHistory )
+
+inline
+
+ +
+
+ +

◆ update() [4/4]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + + +
+ + + + + + + + + + + + + + + + +
bool Signal< BaseSignalSpec, TangentSignalSpec >::update (const std::vector< double > & _tHistory,
const std::vector< BaseType > & _xHistory,
const std::vector< TangentType > & _xdotHistory )
+
+inline
+
+ +
+
+

Friends And Related Symbol Documentation

+ +

◆ operator* [1/2]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+template<typename BSS, typename TSS>
+ + + + + +
+ + + + + + + + + + + +
Signal< BSS, TSS > operator* (const double & l,
const Signal< BSS, TSS > & r )
+
+friend
+
+ +
+
+ +

◆ operator* [2/2]

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+template<typename BSS, typename TSS>
+ + + + + +
+ + + + + + + + + + + +
Signal< BSS, TSS > operator* (const Signal< BSS, TSS > & l,
const double & r )
+
+friend
+
+ +
+
+ +

◆ operator+

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+template<typename BSS, typename TSS>
+ + + + + +
+ + + + + + + + + + + +
Signal< BSS, TSS > operator+ (const Signal< BSS, TSS > & l,
const Signal< TSS, TSS > & r )
+
+friend
+
+ +
+
+ +

◆ operator-

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+
+template<typename BSS, typename TSS>
+ + + + + +
+ + + + + + + + + + + +
Signal< TSS, TSS > operator- (const Signal< BSS, TSS > & l,
const Signal< BSS, TSS > & r )
+
+friend
+
+ +
+
+

Member Data Documentation

+ +

◆ derivativeMethod

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + +
DerivativeMethod Signal< BaseSignalSpec, TangentSignalSpec >::derivativeMethod
+
+ +
+
+ +

◆ extrapolationMethod

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + +
ExtrapolationMethod Signal< BaseSignalSpec, TangentSignalSpec >::extrapolationMethod
+
+ +
+
+ +

◆ interpolationMethod

+ +
+
+
+template<typename BaseSignalSpec, typename TangentSignalSpec>
+ + + + +
InterpolationMethod Signal< BaseSignalSpec, TangentSignalSpec >::interpolationMethod
+
+ +
+
+ +

◆ [struct]

+ +
+
+ + + + +
struct { ... } Signal< BaseSignalSpec, TangentSignalSpec >::SignalDPComparator
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classSignal.js b/docs/classSignal.js new file mode 100644 index 0000000..be4991f --- /dev/null +++ b/docs/classSignal.js @@ -0,0 +1,32 @@ +var classSignal = +[ + [ "SignalDP", "structSignal_1_1SignalDP.html", "structSignal_1_1SignalDP" ], + [ "BaseType", "classSignal.html#a9bda97fe7663f5481807259ca8bcd8cb", null ], + [ "TangentType", "classSignal.html#aa0094b1c69fd482de9de83b99634996a", null ], + [ "Signal", "classSignal.html#a8b5d0a9fba3546f500fed7e2102cd9a7", null ], + [ "Signal", "classSignal.html#a81a95abda92d3efc0bd4b4ccba77e303", null ], + [ "dot", "classSignal.html#a8b12b8bc1e74ddbadb67248fab16c461", null ], + [ "dot", "classSignal.html#a8989cbb307917a9c1f6331be2a5ae4e9", null ], + [ "dot", "classSignal.html#aad31a21f4a7d572da1e06e407ccacecd", null ], + [ "dotSignal", "classSignal.html#a95241f68d33194232ba1eea1747a5231", null ], + [ "operator()", "classSignal.html#a2d222b24cb25f6f228a0c69d71d95918", null ], + [ "operator()", "classSignal.html#ad32d0b6b6bbc54ab8bd0fa63ed3039b9", null ], + [ "operator()", "classSignal.html#abf8612dae8c835fa349c6f26201016eb", null ], + [ "reset", "classSignal.html#a914fd7f09ae0723c88fce310fd7c79fd", null ], + [ "setDerivativeMethod", "classSignal.html#a8c25f302d3c4feaa1a4c1f6d59381d89", null ], + [ "setExtrapolationMethod", "classSignal.html#ac3be206ae717ad5e977d8a108de9b9e4", null ], + [ "setInterpolationMethod", "classSignal.html#af336f3d6a2d643040dff9fb5b4c20558", null ], + [ "t", "classSignal.html#a058783faf86f369b296c50d4e72c0881", null ], + [ "update", "classSignal.html#ab91f52b80939a6c67b6863ee463b4ff0", null ], + [ "update", "classSignal.html#a6c7174c9bb20970ebb3de64687f771d8", null ], + [ "update", "classSignal.html#a5530308ef517fd0021f510d47c390dc0", null ], + [ "update", "classSignal.html#a74929b7332876f5aeddc9a05d26d3d32", null ], + [ "operator*", "classSignal.html#ad61a2749da48601dcf27bedaa0cf54fd", null ], + [ "operator*", "classSignal.html#ae5d88905516fd17257964442b0830584", null ], + [ "operator+", "classSignal.html#aead0dbc78a90fbd6ad3f86ab61ed65f7", null ], + [ "operator-", "classSignal.html#a22d02130c5fec79a084ef4d1a28521dc", null ], + [ "derivativeMethod", "classSignal.html#ac0536cd4021cc4815a3dbb60c5b4f473", null ], + [ "extrapolationMethod", "classSignal.html#aff76e692ad975b7721ecf6e60d33a11f", null ], + [ "interpolationMethod", "classSignal.html#ae4c3f0098aaec52921d28cce09ff1ed4", null ], + [ "SignalDPComparator", "classSignal.html#a6db70e8a2784b5596a47f2249a2627b7", null ] +]; \ No newline at end of file diff --git a/docs/classes.html b/docs/classes.html new file mode 100644 index 0000000..4169ec2 --- /dev/null +++ b/docs/classes.html @@ -0,0 +1,143 @@ + + + + + + + +signals-cpp: Class Index + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/clipboard.js b/docs/clipboard.js new file mode 100644 index 0000000..9da9f3c --- /dev/null +++ b/docs/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/docs/closed.png b/docs/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/docs/closed.png differ diff --git a/docs/cookie.js b/docs/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/docs/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/docs/dir_661483514bb8dea267426763b771558e.html b/docs/dir_661483514bb8dea267426763b771558e.html new file mode 100644 index 0000000..1c12c36 --- /dev/null +++ b/docs/dir_661483514bb8dea267426763b771558e.html @@ -0,0 +1,136 @@ + + + + + + + +signals-cpp: include/signals Directory Reference + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
signals Directory Reference
+
+
+ + + + + + + + + + + + + + +

+Files

 Integration.h
 
 Models.h
 
 Signal.h
 
 Signals.h
 
 State.h
 
 Utils.h
 
+
+
+ + + + diff --git a/docs/dir_661483514bb8dea267426763b771558e.js b/docs/dir_661483514bb8dea267426763b771558e.js new file mode 100644 index 0000000..e39bb7e --- /dev/null +++ b/docs/dir_661483514bb8dea267426763b771558e.js @@ -0,0 +1,9 @@ +var dir_661483514bb8dea267426763b771558e = +[ + [ "Integration.h", "Integration_8h.html", "Integration_8h" ], + [ "Models.h", "Models_8h.html", "Models_8h" ], + [ "Signal.h", "Signal_8h.html", "Signal_8h" ], + [ "Signals.h", "Signals_8h.html", null ], + [ "State.h", "State_8h.html", "State_8h" ], + [ "Utils.h", "Utils_8h.html", "Utils_8h" ] +]; \ No newline at end of file diff --git a/docs/dir_d44c64559bbebec7f509842c48db8b23.html b/docs/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..ddd55fc --- /dev/null +++ b/docs/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,126 @@ + + + + + + + +signals-cpp: include Directory Reference + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
include Directory Reference
+
+
+ + + + +

+Directories

 signals
 
+
+
+ + + + diff --git a/docs/dir_d44c64559bbebec7f509842c48db8b23.js b/docs/dir_d44c64559bbebec7f509842c48db8b23.js new file mode 100644 index 0000000..b89aeb4 --- /dev/null +++ b/docs/dir_d44c64559bbebec7f509842c48db8b23.js @@ -0,0 +1,4 @@ +var dir_d44c64559bbebec7f509842c48db8b23 = +[ + [ "signals", "dir_661483514bb8dea267426763b771558e.html", "dir_661483514bb8dea267426763b771558e" ] +]; \ No newline at end of file diff --git a/docs/doc.svg b/docs/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/docs/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/docd.svg b/docs/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docs/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/doxygen-awesome-css b/docs/doxygen-awesome-css new file mode 160000 index 0000000..568f56c --- /dev/null +++ b/docs/doxygen-awesome-css @@ -0,0 +1 @@ +Subproject commit 568f56cde6ac78b6dfcc14acd380b2e745c301ea diff --git a/docs/doxygen-awesome.css b/docs/doxygen-awesome.css new file mode 100644 index 0000000..c2f4114 --- /dev/null +++ b/docs/doxygen-awesome.css @@ -0,0 +1,2681 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #335c80; + --primary-light-color: #70b1e9; + + /* page base colors */ + --page-background-color: #ffffff; + --page-foreground-color: #2f4153; + --page-secondary-foreground-color: #6f7e8e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + + --odd-color: rgba(0,0,0,.028); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --toc-font-size: 13.4px; + --code-font-size: 14px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: 1050px; + --table-line-height: 24px; + --toc-sticky-top: var(--spacing-medium); + --toc-width: 200px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #faf3d8; + --warning-color-dark: #f3a600; + --warning-color-darker: #5f4204; + --note-color: #e4f3ff; + --note-color-dark: #1879C4; + --note-color-darker: #274a5c; + --todo-color: #e4dafd; + --todo-color-dark: #5b2bdd; + --todo-color-darker: #2a0d72; + --deprecated-color: #ecf0f3; + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: #f8d1cc; + --bug-color-dark: #b61825; + --bug-color-darker: #75070f; + --invariant-color: #d8f1e3; + --invariant-color-dark: #44b86f; + --invariant-color-darker: #265532; + + /* blockquote colors */ + --blockquote-background: #f8f9fa; + --blockquote-foreground: #636568; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--page-background-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + --searchbar-border-radius: var(--searchbar-height); + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #F8F9FA; + --fragment-foreground: #37474F; + --fragment-keyword: #bb6bb2; + --fragment-keywordtype: #8258b3; + --fragment-keywordflow: #d67c3b; + --fragment-token: #438a59; + --fragment-comment: #969696; + --fragment-link: #5383d6; + --fragment-preprocessor: #46aaa5; + --fragment-linenumber-color: #797979; + --fragment-linenumber-background: #f4f4f5; + --fragment-linenumber-border: #e3e5e7; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + --toc-background: var(--side-nav-background); + --toc-foreground: var(--side-nav-foreground); + + /* height of an item in any tree / collapsible table */ + --tree-item-height: 30px; + + --memname-font-size: var(--code-font-size); + --memtitle-font-size: 18px; + + --webkit-scrollbar-size: 7px; + --webkit-scrollbar-padding: 4px; + --webkit-scrollbar-color: var(--separator-color); + + --animation-duration: .12s +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --toc-font-size: 15px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #3b2e04; + --warning-color-dark: #f1b602; + --warning-color-darker: #ceb670; + --note-color: #163750; + --note-color-dark: #1982D2; + --note-color-darker: #dcf0fa; + --todo-color: #2a2536; + --todo-color-dark: #7661b3; + --todo-color-darker: #ae9ed6; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2e1917; + --bug-color-dark: #ad2617; + --bug-color-darker: #f5b1aa; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, +.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, +.SelectItem, #MSearchField, .navpath li.navelem a, +.navpath li.navelem a:hover, p.reference, p.definition, div.toc li, div.toc h3 { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: 1em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl, p.reference, p.definition { + font-size: var(--page-font-size); +} + +p.reference, p.definition { + color: var(--page-secondary-foreground-color); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; + background: none; +} + +a.anchor { + scroll-margin-top: var(--spacing-large); + display: block; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { + background: var(--page-secondary-foreground-color); +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } + + #main-menu a.has-submenu span.sub-arrow { + color: var(--page-secondary-foreground-color); + border-radius: var(--border-radius-medium); + } + + #main-menu a.has-submenu:hover span.sub-arrow { + color: var(--page-foreground-color); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +/* until Doxygen 1.9.4 */ +.left img#MSearchSelect { + left: 0; + user-select: none; + padding-left: 8px; +} + +/* Doxygen 1.9.5 */ +.left span#MSearchSelect { + left: 0; + user-select: none; + margin-left: 8px; + padding: 0; +} + +.left #MSearchSelect[src$=".png"] { + padding-left: 0 +} + +.SelectionMark { + user-select: none; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +iframe { + color-scheme: normal; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchResults .SRPage { + background-color: transparent; +} + +#MSearchResults .SRPage .SREntry { + font-size: 10pt; + padding: var(--spacing-small) var(--spacing-medium); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + width: auto !important; + } + + /* + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 + */ + label.main-menu-btn ~ #searchBoxPos1 { + top: 3px !important; + right: 6px !important; + left: 45px; + display: flex; + } + + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { + margin-top: 0; + margin-bottom: 0; + flex-grow: 2; + float: left; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); + min-width: 8px; + max-width: 50vw; +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + } +} + +#nav-tree { + background: transparent; + margin-right: 1px; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); + overflow: hidden; + text-overflow: ellipsis; +} + +#nav-tree .item > a:focus { + outline: none; +} + +#nav-sync { + bottom: 12px; + right: 12px; + top: auto !important; + user-select: none; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + position: relative; + color: var(--primary-color) !important; + font-weight: 500; +} + +#nav-tree .selected::after { + content: ""; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + width: 4px; + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + background: var(--primary-color); +} + + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); + background: none; +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + width: 4px; + background: transparent; + box-shadow: inset -1px 0 0 0 var(--separator-color); +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +@media screen and (min-width: 1000px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: flex; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock { + min-width: 200px; + flex-grow: 1; + } +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 225%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +span.mlabel { + background: var(--primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents center img, + html:not(.light-mode) div.contents > table img, + html:not(.light-mode) div.contents div.dyncontent iframe, + html:not(.light-mode) div.contents center iframe, + html:not(.light-mode) div.contents table iframe, + html:not(.light-mode) div.contents .dotgraph iframe { + filter: brightness(89%) hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img, +html.dark-mode div.contents div.dyncontent iframe, +html.dark-mode div.contents center iframe, +html.dark-mode div.contents table iframe, +html.dark-mode div.contents .dotgraph iframe + { + filter: brightness(89%) hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 0px; + color: var(--page-foreground-color); + box-shadow: + 100px 0 var(--page-background-color), + -100px 0 var(--page-background-color), + 100px 0.75px var(--separator-color), + -100px 0.75px var(--separator-color), + 500px 0 var(--page-background-color), + -500px 0 var(--page-background-color), + 500px 0.75px var(--separator-color), + -500px 0.75px var(--separator-color), + 900px 0 var(--page-background-color), + -900px 0 var(--page-background-color), + 900px 0.75px var(--separator-color), + -900px 0.75px var(--separator-color), + 1400px 0 var(--page-background-color), + -1400px 0 var(--page-background-color), + 1400px 0.75px var(--separator-color), + -1400px 0.75px var(--separator-color), + 1900px 0 var(--page-background-color), + -1900px 0 var(--page-background-color), + 1900px 0.75px var(--separator-color), + -1900px 0.75px var(--separator-color); +} + +blockquote { + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); + padding: var(--spacing-small) var(--spacing-large); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 0; + overflow: visible; + border-radius: var(--border-radius-medium); + overflow: visible; + position: relative; +} + +blockquote::before, blockquote::after { + font-weight: bold; + font-family: serif; + font-size: 360%; + opacity: .15; + position: absolute; +} + +blockquote::before { + content: "“"; + left: -10px; + top: 4px; +} + +blockquote::after { + content: "”"; + right: -8px; + bottom: -25px; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname, .paramname em { + font-weight: 600; + color: var(--primary-dark-color); +} + +.paramname > code { + border: 0; +} + +table.params .paramname { + font-weight: 600; + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + padding-right: var(--spacing-small); + line-height: var(--table-line-height); +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--primary-light-color); +} + +.alphachar a { + color: var(--page-foreground-color); +} + +.dotgraph { + max-width: 100%; + overflow-x: scroll; +} + +.dotgraph .caption { + position: sticky; + left: 0; +} + +/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ +.interactive_dotgraph .dotgraph iframe { + max-width: 100%; +} + +/* + Table of Contents + */ + +div.contents .toc { + max-height: var(--toc-max-height); + min-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--separator-color); + border-radius: 0; + background-color: var(--page-background-color); + box-shadow: none; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 var(--spacing-large); + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc li::before { + display: none; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--page-foreground-color) !important; + text-decoration: none; +} + +div.toc li a:hover, div.toc li a.active { + color: var(--primary-color) !important; +} + +div.toc li a.aboveActive { + color: var(--page-secondary-foreground-color) !important; +} + + +@media screen and (max-width: 999px) { + div.contents .toc { + max-height: 45vh; + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + position: relative; + top: 0; + position: relative; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + background-color: var(--toc-background); + box-shadow: var(--box-shadow); + } + + div.contents .toc.interactive { + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); + overflow: hidden; + } + + div.contents .toc > h3 { + -webkit-tap-highlight-color: transparent; + cursor: pointer; + position: sticky; + top: 0; + background-color: var(--toc-background); + margin: 0; + padding: var(--spacing-large) 0; + display: block; + } + + div.contents .toc.interactive > h3::before { + content: ""; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + display: inline-block; + margin-right: var(--spacing-small); + margin-bottom: calc(var(--navigation-font-size) / 4); + transform: rotate(-90deg); + transition: transform var(--animation-duration) ease-out; + } + + div.contents .toc.interactive.open > h3::before { + transform: rotate(0deg); + } + + div.contents .toc.interactive.open { + max-height: 45vh; + overflow: auto; + transition: max-height 0.2s ease-in-out; + } + + div.contents .toc a, div.contents .toc a.active { + color: var(--primary-color) !important; + } + + div.contents .toc a:hover { + text-decoration: underline; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + + .contents > div.fragment, + .textblock > div.fragment, + .textblock > pre.fragment, + .textblock > .tabbed > ul > li > div.fragment, + .textblock > .tabbed > ul > li > pre.fragment, + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .tabbed > ul > li > .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + border-left: 0; + } + + .textblock li > .fragment, + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment, + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .textblock ul, .memdoc ul { + overflow: initial; + } + + .memdoc > div.fragment, + .memdoc > pre.fragment, + dl dd > div.fragment, + dl dd pre.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + border-left: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment > .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); + background-color: var(--fragment-linenumber-background) !important; +} + +div.line { + border-radius: var(--border-radius-small); +} + +div.line.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note, dl.remark { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-dark); +} + +dl.todo { + background: var(--todo-color); + border-left: 8px solid var(--todo-color-dark); + color: var(--todo-color-darker); +} + +dl.todo dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-dark); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); + box-shadow: var(--box-shadow); +} + +h2.memtitle { + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); +} + +div.memitem { + transition: none; +} + +div.memproto, h2.memtitle { + background: var(--fragment-background); +} + +h2.memtitle { + font-weight: 500; + font-size: var(--memtitle-font-size); + font-family: var(--font-family-monospace); + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; + position: relative; +} + +h2.memtitle:after { + content: ""; + display: block; + background: var(--fragment-background); + height: var(--spacing-medium); + bottom: calc(0px - var(--spacing-medium)); + left: 0; + right: -14px; + position: absolute; + border-top-right-radius: var(--border-radius-medium); +} + +h2.memtitle > span.permalink { + font-size: inherit; +} + +h2.memtitle > span.permalink > a { + text-decoration: none; + padding-left: 3px; + margin-right: -4px; + user-select: none; + display: inline-block; + margin-top: -6px; +} + +h2.memtitle > span.permalink > a:hover { + color: var(--primary-dark-color) !important; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: var(--font-family-monospace); + color: var(--page-foreground-color); + font-size: var(--memname-font-size); + text-shadow: none; +} + +div.memproto div.memtemplate { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--memname-font-size); + margin-left: 2px; + text-shadow: none; +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +td.mlabels-right { + margin-top: 3px; + position: sticky; + left: 0; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: inline-block; + max-width: 100%; +} + +.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); +} + +table.fieldtable, +table.markdownTable tbody, +table.doxtable tbody { + border: none; + margin: var(--spacing-medium) 0; + box-shadow: 0 0 0 1px var(--separator-color); + border-radius: var(--border-radius-small); +} + +table.markdownTable, table.doxtable, table.fieldtable { + padding: 1px; +} + +table.doxtable caption { + display: block; +} + +table.fieldtable { + border-collapse: collapse; + width: 100%; +} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone, +table.doxtable th { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +th.markdownTableHeadLeft:first-child, +th.markdownTableHeadRight:first-child, +th.markdownTableHeadCenter:first-child, +th.markdownTableHeadNone:first-child, +table.doxtable tr th:first-child { + border-top-left-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft:last-child, +th.markdownTableHeadRight:last-child, +th.markdownTableHeadCenter:last-child, +th.markdownTableHeadNone:last-child, +table.doxtable tr th:last-child { + border-top-right-radius: var(--border-radius-small); +} + +table.markdownTable td, +table.markdownTable th, +table.fieldtable td, +table.fieldtable th, +table.doxtable td, +table.doxtable th { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.markdownTable td:last-child, +table.markdownTable th:last-child, +table.fieldtable td:last-child, +table.fieldtable th:last-child, +table.doxtable td:last-child, +table.doxtable th:last-child { + border-right: none; +} + +table.markdownTable td:first-child, +table.markdownTable th:first-child, +table.fieldtable td:first-child, +table.fieldtable th:first-child, +table.doxtable td:first-child, +table.doxtable th:first-child { + border-left: none; +} + +table.markdownTable tr:first-child td, +table.markdownTable tr:first-child th, +table.fieldtable tr:first-child td, +table.fieldtable tr:first-child th, +table.doxtable tr:first-child td, +table.doxtable tr:first-child th { + border-top: none; +} + +table.markdownTable tr:last-child td, +table.markdownTable tr:last-child th, +table.fieldtable tr:last-child td, +table.fieldtable tr:last-child th, +table.doxtable tr:last-child td, +table.doxtable tr:last-child th { + border-bottom: none; +} + +table.markdownTable tr, table.doxtable tr { + border-bottom: 1px solid var(--separator-color); +} + +table.markdownTable tr:last-child, table.doxtable tr:last-child { + border-bottom: none; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { + display: block; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: table; + width: 100%; +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); +} + +table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit, .fieldtable td.fielddoc, .fieldtable th { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +table.fieldtable tr:last-child td:first-child { + border-bottom-left-radius: var(--border-radius-small); +} + +table.fieldtable tr:last-child td:last-child { + border-bottom-right-radius: var(--border-radius-small); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +table.memberdecls { + display: block; + -webkit-tap-highlight-color: transparent; +} + +table.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); +} + +table.memberdecls tr[class^='memitem'] .memTemplParams { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + color: var(--primary-dark-color); + white-space: normal; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memItemRight, +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight, +table.memberdecls .memTemplParams { + transition: none; + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + background-color: var(--fragment-background); +} + +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight { + padding-top: 2px; +} + +table.memberdecls .memTemplParams { + border-bottom: 0; + border-left: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding-bottom: var(--spacing-small); +} + +table.memberdecls .memTemplItemLeft { + border-radius: 0 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + border-top: 0; +} + +table.memberdecls .memTemplItemRight { + border-radius: 0 0 var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-left: 0; + border-top: 0; +} + +table.memberdecls .memItemLeft { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + padding-left: var(--spacing-medium); + padding-right: 0; +} + +table.memberdecls .memItemRight { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-right: var(--spacing-medium); + padding-left: 0; + +} + +table.memberdecls .mdescLeft, table.memberdecls .mdescRight { + background: none; + color: var(--page-foreground-color); + padding: var(--spacing-small) 0; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memTemplItemLeft { + padding-right: var(--spacing-medium); +} + +table.memberdecls .memSeparator { + background: var(--page-background-color); + height: var(--spacing-large); + border: 0; + transition: none; +} + +table.memberdecls .groupheader { + margin-bottom: var(--spacing-large); +} + +table.memberdecls .inherit_header td { + padding: 0 0 var(--spacing-medium) 0; + text-indent: -12px; + color: var(--page-secondary-foreground-color); +} + +table.memberdecls img[src="closed.png"], +table.memberdecls img[src="open.png"], +div.dynheader img[src="open.png"], +div.dynheader img[src="closed.png"] { + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + margin-top: 8px; + display: block; + float: left; + margin-left: -10px; + transition: transform var(--animation-duration) ease-out; +} + +table.memberdecls img { + margin-right: 10px; +} + +table.memberdecls img[src="closed.png"], +div.dynheader img[src="closed.png"] { + transform: rotate(-90deg); + +} + +.compoundTemplParams { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--code-font-size); +} + +@media screen and (max-width: 767px) { + + table.memberdecls .memItemLeft, + table.memberdecls .memItemRight, + table.memberdecls .mdescLeft, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemLeft, + table.memberdecls .memTemplItemRight, + table.memberdecls .memTemplParams { + display: block; + text-align: left; + padding-left: var(--spacing-large); + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); + border-right: none; + border-left: none; + border-radius: 0; + white-space: normal; + } + + table.memberdecls .memItemLeft, + table.memberdecls .mdescLeft, + table.memberdecls .memTemplItemLeft { + border-bottom: 0; + padding-bottom: 0; + } + + table.memberdecls .memTemplItemLeft { + padding-top: 0; + } + + table.memberdecls .mdescLeft { + margin-bottom: calc(0px - var(--page-font-size)); + } + + table.memberdecls .memItemRight, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemRight { + border-top: 0; + padding-top: 0; + padding-right: var(--spacing-large); + overflow-x: auto; + } + + table.memberdecls tr[class^='memitem']:not(.inherit) { + display: block; + width: calc(100vw - 2 * var(--spacing-large)); + } + + table.memberdecls .mdescRight { + color: var(--page-foreground-color); + } + + table.memberdecls tr.inherit { + visibility: hidden; + } + + table.memberdecls tr[style="display: table-row;"] { + display: block !important; + visibility: visible; + width: calc(100vw - 2 * var(--spacing-large)); + animation: fade .5s; + } + + @keyframes fade { + 0% { + opacity: 0; + max-height: 0; + } + + 100% { + opacity: 1; + max-height: 200px; + } + } +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + height: 1px; + background-color: var(--separator-color); + border: 0; +} + +.contents hr { + box-shadow: 100px 0 var(--separator-color), + -100px 0 var(--separator-color), + 500px 0 var(--separator-color), + -500px 0 var(--separator-color), + 900px 0 var(--separator-color), + -900px 0 var(--separator-color), + 1400px 0 var(--separator-color), + -1400px 0 var(--separator-color), + 1900px 0 var(--separator-color), + -1900px 0 var(--separator-color); +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +@media screen and (max-width: 767px) { + .contents .dyncontent > .center, .contents > center { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); + } +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; + width: 100%; +} + +table.directory td.entry, table.directory td.desc { + padding: calc(var(--spacing-small) / 2) var(--spacing-small); + line-height: var(--table-line-height); +} + +table.directory tr.even td:last-child { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; +} + +table.directory tr.even td:first-child { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); +} + +table.directory tr.even:last-child td:last-child { + border-radius: 0 var(--border-radius-small) 0 0; +} + +table.directory tr.even:last-child td:first-child { + border-radius: var(--border-radius-small) 0 0 0; +} + +table.directory td.desc { + min-width: 250px; +} + +table.directory tr.even { + background-color: var(--odd-color); +} + +table.directory tr.odd { + background-color: transparent; +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + border-radius: var(--border-radius-small); + font-size: var(--page-font-size); + padding: calc(var(--page-font-size) / 5); + line-height: var(--page-font-size); + transform: scale(0.8); + height: auto; + width: var(--page-font-size); + user-select: none; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; + height: var(--table-line-height); +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +.classindex dl.even { + background-color: transparent; +} + +/* + Class Index Doxygen 1.8 +*/ + +table.classindex { + margin-left: 0; + margin-right: 0; + width: 100%; +} + +table.classindex table div.ah { + background-image: none; + background-color: initial; + border-color: var(--separator-color); + color: var(--page-foreground-color); + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-large); + padding: var(--spacing-small); +} + +div.qindex { + background-color: var(--odd-color); + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + padding: var(--spacing-small) 0; +} + +/* + Footer and nav-path + */ + +#nav-path { + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + border-bottom: 0; + box-shadow: 0 0.75px 0 var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + color: var(--page-secondary-foreground-color); + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +.navpath li.navelem b { + color: var(--primary-dark-color); + font-weight: 500; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Scrollbars for Webkit +*/ + +#nav-tree::-webkit-scrollbar, +div.fragment::-webkit-scrollbar, +pre.fragment::-webkit-scrollbar, +div.memproto::-webkit-scrollbar, +.contents center::-webkit-scrollbar, +.contents .center::-webkit-scrollbar, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, +div.contents .toc::-webkit-scrollbar, +.contents .dotgraph::-webkit-scrollbar, +.contents .tabs-overview-container::-webkit-scrollbar { + background: transparent; + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb, +div.memproto::-webkit-scrollbar-thumb, +.contents center::-webkit-scrollbar-thumb, +.contents .center::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, +div.contents .toc::-webkit-scrollbar-thumb, +.contents .dotgraph::-webkit-scrollbar-thumb, +.contents .tabs-overview-container::-webkit-scrollbar-thumb { + background-color: transparent; + border: var(--webkit-scrollbar-padding) solid transparent; + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb, +div.memproto:hover::-webkit-scrollbar-thumb, +.contents center:hover::-webkit-scrollbar-thumb, +.contents .center:hover::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, +div.contents .toc:hover::-webkit-scrollbar-thumb, +.contents .dotgraph:hover::-webkit-scrollbar-thumb, +.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { + background-color: var(--webkit-scrollbar-color); +} + +#nav-tree::-webkit-scrollbar-track, +div.fragment::-webkit-scrollbar-track, +pre.fragment::-webkit-scrollbar-track, +div.memproto::-webkit-scrollbar-track, +.contents center::-webkit-scrollbar-track, +.contents .center::-webkit-scrollbar-track, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, +div.contents .toc::-webkit-scrollbar-track, +.contents .dotgraph::-webkit-scrollbar-track, +.contents .tabs-overview-container::-webkit-scrollbar-track { + background: transparent; +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--side-nav-background); +} + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + overflow-x: auto; + overflow-x: overlay; +} + +#nav-tree { + overflow-x: auto; + overflow-y: auto; + overflow-y: overlay; +} + +/* + Scrollbars for Firefox +*/ + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc, +.contents .dotgraph, +.contents .tabs-overview-container { + scrollbar-width: thin; +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + display: inline-block; + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + border-radius: var(--searchbar-height); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + cursor: pointer; +} + +doxygen-awesome-dark-mode-toggle > svg { + transition: transform var(--animation-duration) ease-in-out; +} + +doxygen-awesome-dark-mode-toggle:active > svg { + transform: scale(.5); +} + +doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.03); +} + +html.dark-mode doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.18); +} + +/* + Optional fragment copy button +*/ +.doxygen-awesome-fragment-wrapper { + position: relative; +} + +doxygen-awesome-fragment-copy-button { + opacity: 0; + background: var(--fragment-background); + width: 28px; + height: 28px; + position: absolute; + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + border: 1px solid var(--fragment-foreground); + cursor: pointer; + border-radius: var(--border-radius-small); + display: flex; + justify-content: center; + align-items: center; +} + +.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { + opacity: .28; +} + +doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { + opacity: 1 !important; +} + +doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { + transform: scale(.91); +} + +doxygen-awesome-fragment-copy-button svg { + fill: var(--fragment-foreground); + width: 18px; + height: 18px; +} + +doxygen-awesome-fragment-copy-button.success svg { + fill: rgb(14, 168, 14); +} + +doxygen-awesome-fragment-copy-button.success { + border-color: rgb(14, 168, 14); +} + +@media screen and (max-width: 767px) { + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { + right: 0; + } +} + +/* + Optional paragraph link button +*/ + +a.anchorlink { + font-size: 90%; + margin-left: var(--spacing-small); + color: var(--page-foreground-color) !important; + text-decoration: none; + opacity: .15; + display: none; + transition: opacity var(--animation-duration) ease-in-out, color var(--animation-duration) ease-in-out; +} + +a.anchorlink svg { + fill: var(--page-foreground-color); +} + +h3 a.anchorlink svg, h4 a.anchorlink svg { + margin-bottom: -3px; + margin-top: -4px; +} + +a.anchorlink:hover { + opacity: .45; +} + +h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { + display: inline-block; +} + +/* + Optional tab feature +*/ + +.tabbed > ul { + padding-inline-start: 0px; + margin: 0; + padding: var(--spacing-small) 0; +} + +.tabbed > ul > li { + display: none; +} + +.tabbed > ul > li.selected { + display: block; +} + +.tabs-overview-container { + overflow-x: auto; + display: block; + overflow-y: visible; +} + +.tabs-overview { + border-bottom: 1px solid var(--separator-color); + display: flex; + flex-direction: row; +} + +@media screen and (max-width: 767px) { + .tabs-overview-container { + margin: 0 calc(0px - var(--spacing-large)); + } + .tabs-overview { + padding: 0 var(--spacing-large) + } +} + +.tabs-overview button.tab-button { + color: var(--page-foreground-color); + margin: 0; + border: none; + background: transparent; + padding: calc(var(--spacing-large) / 2) 0; + display: inline-block; + font-size: var(--page-font-size); + cursor: pointer; + box-shadow: 0 1px 0 0 var(--separator-color); + position: relative; + + -webkit-tap-highlight-color: transparent; +} + +.tabs-overview button.tab-button .tab-title::before { + display: block; + content: attr(title); + font-weight: 600; + height: 0; + overflow: hidden; + visibility: hidden; +} + +.tabs-overview button.tab-button .tab-title { + float: left; + white-space: nowrap; + font-weight: normal; + padding: calc(var(--spacing-large) / 2) var(--spacing-large); + border-radius: var(--border-radius-medium); + transition: background-color var(--animation-duration) ease-in-out, font-weight var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button:not(:last-child) .tab-title { + box-shadow: 8px 0 0 -7px var(--separator-color); +} + +.tabs-overview button.tab-button:hover .tab-title { + background: var(--separator-color); + box-shadow: none; +} + +.tabs-overview button.tab-button.active .tab-title { + font-weight: 600; +} + +.tabs-overview button.tab-button::after { + content: ''; + display: block; + position: absolute; + left: 0; + bottom: 0; + right: 0; + height: 0; + width: 0%; + margin: 0 auto; + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + background-color: var(--primary-color); + transition: width var(--animation-duration) ease-in-out, height var(--animation-duration) ease-in-out; +} + +.tabs-overview button.tab-button.active::after { + width: 100%; + box-sizing: border-box; + height: 3px; +} + + +/* + Navigation Buttons +*/ + +.section_buttons:not(:empty) { + margin-top: calc(var(--spacing-large) * 3); +} + +.section_buttons table.markdownTable { + display: block; + width: 100%; +} + +.section_buttons table.markdownTable tbody { + display: table !important; + width: 100%; + box-shadow: none; + border-spacing: 10px; +} + +.section_buttons table.markdownTable td { + padding: 0; +} + +.section_buttons table.markdownTable th { + display: none; +} + +.section_buttons table.markdownTable tr.markdownTableHead { + border: none; +} + +.section_buttons tr th, .section_buttons tr td { + background: none; + border: none; + padding: var(--spacing-large) 0 var(--spacing-small); +} + +.section_buttons a { + display: inline-block; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + color: var(--page-secondary-foreground-color) !important; + text-decoration: none; + transition: color var(--animation-duration) ease-in-out, background-color var(--animation-duration) ease-in-out; +} + +.section_buttons a:hover { + color: var(--page-foreground-color) !important; + background-color: var(--odd-color); +} + +.section_buttons tr td.markdownTableBodyLeft a { + padding: var(--spacing-medium) var(--spacing-large) var(--spacing-medium) calc(var(--spacing-large) / 2); +} + +.section_buttons tr td.markdownTableBodyRight a { + padding: var(--spacing-medium) calc(var(--spacing-large) / 2) var(--spacing-medium) var(--spacing-large); +} + +.section_buttons tr td.markdownTableBodyLeft a::before, +.section_buttons tr td.markdownTableBodyRight a::after { + color: var(--page-secondary-foreground-color) !important; + display: inline-block; + transition: color .08s ease-in-out, transform .09s ease-in-out; +} + +.section_buttons tr td.markdownTableBodyLeft a::before { + content: '〈'; + padding-right: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyRight a::after { + content: '〉'; + padding-left: var(--spacing-large); +} + + +.section_buttons tr td.markdownTableBodyLeft a:hover::before { + color: var(--page-foreground-color) !important; + transform: translateX(-3px); +} + +.section_buttons tr td.markdownTableBodyRight a:hover::after { + color: var(--page-foreground-color) !important; + transform: translateX(3px); +} + +@media screen and (max-width: 450px) { + .section_buttons a { + width: 100%; + box-sizing: border-box; + } + + .section_buttons tr td:nth-of-type(1).markdownTableBodyLeft a { + border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); + border-right: none; + } + + .section_buttons tr td:nth-of-type(2).markdownTableBodyRight a { + border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; + } +} diff --git a/docs/doxygen.css b/docs/doxygen.css new file mode 100644 index 0000000..90fba19 --- /dev/null +++ b/docs/doxygen.css @@ -0,0 +1,1849 @@ +/* The standard CSS for doxygen 1.13.2*/ + +body { + background-color: white; + color: black; +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: Roboto,sans-serif; + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: white; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : #F9FAFC; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid #C4CFE5; + border-radius: 4px; + background-color: #FBFCFD; + color: black; +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: hidden; + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid black; + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .4; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: #2EC82E; +} + +.clipboard.success { + border-color: #2EC82E; +} + +div.line { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #00FF00; + color: black; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: #4665A2; + background-color: #D8D8D8; +} + +span.lineno a:hover { + color: #4665A2; + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: 104px; +} + +.compoundTemplParams { + color: #4665A2; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #E08000; +} + +span.comment { + color: #800000; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: #008080; +} + +span.xmlcdata { + color: black; +} + +span.vhdldigit { + color: #FF00FF; +} + +span.vhdlchar { + color: #000000; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: #FF0000; +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #2D4068; +} + +th.dirtab { + background-color: #374F7F; + color: #FFFFFF; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: white; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: #602020; + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: #F8F9FC; +} + +.directory tr.even { + padding-left: 6px; + background-color: white; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial,Helvetica; + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.svg'); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.svg'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#283A5D; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: #2A3D61; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: #f8d1cc; + border-left: 8px solid #b61825; + color: #75070f; +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: #b61825; +} + +dl.note, dl.remark { + background: #faf3d8; + border-left: 8px solid #f3a600; + color: #5f4204; +} + +dl.note dt, dl.remark dt { + color: #f3a600; +} + +dl.todo { + background: #e4f3ff; + border-left: 8px solid #1879C4; + color: #274a5c; +} + +dl.todo dt { + color: #1879C4; +} + +dl.test { + background: #e8e8ff; + border-left: 8px solid #3939C4; + color: #1a1a5c; +} + +dl.test dt { + color: #3939C4; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.bug { + background: #e4dafd; + border-left: 8px solid #5b2bdd; + color: #2a0d72; +} + +dl.bug dt a { + color: #5b2bdd !important; +} + +dl.deprecated { + background: #ecf0f3; + border-left: 8px solid #5b6269; + color: #43454a; +} + +dl.deprecated dt a { + color: #5b6269 !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: #d8f1e3; + border-left: 8px solid #44b86f; + color: #265532; +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: #44b86f; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#side-nav #projectname +{ + font-size: 130%; +} + +#projectbrief +{ + font-size: 90%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; + background-color: white; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("data:image/svg+xml;utf8,&%238595;") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: black; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: #4665A2; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: Roboto,sans-serif; + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: white; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: gray; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: white; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: gray; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd +{ + display: inline-block; +} +tt, code, kbd +{ + vertical-align: top; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/docs/doxygen.svg b/docs/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/docs/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/doxygen_crawl.html b/docs/doxygen_crawl.html new file mode 100644 index 0000000..b97c98b --- /dev/null +++ b/docs/doxygen_crawl.html @@ -0,0 +1,380 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/dynsections.js b/docs/dynsections.js new file mode 100644 index 0000000..3cc426a --- /dev/null +++ b/docs/dynsections.js @@ -0,0 +1,198 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ diff --git a/docs/files.html b/docs/files.html new file mode 100644 index 0000000..b381d9f --- /dev/null +++ b/docs/files.html @@ -0,0 +1,131 @@ + + + + + + + +signals-cpp: File List + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
[detail level 123]
+ + + + + + + + +
  include
  signals
 Integration.h
 Models.h
 Signal.h
 Signals.h
 State.h
 Utils.h
+
+
+
+ + + + diff --git a/docs/files_dup.js b/docs/files_dup.js new file mode 100644 index 0000000..f1749d9 --- /dev/null +++ b/docs/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ] +]; \ No newline at end of file diff --git a/docs/folderclosed.svg b/docs/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/docs/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/folderclosedd.svg b/docs/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/docs/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/docs/folderopen.svg b/docs/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/docs/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/docs/folderopend.svg b/docs/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/docs/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs/functions.html b/docs/functions.html new file mode 100644 index 0000000..d9de84c --- /dev/null +++ b/docs/functions.html @@ -0,0 +1,236 @@ + + + + + + + +signals-cpp: Class Members + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- b -

+ + +

- d -

+ + +

- e -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- j -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- x -

+ + +

- z -

+
+
+ + + + diff --git a/docs/functions_func.html b/docs/functions_func.html new file mode 100644 index 0000000..c8e1226 --- /dev/null +++ b/docs/functions_func.html @@ -0,0 +1,185 @@ + + + + + + + +signals-cpp: Class Members - Functions + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- d -

+ + +

- h -

+ + +

- i -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- z -

+
+
+ + + + diff --git a/docs/functions_rela.html b/docs/functions_rela.html new file mode 100644 index 0000000..9a9a12d --- /dev/null +++ b/docs/functions_rela.html @@ -0,0 +1,121 @@ + + + + + + + +signals-cpp: Class Members - Related Symbols + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all related symbols with links to the classes they belong to:
+
+
+ + + + diff --git a/docs/functions_type.html b/docs/functions_type.html new file mode 100644 index 0000000..9c7856a --- /dev/null +++ b/docs/functions_type.html @@ -0,0 +1,149 @@ + + + + + + + +signals-cpp: Class Members - Typedefs + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all typedefs with links to the classes they belong to:
+ +

- b -

+ + +

- i -

+ + +

- p -

+ + +

- s -

+ + +

- t -

+
+
+ + + + diff --git a/docs/functions_vars.html b/docs/functions_vars.html new file mode 100644 index 0000000..ff7b65c --- /dev/null +++ b/docs/functions_vars.html @@ -0,0 +1,130 @@ + + + + + + + +signals-cpp: Class Members - Variables + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/globals.html b/docs/globals.html new file mode 100644 index 0000000..7541269 --- /dev/null +++ b/docs/globals.html @@ -0,0 +1,311 @@ + + + + + + + +signals-cpp: File Members + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+ + +

- z -

+
+
+ + + + diff --git a/docs/globals_defs.html b/docs/globals_defs.html new file mode 100644 index 0000000..3facc82 --- /dev/null +++ b/docs/globals_defs.html @@ -0,0 +1,124 @@ + + + + + + + +signals-cpp: File Members + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all macros with links to the files they belong to:
+
+
+ + + + diff --git a/docs/globals_enum.html b/docs/globals_enum.html new file mode 100644 index 0000000..08bda5a --- /dev/null +++ b/docs/globals_enum.html @@ -0,0 +1,121 @@ + + + + + + + +signals-cpp: File Members + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all enums with links to the files they belong to:
+
+
+ + + + diff --git a/docs/globals_eval.html b/docs/globals_eval.html new file mode 100644 index 0000000..0e3315f --- /dev/null +++ b/docs/globals_eval.html @@ -0,0 +1,126 @@ + + + + + + + +signals-cpp: File Members + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all enum values with links to the files they belong to:
+
+
+ + + + diff --git a/docs/globals_func.html b/docs/globals_func.html new file mode 100644 index 0000000..a46a526 --- /dev/null +++ b/docs/globals_func.html @@ -0,0 +1,123 @@ + + + + + + + +signals-cpp: File Members + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the files they belong to:
+
+
+ + + + diff --git a/docs/globals_type.html b/docs/globals_type.html new file mode 100644 index 0000000..a589281 --- /dev/null +++ b/docs/globals_type.html @@ -0,0 +1,257 @@ + + + + + + + +signals-cpp: File Members + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all typedefs with links to the files they belong to:
+ +

- e -

+ + +

- m -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+
+
+ + + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..ec4f1ba --- /dev/null +++ b/docs/index.html @@ -0,0 +1,140 @@ + + + + + + + +signals-cpp: signals-cpp Library Documentation + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
signals-cpp +
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
signals-cpp Library Documentation
+
+
+

+Introduction

+

Header-only templated C++ library implementing rigid-body dynamics, derivatives, integrals, and interpolation.

+

The key class definitions in this library from which all specialized types are derived are:

+ +

+Installation

+

This code is meant to be built as a static library with CMake. It should be compatible with the latest versions of Eigen and Boost (unit test framework only). The library manif-geom-cpp must also be installed.

+

Install with

+
mkdir build
+
cd build
+
cmake ..
+
make # or make install
+

By default, building will also build and run the unit tests, but this can be turned off with the CMake option BUILD_TESTS.

+
+ +
+
+ + + + diff --git a/docs/index.js b/docs/index.js new file mode 100644 index 0000000..4f936bd --- /dev/null +++ b/docs/index.js @@ -0,0 +1,5 @@ +var index = +[ + [ "Introduction", "index.html#intro_sec", null ], + [ "Installation", "index.html#install", null ] +]; \ No newline at end of file diff --git a/docs/jquery.js b/docs/jquery.js new file mode 100644 index 0000000..875ada7 --- /dev/null +++ b/docs/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/docs/menu.js b/docs/menu.js new file mode 100644 index 0000000..0fd1e99 --- /dev/null +++ b/docs/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/docs/menudata.js b/docs/menudata.js new file mode 100644 index 0000000..d7fe4ec --- /dev/null +++ b/docs/menudata.js @@ -0,0 +1,102 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html"}, +{text:"Functions",url:"namespacemembers_func.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"b",url:"functions.html#index_b"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"g",url:"functions.html#index_g"}, +{text:"h",url:"functions.html#index_h"}, +{text:"i",url:"functions.html#index_i"}, +{text:"j",url:"functions.html#index_j"}, +{text:"m",url:"functions.html#index_m"}, +{text:"n",url:"functions.html#index_n"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}, +{text:"x",url:"functions.html#index_x"}, +{text:"z",url:"functions.html#index_z"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"d",url:"functions_func.html#index_d"}, +{text:"h",url:"functions_func.html#index_h"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"m",url:"functions_func.html#index_m"}, +{text:"n",url:"functions_func.html#index_n"}, +{text:"o",url:"functions_func.html#index_o"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"u",url:"functions_func.html#index_u"}, +{text:"z",url:"functions_func.html#index_z"}]}, +{text:"Variables",url:"functions_vars.html"}, +{text:"Typedefs",url:"functions_type.html",children:[ +{text:"b",url:"functions_type.html#index_b"}, +{text:"i",url:"functions_type.html#index_i"}, +{text:"p",url:"functions_type.html#index_p"}, +{text:"s",url:"functions_type.html#index_s"}, +{text:"t",url:"functions_type.html#index_t"}]}, +{text:"Related Symbols",url:"functions_rela.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"c",url:"globals.html#index_c"}, +{text:"d",url:"globals.html#index_d"}, +{text:"e",url:"globals.html#index_e"}, +{text:"f",url:"globals.html#index_f"}, +{text:"i",url:"globals.html#index_i"}, +{text:"l",url:"globals.html#index_l"}, +{text:"m",url:"globals.html#index_m"}, +{text:"n",url:"globals.html#index_n"}, +{text:"o",url:"globals.html#index_o"}, +{text:"r",url:"globals.html#index_r"}, +{text:"s",url:"globals.html#index_s"}, +{text:"t",url:"globals.html#index_t"}, +{text:"v",url:"globals.html#index_v"}, +{text:"z",url:"globals.html#index_z"}]}, +{text:"Functions",url:"globals_func.html"}, +{text:"Typedefs",url:"globals_type.html",children:[ +{text:"e",url:"globals_type.html#index_e"}, +{text:"m",url:"globals_type.html#index_m"}, +{text:"r",url:"globals_type.html#index_r"}, +{text:"s",url:"globals_type.html#index_s"}, +{text:"t",url:"globals_type.html#index_t"}, +{text:"v",url:"globals_type.html#index_v"}]}, +{text:"Enumerations",url:"globals_enum.html"}, +{text:"Enumerator",url:"globals_eval.html"}, +{text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/docs/minus.svg b/docs/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/docs/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/minusd.svg b/docs/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/docs/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html new file mode 100644 index 0000000..1400bf1 --- /dev/null +++ b/docs/namespacemembers.html @@ -0,0 +1,119 @@ + + + + + + + +signals-cpp: Namespace Members + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all namespace members with links to the namespace documentation for each member:
    +
    +
    + + + + diff --git a/docs/namespacemembers_func.html b/docs/namespacemembers_func.html new file mode 100644 index 0000000..15a68cb --- /dev/null +++ b/docs/namespacemembers_func.html @@ -0,0 +1,119 @@ + + + + + + + +signals-cpp: Namespace Members + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all namespace functions with links to the namespace documentation for each function:
    +
    +
    + + + + diff --git a/docs/namespaces.html b/docs/namespaces.html new file mode 100644 index 0000000..aa7d73d --- /dev/null +++ b/docs/namespaces.html @@ -0,0 +1,124 @@ + + + + + + + +signals-cpp: Namespace List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Namespace List
    +
    +
    +
    Here is a list of all namespaces with brief descriptions:
    + + +
     Nsignal_utils
    +
    +
    +
    + + + + diff --git a/docs/namespaces_dup.js b/docs/namespaces_dup.js new file mode 100644 index 0000000..78e9c45 --- /dev/null +++ b/docs/namespaces_dup.js @@ -0,0 +1,6 @@ +var namespaces_dup = +[ + [ "signal_utils", "namespacesignal__utils.html", [ + [ "getTimeDelta", "namespacesignal__utils.html#ad7667542f893604d059a5d0022d2890c", null ] + ] ] +]; \ No newline at end of file diff --git a/docs/namespacesignal__utils.html b/docs/namespacesignal__utils.html new file mode 100644 index 0000000..cd280cb --- /dev/null +++ b/docs/namespacesignal__utils.html @@ -0,0 +1,168 @@ + + + + + + + +signals-cpp: signal_utils Namespace Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    signal_utils Namespace Reference
    +
    +
    + + + + +

    +Functions

    bool getTimeDelta (double &dt, const double &t0, const double &tf, const double &dt_max=std::numeric_limits< double >::max())
     
    +

    Function Documentation

    + +

    ◆ getTimeDelta()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    bool signal_utils::getTimeDelta (double & dt,
    const double & t0,
    const double & tf,
    const double & dt_max = std::numeric_limits<double>::max() )
    +
    +inline
    +
    + +
    +
    +
    +
    + + + + diff --git a/docs/nav_f.png b/docs/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/docs/nav_f.png differ diff --git a/docs/nav_fd.png b/docs/nav_fd.png new file mode 100644 index 0000000..032fbdd Binary files /dev/null and b/docs/nav_fd.png differ diff --git a/docs/nav_g.png b/docs/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/docs/nav_g.png differ diff --git a/docs/nav_h.png b/docs/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/docs/nav_h.png differ diff --git a/docs/nav_hd.png b/docs/nav_hd.png new file mode 100644 index 0000000..de80f18 Binary files /dev/null and b/docs/nav_hd.png differ diff --git a/docs/navtree.css b/docs/navtree.css new file mode 100644 index 0000000..6b1e5e4 --- /dev/null +++ b/docs/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree .selected .arrow { + color: #9CAFD4; + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:white; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url('splitbar.png'); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/docs/navtree.js b/docs/navtree.js new file mode 100644 index 0000000..2d4fa84 --- /dev/null +++ b/docs/navtree.js @@ -0,0 +1,483 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initNavTree(toroot,relpath) { + let navTreeSubIndices = []; + const ARROW_DOWN = '▼'; + const ARROW_RIGHT = '►'; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/-/g,'_')); + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=ARROW_RIGHT; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.offset().top; + } else if (anchor.position()) { + pos = anchor.offset().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + }); + } + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + label : document.createTextNode(text), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(node.label); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+11 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + + + diff --git a/docs/plusd.svg b/docs/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/docs/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/resize.js b/docs/resize.js new file mode 100644 index 0000000..178d03b --- /dev/null +++ b/docs/resize.js @@ -0,0 +1,147 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + // workaround for firefox + $("body").css({overflow: "hidden"}); + } + $(window).on('load',function() { resizeHeight(treeview); }); +} +/* @license-end */ diff --git a/docs/search/all_0.js b/docs/search/all_0.js new file mode 100644 index 0000000..69511a9 --- /dev/null +++ b/docs/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['basetype_0',['BaseType',['../classSignal.html#a9bda97fe7663f5481807259ca8bcd8cb',1,'Signal']]] +]; diff --git a/docs/search/all_1.js b/docs/search/all_1.js new file mode 100644 index 0000000..3c805ba --- /dev/null +++ b/docs/search/all_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['closest_0',['CLOSEST',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4a901e715f86c693ccd2851e8c0b64cca3',1,'Signal.h']]], + ['cpp_20library_20documentation_1',['signals-cpp Library Documentation',['../index.html',1,'']]], + ['cubic_5fspline_2',['CUBIC_SPLINE',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284a13480ea7779c90806a9fa4ef70322ebc',1,'Signal.h']]] +]; diff --git a/docs/search/all_10.js b/docs/search/all_10.js new file mode 100644 index 0000000..4da5f2c --- /dev/null +++ b/docs/search/all_10.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['t_0',['t',['../structSignal_1_1SignalDP.html#ac9d0651b25c9bcf14fcfc65a32fcfa86',1,'Signal::SignalDP::t'],['../classModel.html#a7661852411b9ffd59240d5d5ca0e4dd3',1,'Model::t()'],['../classSignal.html#a058783faf86f369b296c50d4e72c0881',1,'Signal::t() const']]], + ['tangenttype_1',['TangentType',['../classSignal.html#aa0094b1c69fd482de9de83b99634996a',1,'Signal']]], + ['translational1dofmodel_2',['Translational1DOFModel',['../Models_8h.html#af9ad4901a092a7e81f8b092d1dbcf5f5',1,'Models.h']]], + ['translational1dofmodeld_3',['Translational1DOFModeld',['../Models_8h.html#ab405c6c48aa770f74c7e942302b956c5',1,'Models.h']]], + ['translational2dofmodel_4',['Translational2DOFModel',['../Models_8h.html#aee5681b9331f5514938a77680e9e1162',1,'Models.h']]], + ['translational2dofmodeld_5',['Translational2DOFModeld',['../Models_8h.html#a7768cd6b33a5d94a677357664052d096',1,'Models.h']]], + ['translational3dofmodel_6',['Translational3DOFModel',['../Models_8h.html#a3d0d9bd06d48c1d0022090b040895a62',1,'Models.h']]], + ['translational3dofmodeld_7',['Translational3DOFModeld',['../Models_8h.html#a3c501b1f5d946eb9aa36b92d2ec611c5',1,'Models.h']]], + ['translationaldynamics1dof_8',['TranslationalDynamics1DOF',['../Models_8h.html#aac436ed3df206f07f93110e3daffe773',1,'Models.h']]], + ['translationaldynamics2dof_9',['TranslationalDynamics2DOF',['../Models_8h.html#ae3889fdff8dd169aef62fcdf6340e0e1',1,'Models.h']]], + ['translationaldynamics3dof_10',['TranslationalDynamics3DOF',['../Models_8h.html#ad1ba77eac61f5da29df59b8b4b0d7a0d',1,'Models.h']]], + ['translationaldynamicsbase_11',['TranslationalDynamicsBase',['../structTranslationalDynamicsBase.html',1,'']]], + ['translationaldynamicsbase_3c_20scalarsignal_3c_20t_20_3e_2c_20scalarstatesignal_3c_20t_20_3e_2c_20scalarstatesignal_3c_20t_20_3e_2c_201_2c_20rigidbodyparams1d_20_3e_12',['TranslationalDynamicsBase< ScalarSignal< T >, ScalarStateSignal< T >, ScalarStateSignal< T >, 1, RigidBodyParams1D >',['../structTranslationalDynamicsBase.html',1,'']]], + ['translationaldynamicsbase_3c_20vector2signal_3c_20t_20_3e_2c_20vector2statesignal_3c_20t_20_3e_2c_20vector2statesignal_3c_20t_20_3e_2c_202_2c_20rigidbodyparams2d_20_3e_13',['TranslationalDynamicsBase< Vector2Signal< T >, Vector2StateSignal< T >, Vector2StateSignal< T >, 2, RigidBodyParams2D >',['../structTranslationalDynamicsBase.html',1,'']]], + ['translationaldynamicsbase_3c_20vector3signal_3c_20t_20_3e_2c_20vector3statesignal_3c_20t_20_3e_2c_20vector3statesignal_3c_20t_20_3e_2c_203_2c_20rigidbodyparams3d_20_3e_14',['TranslationalDynamicsBase< Vector3Signal< T >, Vector3StateSignal< T >, Vector3StateSignal< T >, 3, RigidBodyParams3D >',['../structTranslationalDynamicsBase.html',1,'']]], + ['trapezoidalintegrator_15',['TrapezoidalIntegrator',['../Integration_8h.html#a123a7b32e66b7e1acc68d61a997abc96',1,'Integration.h']]], + ['trapezoidalintegratorspec_16',['TrapezoidalIntegratorSpec',['../structTrapezoidalIntegratorSpec.html',1,'']]], + ['twist_17',['twist',['../structState.html#a3f5fb4275701e71a56d2fa1fb8d54080',1,'State']]], + ['twisttype_18',['TwistType',['../structState.html#ab58b6e2fe6ea3c2777c5a8a92f6665a1',1,'State']]], + ['type_19',['Type',['../structScalarSignalSpec.html#a4a319643aeb76b94214f8b41d64d5402',1,'ScalarSignalSpec::Type'],['../structVectorSignalSpec.html#ac21d15d01635665373eaf23b62f3d440',1,'VectorSignalSpec::Type'],['../structManifoldSignalSpec.html#ae6292debacd46f629429d03cf7e9a342',1,'ManifoldSignalSpec::Type'],['../structScalarStateSignalSpec.html#a7ae52069e3aafdb7c45b14168b1ad11b',1,'ScalarStateSignalSpec::Type'],['../structVectorStateSignalSpec.html#a3994948f467b39ca2dcd77d220a8cf3a',1,'VectorStateSignalSpec::Type'],['../structManifoldStateSignalSpec.html#aef8d411c012125303e1faa1d66b35c1c',1,'ManifoldStateSignalSpec::Type']]] +]; diff --git a/docs/search/all_11.js b/docs/search/all_11.js new file mode 100644 index 0000000..6e3f943 --- /dev/null +++ b/docs/search/all_11.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['update_0',['update',['../structTranslationalDynamicsBase.html#a3f1e02018ec014fe38ba851dc0d5b2ed',1,'TranslationalDynamicsBase::update()'],['../structRotationalDynamics1DOF.html#a433f042fafdcff07948eb952e47f13b6',1,'RotationalDynamics1DOF::update()'],['../structRotationalDynamics3DOF.html#aee5958f7949268650c00097b2a871252',1,'RotationalDynamics3DOF::update()'],['../structRigidBodyDynamics3DOF.html#acafe68f9e9ea78f54bc70d64a1b39d9c',1,'RigidBodyDynamics3DOF::update()'],['../structRigidBodyDynamics6DOF.html#ae0d9bb27da7f804a1f8dc4923546a95d',1,'RigidBodyDynamics6DOF::update()'],['../classSignal.html#ab91f52b80939a6c67b6863ee463b4ff0',1,'Signal::update(const double &_t, const BaseType &_x, bool insertHistory=false)'],['../classSignal.html#a6c7174c9bb20970ebb3de64687f771d8',1,'Signal::update(const double &_t, const BaseType &_x, const TangentType &_xdot, bool insertHistory=false)'],['../classSignal.html#a5530308ef517fd0021f510d47c390dc0',1,'Signal::update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory)'],['../classSignal.html#a74929b7332876f5aeddc9a05d26d3d32',1,'Signal::update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory, const std::vector< TangentType > &_xdotHistory)']]], + ['utils_2eh_1',['Utils.h',['../Utils_8h.html',1,'']]] +]; diff --git a/docs/search/all_12.js b/docs/search/all_12.js new file mode 100644 index 0000000..2fc0aa4 --- /dev/null +++ b/docs/search/all_12.js @@ -0,0 +1,68 @@ +var searchData= +[ + ['vector10dsignal_0',['Vector10dSignal',['../Signal_8h.html#a75b25f1facc38a02d21c155ec05655cc',1,'Signal.h']]], + ['vector10dstate_1',['Vector10dState',['../State_8h.html#ac15f89e56010b705e5a2e0d9c3c50a6d',1,'State.h']]], + ['vector10dstatesignal_2',['Vector10dStateSignal',['../State_8h.html#af22d4a3a8e0b033da1e86fbb86d62025',1,'State.h']]], + ['vector10signal_3',['Vector10Signal',['../Signal_8h.html#acda8904322955c5f969f290bf1a42595',1,'Signal.h']]], + ['vector10state_4',['Vector10State',['../State_8h.html#ae80b1d8972029135f755109d7c9cefcc',1,'State.h']]], + ['vector10statesignal_5',['Vector10StateSignal',['../State_8h.html#a1317973b896b1e34cafa85ed9476facc',1,'State.h']]], + ['vector1dsignal_6',['Vector1dSignal',['../Signal_8h.html#a22bc2b41e336fe6237cfa41ac7b57d0b',1,'Signal.h']]], + ['vector1dstate_7',['Vector1dState',['../State_8h.html#a1fccb71007e0830388d5c21c85e3344e',1,'State.h']]], + ['vector1dstatesignal_8',['Vector1dStateSignal',['../State_8h.html#a62568e2f3d59e51a60168009aa1a54bf',1,'State.h']]], + ['vector1signal_9',['Vector1Signal',['../Signal_8h.html#a532b7bae92d23faa5962b50fab59ee1a',1,'Signal.h']]], + ['vector1state_10',['Vector1State',['../State_8h.html#abc0badbf8fbf6b0c2669496da71cda67',1,'State.h']]], + ['vector1statesignal_11',['Vector1StateSignal',['../State_8h.html#ab5090b8cb9c45dbe82c31d42d73d785e',1,'State.h']]], + ['vector2dsignal_12',['Vector2dSignal',['../Signal_8h.html#a718e737386d2321f3e31df01ffe2fd61',1,'Signal.h']]], + ['vector2dstate_13',['Vector2dState',['../State_8h.html#ae54c0630e02ee333a48fe6531d00e071',1,'State.h']]], + ['vector2dstatesignal_14',['Vector2dStateSignal',['../State_8h.html#a100a0048450baf6c0d0c2f444eccaf8a',1,'State.h']]], + ['vector2signal_15',['Vector2Signal',['../Signal_8h.html#af4c2088cbc0c8f8c95be6f22e990d0d1',1,'Signal.h']]], + ['vector2state_16',['Vector2State',['../State_8h.html#a7f9f341c30868667e4855dbb3092e78d',1,'State.h']]], + ['vector2statesignal_17',['Vector2StateSignal',['../State_8h.html#a8733dc322548a85201a19ddea01ea50e',1,'State.h']]], + ['vector3dsignal_18',['Vector3dSignal',['../Signal_8h.html#addff0c3095fce02a8ae3d8669292ea8a',1,'Signal.h']]], + ['vector3dstate_19',['Vector3dState',['../State_8h.html#a0e9c381070552b28ffb2683b44e7b5a3',1,'State.h']]], + ['vector3dstatesignal_20',['Vector3dStateSignal',['../State_8h.html#a1e20c96461ce98997ef1a3c0ab7b6668',1,'State.h']]], + ['vector3signal_21',['Vector3Signal',['../Signal_8h.html#a59c30838434bb9eabab59a54a0dceb9f',1,'Signal.h']]], + ['vector3state_22',['Vector3State',['../State_8h.html#a76ad6fc3428b4c484c36cb9b24db72f0',1,'State.h']]], + ['vector3statesignal_23',['Vector3StateSignal',['../State_8h.html#ae29a8cc7a8cfe9179c9befa2d9cf217d',1,'State.h']]], + ['vector4dsignal_24',['Vector4dSignal',['../Signal_8h.html#a785560e5ddb26fcf9edc2eb9f34e7ec8',1,'Signal.h']]], + ['vector4dstate_25',['Vector4dState',['../State_8h.html#a8add6ebebc487c439430cb69d2892bbf',1,'State.h']]], + ['vector4dstatesignal_26',['Vector4dStateSignal',['../State_8h.html#a9013e9f17201a38fdb10648f14ea5c95',1,'State.h']]], + ['vector4signal_27',['Vector4Signal',['../Signal_8h.html#a04b5a6ff0c189cb66f0e3137b1362c30',1,'Signal.h']]], + ['vector4state_28',['Vector4State',['../State_8h.html#a7123f01cd05975f377e8ff9e6ee1a06a',1,'State.h']]], + ['vector4statesignal_29',['Vector4StateSignal',['../State_8h.html#a5c328c48320c78070fff7e7982b311e9',1,'State.h']]], + ['vector5dsignal_30',['Vector5dSignal',['../Signal_8h.html#ad0b807d45bcfe07cc9a2f54648dd4821',1,'Signal.h']]], + ['vector5dstate_31',['Vector5dState',['../State_8h.html#a45d6b402de0ba422a815e117b084dde3',1,'State.h']]], + ['vector5dstatesignal_32',['Vector5dStateSignal',['../State_8h.html#a7a8f2f6fd14951fd2fe337c952b0cb74',1,'State.h']]], + ['vector5signal_33',['Vector5Signal',['../Signal_8h.html#a9f0b242918cfdc4b6eaecdeb6574b6cb',1,'Signal.h']]], + ['vector5state_34',['Vector5State',['../State_8h.html#ab5ce046688e9436f8b33892d42309eee',1,'State.h']]], + ['vector5statesignal_35',['Vector5StateSignal',['../State_8h.html#a4af99c5e283d22f79b5556ff27474965',1,'State.h']]], + ['vector6dsignal_36',['Vector6dSignal',['../Signal_8h.html#acb50cf2886559fdfc3aba4ee722f511a',1,'Signal.h']]], + ['vector6dstate_37',['Vector6dState',['../State_8h.html#af07e3586e98f931acac5d0ffd9b17cee',1,'State.h']]], + ['vector6dstatesignal_38',['Vector6dStateSignal',['../State_8h.html#a9df3c94eca5a8200ce96b3221995c46b',1,'State.h']]], + ['vector6signal_39',['Vector6Signal',['../Signal_8h.html#a4da3e39a6224769606055a56f1508e6b',1,'Signal.h']]], + ['vector6state_40',['Vector6State',['../State_8h.html#a5b9da17f6286f92692b0004ee4966bc9',1,'State.h']]], + ['vector6statesignal_41',['Vector6StateSignal',['../State_8h.html#a10d976072ce9070523cb22605d2ab584',1,'State.h']]], + ['vector7dsignal_42',['Vector7dSignal',['../Signal_8h.html#afea76be78e2b329344fb610a62c421e9',1,'Signal.h']]], + ['vector7dstate_43',['Vector7dState',['../State_8h.html#ad58fbc5cd721c46fe64d385cc3317380',1,'State.h']]], + ['vector7dstatesignal_44',['Vector7dStateSignal',['../State_8h.html#a901bd18eae58b6365b68227b38b8a6e1',1,'State.h']]], + ['vector7signal_45',['Vector7Signal',['../Signal_8h.html#ac71cd26f6afca210f51cc394d520779b',1,'Signal.h']]], + ['vector7state_46',['Vector7State',['../State_8h.html#a78b7e325313bda6591c62d59c25b2009',1,'State.h']]], + ['vector7statesignal_47',['Vector7StateSignal',['../State_8h.html#a0e0d0803fd68f9e69ed39bed579c0a8c',1,'State.h']]], + ['vector8dsignal_48',['Vector8dSignal',['../Signal_8h.html#ad2214d5fb3267b191128fcccb515448b',1,'Signal.h']]], + ['vector8dstate_49',['Vector8dState',['../State_8h.html#acfdf1934f5783c1dcab2987c242ef8af',1,'State.h']]], + ['vector8dstatesignal_50',['Vector8dStateSignal',['../State_8h.html#a25968e689d254876cbae1ff352b3f184',1,'State.h']]], + ['vector8signal_51',['Vector8Signal',['../Signal_8h.html#a6fe111909e599c7d732507ef08213e06',1,'Signal.h']]], + ['vector8state_52',['Vector8State',['../State_8h.html#ae8dd0ef45fa5734f0e752551ba62e863',1,'State.h']]], + ['vector8statesignal_53',['Vector8StateSignal',['../State_8h.html#a9b199ed43adea9fec91e40f9bab9457f',1,'State.h']]], + ['vector9dsignal_54',['Vector9dSignal',['../Signal_8h.html#acd349d949f45a7bce633414d05043cc3',1,'Signal.h']]], + ['vector9dstate_55',['Vector9dState',['../State_8h.html#a865c1f4de96010d38ee17edc48d6c611',1,'State.h']]], + ['vector9dstatesignal_56',['Vector9dStateSignal',['../State_8h.html#a0237ae6ced288b7b3853654cd4ce796c',1,'State.h']]], + ['vector9signal_57',['Vector9Signal',['../Signal_8h.html#ae78698ceb51c16ea2ffea1ea2b5507e3',1,'Signal.h']]], + ['vector9state_58',['Vector9State',['../State_8h.html#af1297813c5b5754edb4cf75ca0875849',1,'State.h']]], + ['vector9statesignal_59',['Vector9StateSignal',['../State_8h.html#a9ab7680e24d1538be50e761b8a8ecb21',1,'State.h']]], + ['vectorsignal_60',['VectorSignal',['../Signal_8h.html#a51a32a4dd69ee28867dba6202c812c5a',1,'Signal.h']]], + ['vectorsignalspec_61',['VectorSignalSpec',['../structVectorSignalSpec.html',1,'']]], + ['vectorstatesignal_62',['VectorStateSignal',['../State_8h.html#a214bd9926c3d8a2bb83b9b471744775b',1,'State.h']]], + ['vectorstatesignalspec_63',['VectorStateSignalSpec',['../structVectorStateSignalSpec.html',1,'']]], + ['vectorstatetype_64',['VectorStateType',['../State_8h.html#a60d0230d5788084bb8f559f4561d4d96',1,'State.h']]] +]; diff --git a/docs/search/all_13.js b/docs/search/all_13.js new file mode 100644 index 0000000..29ed313 --- /dev/null +++ b/docs/search/all_13.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['x_0',['x',['../classModel.html#abfe8871b9f0eac35c76af3f5cfcdea35',1,'Model::x'],['../structSignal_1_1SignalDP.html#a9b7c7d507ee5f16f1909dccdae98e649',1,'Signal::SignalDP::x']]], + ['xdot_1',['xdot',['../classModel.html#ab8bb4819a03ed642326295c28bea6fa7',1,'Model::xdot'],['../structSignal_1_1SignalDP.html#a31d004bf32039463b33344e4c10bd5bb',1,'Signal::SignalDP::xdot']]] +]; diff --git a/docs/search/all_14.js b/docs/search/all_14.js new file mode 100644 index 0000000..3228c81 --- /dev/null +++ b/docs/search/all_14.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['zero_5forder_5fhold_0',['ZERO_ORDER_HOLD',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284ad873f8ab97a3f6e892c8b834b23db574',1,'Signal.h']]], + ['zeros_1',['ZEROS',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4a5d7341ec5879a7f47c5cb82c0fdf6b5f',1,'Signal.h']]], + ['zerotype_2',['ZeroType',['../structScalarSignalSpec.html#a941ad7ca4c5943d3b2244e1126d1febf',1,'ScalarSignalSpec::ZeroType()'],['../structVectorSignalSpec.html#a4c535f5d5b25faa7148f8719d74693fd',1,'VectorSignalSpec::ZeroType()'],['../structManifoldSignalSpec.html#a445c0d7b5e23264b3a08b881f3c68a72',1,'ManifoldSignalSpec::ZeroType()'],['../structScalarStateSignalSpec.html#a0dc57853395e3c57d6447a23ae513b91',1,'ScalarStateSignalSpec::ZeroType()'],['../structVectorStateSignalSpec.html#ae659b96e95497b25e711fab331037c21',1,'VectorStateSignalSpec::ZeroType()'],['../structManifoldStateSignalSpec.html#adca9f48f26d97f95b2083b9e55bb58cb',1,'ManifoldStateSignalSpec::ZeroType()']]] +]; diff --git a/docs/search/all_2.js b/docs/search/all_2.js new file mode 100644 index 0000000..aef6d14 --- /dev/null +++ b/docs/search/all_2.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['derivativemethod_0',['DerivativeMethod',['../Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242',1,'Signal.h']]], + ['derivativemethod_1',['derivativeMethod',['../classSignal.html#ac0536cd4021cc4815a3dbb60c5b4f473',1,'Signal']]], + ['dirty_2',['DIRTY',['../Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242a6a4e132eb192a22c351397837d4c082c',1,'Signal.h']]], + ['documentation_3',['signals-cpp Library Documentation',['../index.html',1,'']]], + ['dot_4',['dot',['../classSignal.html#a8b12b8bc1e74ddbadb67248fab16c461',1,'Signal::dot() const'],['../classSignal.html#a8989cbb307917a9c1f6331be2a5ae4e9',1,'Signal::dot(const double &t) const'],['../classSignal.html#aad31a21f4a7d572da1e06e407ccacecd',1,'Signal::dot(const std::vector< double > &t) const']]], + ['dotsignal_5',['dotSignal',['../classSignal.html#a95241f68d33194232ba1eea1747a5231',1,'Signal']]] +]; diff --git a/docs/search/all_3.js b/docs/search/all_3.js new file mode 100644 index 0000000..713e262 --- /dev/null +++ b/docs/search/all_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['eulerintegrator_0',['EulerIntegrator',['../Integration_8h.html#a0e36b47220a522ff9899d9624dd7c01b',1,'Integration.h']]], + ['eulerintegratorspec_1',['EulerIntegratorSpec',['../structEulerIntegratorSpec.html',1,'']]], + ['extrapolationmethod_2',['ExtrapolationMethod',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4',1,'Signal.h']]], + ['extrapolationmethod_3',['extrapolationMethod',['../classSignal.html#aff76e692ad975b7721ecf6e60d33a11f',1,'Signal']]] +]; diff --git a/docs/search/all_4.js b/docs/search/all_4.js new file mode 100644 index 0000000..f74ca2b --- /dev/null +++ b/docs/search/all_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['finite_5fdiff_0',['FINITE_DIFF',['../Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242a31a5b438304c770230e3fbb9999c9c2e',1,'Signal.h']]] +]; diff --git a/docs/search/all_5.js b/docs/search/all_5.js new file mode 100644 index 0000000..443c6f6 --- /dev/null +++ b/docs/search/all_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['g_0',['g',['../structRigidBodyParams1D.html#a823d208bcbabadd83d3cc8f222973c95',1,'RigidBodyParams1D::g'],['../structRigidBodyParams2D.html#ab212f53241edb1bf232499a6ba963258',1,'RigidBodyParams2D::g'],['../structRigidBodyParams3D.html#a87b9c6a467ebcd6805a1d9419e6149d1',1,'RigidBodyParams3D::g']]], + ['gettimedelta_1',['getTimeDelta',['../namespacesignal__utils.html#ad7667542f893604d059a5d0022d2890c',1,'signal_utils']]] +]; diff --git a/docs/search/all_6.js b/docs/search/all_6.js new file mode 100644 index 0000000..44dcb2b --- /dev/null +++ b/docs/search/all_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hasparams_0',['hasParams',['../classModel.html#a4f059d658bfda1665bf44a36b7aaf8e5',1,'Model']]] +]; diff --git a/docs/search/all_7.js b/docs/search/all_7.js new file mode 100644 index 0000000..3cc42a1 --- /dev/null +++ b/docs/search/all_7.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['identity_0',['identity',['../structState.html#a035f1f7193895463743b8ee58d75634f',1,'State']]], + ['inputsignaltype_1',['InputSignalType',['../classModel.html#ac990dd4740b30e4477bca86fc6172970',1,'Model::InputSignalType'],['../structTranslationalDynamicsBase.html#aac403e4db54adf389b8f1fa3700f6f6a',1,'TranslationalDynamicsBase::InputSignalType'],['../structRotationalDynamics1DOF.html#a80b5f730e292fda15bdcf1e8b96fe02e',1,'RotationalDynamics1DOF::InputSignalType'],['../structRotationalDynamics3DOF.html#aac317f9992071217ce644f6b9ccd8763',1,'RotationalDynamics3DOF::InputSignalType'],['../structRigidBodyDynamics3DOF.html#a4341d5e4a676e15edc8f8faafef5431a',1,'RigidBodyDynamics3DOF::InputSignalType'],['../structRigidBodyDynamics6DOF.html#a8927301269f2ce616317819c769b9364',1,'RigidBodyDynamics6DOF::InputSignalType']]], + ['inputtype_2',['InputType',['../structTranslationalDynamicsBase.html#ac57d5ab2e4cf3e6afe4a5ae550e858bb',1,'TranslationalDynamicsBase::InputType'],['../structRotationalDynamics1DOF.html#ad43b9ce6a37b65d677d01ceafe448259',1,'RotationalDynamics1DOF::InputType'],['../structRotationalDynamics3DOF.html#aafaa22bb44de6a10f6293f66da5c52e5',1,'RotationalDynamics3DOF::InputType'],['../structRigidBodyDynamics3DOF.html#aa90232643a368b1d4b9fd618ae8d57f7',1,'RigidBodyDynamics3DOF::InputType'],['../structRigidBodyDynamics6DOF.html#ac8780c98b59889f8329aa467a5b375fe',1,'RigidBodyDynamics6DOF::InputType']]], + ['installation_3',['Installation',['../index.html#install',1,'']]], + ['integrate_4',['integrate',['../structIntegrator.html#ab3bebaa347f6019f3d2da2b2bcee5918',1,'Integrator::integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const bool &insertIntoHistory=false)'],['../structIntegrator.html#a8266e6bf3abd90d83fa7eb6b9270c0c4',1,'Integrator::integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const double &dt, const bool &insertIntoHistory=false)'],['../structEulerIntegratorSpec.html#a6c8d7aa2ecf83f7a348a575e5023639f',1,'EulerIntegratorSpec::integrate()'],['../structTrapezoidalIntegratorSpec.html#a38c21a876135bae55c62ec43c3a18a86',1,'TrapezoidalIntegratorSpec::integrate()'],['../structSimpsonIntegratorSpec.html#a6194da52902a391e4a9b251c05e6abf2',1,'SimpsonIntegratorSpec::integrate()']]], + ['integration_2eh_5',['Integration.h',['../Integration_8h.html',1,'']]], + ['integrator_6',['Integrator',['../structIntegrator.html',1,'']]], + ['integrator_3c_20eulerintegratorspec_20_3e_7',['Integrator< EulerIntegratorSpec >',['../structIntegrator.html',1,'']]], + ['integrator_3c_20simpsonintegratorspec_20_3e_8',['Integrator< SimpsonIntegratorSpec >',['../structIntegrator.html',1,'']]], + ['integrator_3c_20trapezoidalintegratorspec_20_3e_9',['Integrator< TrapezoidalIntegratorSpec >',['../structIntegrator.html',1,'']]], + ['interpolationmethod_10',['InterpolationMethod',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284',1,'Signal.h']]], + ['interpolationmethod_11',['interpolationMethod',['../classSignal.html#ae4c3f0098aaec52921d28cce09ff1ed4',1,'Signal']]], + ['introduction_12',['Introduction',['../index.html#intro_sec',1,'']]] +]; diff --git a/docs/search/all_8.js b/docs/search/all_8.js new file mode 100644 index 0000000..b3681b6 --- /dev/null +++ b/docs/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['j_0',['J',['../structRigidBodyParams2D.html#aaefd836b5e013be87bc317aaba261a25',1,'RigidBodyParams2D::J'],['../structRigidBodyParams3D.html#a049fb70b2897579849053dfe2ea840e6',1,'RigidBodyParams3D::J']]] +]; diff --git a/docs/search/all_9.js b/docs/search/all_9.js new file mode 100644 index 0000000..ed0726f --- /dev/null +++ b/docs/search/all_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['library_20documentation_0',['signals-cpp Library Documentation',['../index.html',1,'']]], + ['linear_1',['LINEAR',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284adc101ebf31c49c2d4b80b7c6f59f22cb',1,'Signal.h']]] +]; diff --git a/docs/search/all_a.js b/docs/search/all_a.js new file mode 100644 index 0000000..d6b129d --- /dev/null +++ b/docs/search/all_a.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['m_0',['m',['../structRigidBodyParams1D.html#a2f5a1c0e6320c14d72d0ff98ad979332',1,'RigidBodyParams1D::m'],['../structRigidBodyParams2D.html#a5e37a979a1a69333bcc5576d14397185',1,'RigidBodyParams2D::m'],['../structRigidBodyParams3D.html#acfa4c165c3278306dac4c0f51819e694',1,'RigidBodyParams3D::m']]], + ['make_5fintegrator_1',['MAKE_INTEGRATOR',['../Integration_8h.html#ac22028f5bd0a2ecee786d53a348e4073',1,'Integration.h']]], + ['make_5fmanif_5fsignal_2',['MAKE_MANIF_SIGNAL',['../Signal_8h.html#adf89e7a1e286d52fa755d04f0c087ea3',1,'Signal.h']]], + ['make_5fmanif_5fstates_3',['MAKE_MANIF_STATES',['../State_8h.html#a72800aeb486c7eebe1ab0fe8cfae6294',1,'State.h']]], + ['make_5fmodel_4',['MAKE_MODEL',['../Models_8h.html#a01637abb86bd3009fcff2cebc8a8735a',1,'Models.h']]], + ['make_5fvector_5fsignal_5',['MAKE_VECTOR_SIGNAL',['../Signal_8h.html#a45ef87a3bf4ac7938147e95995f76849',1,'Signal.h']]], + ['make_5fvector_5fstates_6',['MAKE_VECTOR_STATES',['../State_8h.html#aed0e3d5bd576a92c33ab3950c98a4e3b',1,'State.h']]], + ['manifoldsignal_7',['ManifoldSignal',['../Signal_8h.html#a278e5023dd90a58b58ce28b413ecec4a',1,'Signal.h']]], + ['manifoldsignalspec_8',['ManifoldSignalSpec',['../structManifoldSignalSpec.html',1,'']]], + ['manifoldstatesignal_9',['ManifoldStateSignal',['../State_8h.html#a111e9957b3bae43e71ce97678f712b8c',1,'State.h']]], + ['manifoldstatesignalspec_10',['ManifoldStateSignalSpec',['../structManifoldStateSignalSpec.html',1,'']]], + ['manifoldstatetype_11',['ManifoldStateType',['../State_8h.html#a73655df4c5d92f1cf1cf69d5fa057753',1,'State.h']]], + ['model_12',['Model',['../classModel.html',1,'Model< DynamicsType >'],['../classModel.html#a3cbccc00606661a35110dbe111af54ad',1,'Model::Model()']]], + ['model_3c_20rigidbodydynamics3dof_3c_20t_20_3e_20_3e_13',['Model< RigidBodyDynamics3DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics3dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_14',['Model< RigidBodyDynamics3DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics6dof_3c_20t_20_3e_20_3e_15',['Model< RigidBodyDynamics6DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics6dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_16',['Model< RigidBodyDynamics6DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics1dof_3c_20t_20_3e_20_3e_17',['Model< RotationalDynamics1DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics1dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_18',['Model< RotationalDynamics1DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics3dof_3c_20t_20_3e_20_3e_19',['Model< RotationalDynamics3DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics3dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_20',['Model< RotationalDynamics3DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics1dof_3c_20t_20_3e_20_3e_21',['Model< TranslationalDynamics1DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics1dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_22',['Model< TranslationalDynamics1DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics2dof_3c_20t_20_3e_20_3e_23',['Model< TranslationalDynamics2DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics2dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_24',['Model< TranslationalDynamics2DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics3dof_3c_20t_20_3e_20_3e_25',['Model< TranslationalDynamics3DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics3dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_26',['Model< TranslationalDynamics3DOF< T > >< double >',['../classModel.html',1,'']]], + ['models_2eh_27',['Models.h',['../Models_8h.html',1,'']]] +]; diff --git a/docs/search/all_b.js b/docs/search/all_b.js new file mode 100644 index 0000000..fdb1d4f --- /dev/null +++ b/docs/search/all_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['nans_0',['NANS',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4af4517d0db561241ccfcf150e1629767f',1,'Signal.h']]], + ['nans_1',['nans',['../structState.html#a9e331e0ecbed1ab2a03d9b3e5a457426',1,'State']]], + ['nanstype_2',['NansType',['../structScalarSignalSpec.html#a040a016b3023c9df47a913599e9af1e2',1,'ScalarSignalSpec::NansType()'],['../structVectorSignalSpec.html#a3a25051bf64d2677fc511bd026b7f6a2',1,'VectorSignalSpec::NansType()'],['../structManifoldSignalSpec.html#a8131da54a75205e3f61547afee1ccfcc',1,'ManifoldSignalSpec::NansType()'],['../structScalarStateSignalSpec.html#ac3878dfd1b21706364c34d09e6da37ce',1,'ScalarStateSignalSpec::NansType()'],['../structVectorStateSignalSpec.html#a4729eec41bab8eb5ed7b45aa8272be4d',1,'VectorStateSignalSpec::NansType()'],['../structManifoldStateSignalSpec.html#a7542075f653a7e8fba76702499936b17',1,'ManifoldStateSignalSpec::NansType()']]] +]; diff --git a/docs/search/all_c.js b/docs/search/all_c.js new file mode 100644 index 0000000..35951f3 --- /dev/null +++ b/docs/search/all_c.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['operator_28_29_0',['operator()',['../classSignal.html#a2d222b24cb25f6f228a0c69d71d95918',1,'Signal::operator()() const'],['../classSignal.html#ad32d0b6b6bbc54ab8bd0fa63ed3039b9',1,'Signal::operator()(const double &t) const'],['../classSignal.html#abf8612dae8c835fa349c6f26201016eb',1,'Signal::operator()(const std::vector< double > &t) const']]], + ['operator_2a_1',['operator*',['../classSignal.html#ad61a2749da48601dcf27bedaa0cf54fd',1,'Signal::operator*(const double &l, const Signal< BSS, TSS > &r)'],['../classSignal.html#ae5d88905516fd17257964442b0830584',1,'Signal::operator*(const Signal< BSS, TSS > &l, const double &r)'],['../Signal_8h.html#ad77fa5fab1a3e9a6ca4d7e87364003b9',1,'operator*(const double &l, const Signal< BaseSignalSpec, TangentSignalSpec > &r): Signal.h'],['../Signal_8h.html#ae0b0bee5051aeec3c9cff9fd148d8cb5',1,'operator*(const Signal< BaseSignalSpec, TangentSignalSpec > &l, const double &r): Signal.h'],['../State_8h.html#a795d2ff5c53f24de712134f27e197001',1,'operator*(const double &l, const State< T, PTS, PD, TTS, TD > &r): State.h'],['../State_8h.html#a7fa016cf853be0dbc882359bf5b637f9',1,'operator*(const State< T, PTS, PD, TTS, TD > &l, const double &r): State.h']]], + ['operator_2a_3d_2',['operator*=',['../structState.html#af76faa98cfc18fb81afb0c86f7a0aa75',1,'State']]], + ['operator_2b_3',['operator+',['../classSignal.html#aead0dbc78a90fbd6ad3f86ab61ed65f7',1,'Signal::operator+()'],['../Signal_8h.html#aa4dc7aa056ee91a7dc4ec540b6bc9cd3',1,'operator+(const Signal< BaseSignalSpec, TangentSignalSpec > &l, const Signal< TangentSignalSpec, TangentSignalSpec > &r): Signal.h'],['../State_8h.html#ac3e1ccc35f63b762bdd2c87478f8aad6',1,'operator+(const State< T, PTS, PD, TTS, TD > &l, const State< T, TTS, TD, TTS, TD > &r): State.h']]], + ['operator_2b_3d_4',['operator+=',['../structState.html#a7764970f0c29576eac07ab57c28261be',1,'State']]], + ['operator_2d_5',['operator-',['../classSignal.html#a22d02130c5fec79a084ef4d1a28521dc',1,'Signal::operator-()'],['../Signal_8h.html#afd611b1d0ab8c1f43be72184926ec8ac',1,'operator-(const Signal< BaseSignalSpec, TangentSignalSpec > &l, const Signal< BaseSignalSpec, TangentSignalSpec > &r): Signal.h'],['../State_8h.html#ad7ac1ecc8c925fbc991d2fa8ca50d4eb',1,'operator-(const State< T, PTS, PD, TTS, TD > &l, const State< T, PTS, PD, TTS, TD > &r): State.h']]], + ['operator_2f_6',['operator/',['../State_8h.html#af3ec1e7d28a9aac4e1cde4c7f3438128',1,'operator/(const ScalarStateType< T > &l, const double &r): State.h'],['../State_8h.html#a0f388e10603fb47846a1147ff5b6839d',1,'operator/(const VectorStateType< T, d > &l, const double &r): State.h']]], + ['operator_3c_3c_7',['operator<<',['../Signal_8h.html#a47318c97bced9b7ee828c94c1a4eeb29',1,'operator<<(std::ostream &os, const ScalarSignal< T > &x): Signal.h'],['../Signal_8h.html#aeb7f6d79d7e692981221b685c0863d54',1,'operator<<(std::ostream &os, const VectorSignal< T, d > &x): Signal.h'],['../Signal_8h.html#a6a76598b459ea2e14353617de437c808',1,'operator<<(std::ostream &os, const ManifoldSignal< T, ManifoldType, d > &x): Signal.h'],['../State_8h.html#ae29ac55bb38cdbd3acce109857e8e7a4',1,'operator<<(std::ostream &os, const ScalarStateType< T > &x): State.h'],['../State_8h.html#af1eca508289d2fcbdecd0cc136eed43d',1,'operator<<(std::ostream &os, const VectorStateType< T, d > &x): State.h'],['../State_8h.html#a494fe74e8c2fc3cd3f7e14886eeb7d6c',1,'operator<<(std::ostream &os, const ManifoldStateType< T, ManifoldType, PD, TD > &x): State.h'],['../State_8h.html#ab6fe6347b40120d5f45445b1fc6596f4',1,'operator<<(std::ostream &os, const ScalarStateSignal< T > &x): State.h'],['../State_8h.html#a1675ff98779b45e08f5d169056e26a4d',1,'operator<<(std::ostream &os, const VectorStateSignal< T, d > &x): State.h'],['../State_8h.html#a6c0f637d1f1980a2de56f125e9cf4ec1',1,'operator<<(std::ostream &os, const ManifoldStateSignal< T, ManifoldType, PD, TD > &x): State.h']]] +]; diff --git a/docs/search/all_d.js b/docs/search/all_d.js new file mode 100644 index 0000000..7631909 --- /dev/null +++ b/docs/search/all_d.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['paramstype_0',['ParamsType',['../classModel.html#aec20251d98505785fa51c52eb81dd3a2',1,'Model::ParamsType'],['../structTranslationalDynamicsBase.html#a4ba374f05dd1f5c4168adf3d6a15ef0c',1,'TranslationalDynamicsBase::ParamsType'],['../structRotationalDynamics1DOF.html#a38ff3a3028dc85817407d15587bf3451',1,'RotationalDynamics1DOF::ParamsType'],['../structRotationalDynamics3DOF.html#a2ac951c964726729410488c2bfcfa156',1,'RotationalDynamics3DOF::ParamsType'],['../structRigidBodyDynamics3DOF.html#afa1ade3cc027b78a2d2c65df867d52b0',1,'RigidBodyDynamics3DOF::ParamsType'],['../structRigidBodyDynamics6DOF.html#ad252337a912dcd1cfaa097d9c2d5814e',1,'RigidBodyDynamics6DOF::ParamsType']]], + ['pose_1',['pose',['../structState.html#a0a5874d4c3988770f5498c34ec508c34',1,'State']]], + ['posetype_2',['PoseType',['../structState.html#a31bd8aa44dff5f656b2b2057c8d63821',1,'State']]] +]; diff --git a/docs/search/all_e.js b/docs/search/all_e.js new file mode 100644 index 0000000..4e300c4 --- /dev/null +++ b/docs/search/all_e.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['reset_0',['reset',['../classModel.html#a823536a9764d6a35cce173573ee62e90',1,'Model::reset()'],['../classSignal.html#a914fd7f09ae0723c88fce310fd7c79fd',1,'Signal::reset()']]], + ['rigidbody3dofmodel_1',['RigidBody3DOFModel',['../Models_8h.html#ab084e172ef604e5975b5ff17e33d06ce',1,'Models.h']]], + ['rigidbody3dofmodeld_2',['RigidBody3DOFModeld',['../Models_8h.html#a46f2319cb159c02e4eb4801d850d54d9',1,'Models.h']]], + ['rigidbody6dofmodel_3',['RigidBody6DOFModel',['../Models_8h.html#a8f7d8c7063cb9c51d2bb794931db3a34',1,'Models.h']]], + ['rigidbody6dofmodeld_4',['RigidBody6DOFModeld',['../Models_8h.html#a40c2fc8d427c1bd6dfee02295ccb3cb6',1,'Models.h']]], + ['rigidbodydynamics3dof_5',['RigidBodyDynamics3DOF',['../structRigidBodyDynamics3DOF.html',1,'']]], + ['rigidbodydynamics6dof_6',['RigidBodyDynamics6DOF',['../structRigidBodyDynamics6DOF.html',1,'']]], + ['rigidbodyparams1d_7',['RigidBodyParams1D',['../structRigidBodyParams1D.html',1,'RigidBodyParams1D'],['../structRigidBodyParams1D.html#ab2b9c3eb89bcbf0ac06a33e95725e0eb',1,'RigidBodyParams1D::RigidBodyParams1D()']]], + ['rigidbodyparams2d_8',['RigidBodyParams2D',['../structRigidBodyParams2D.html',1,'RigidBodyParams2D'],['../structRigidBodyParams2D.html#a6febaa8c9f355105b908979da3dd1255',1,'RigidBodyParams2D::RigidBodyParams2D()']]], + ['rigidbodyparams3d_9',['RigidBodyParams3D',['../structRigidBodyParams3D.html',1,'RigidBodyParams3D'],['../structRigidBodyParams3D.html#a8aa76fea7a0790ead025bf79e767d0cf',1,'RigidBodyParams3D::RigidBodyParams3D()']]], + ['rotational1dofmodel_10',['Rotational1DOFModel',['../Models_8h.html#abc1d5223da3343a9537cc0a6f5abd239',1,'Models.h']]], + ['rotational1dofmodeld_11',['Rotational1DOFModeld',['../Models_8h.html#af9b104589a404874af160185cf8a725c',1,'Models.h']]], + ['rotational3dofmodel_12',['Rotational3DOFModel',['../Models_8h.html#a287ab38fdf9b2634bf844a17719b9115',1,'Models.h']]], + ['rotational3dofmodeld_13',['Rotational3DOFModeld',['../Models_8h.html#a51e40a2924a4b6ff134878368461bb1a',1,'Models.h']]], + ['rotationaldynamics1dof_14',['RotationalDynamics1DOF',['../structRotationalDynamics1DOF.html',1,'']]], + ['rotationaldynamics3dof_15',['RotationalDynamics3DOF',['../structRotationalDynamics3DOF.html',1,'']]] +]; diff --git a/docs/search/all_f.js b/docs/search/all_f.js new file mode 100644 index 0000000..fc92a2f --- /dev/null +++ b/docs/search/all_f.js @@ -0,0 +1,120 @@ +var searchData= +[ + ['scalardsignal_0',['ScalardSignal',['../Signal_8h.html#a5d3a7fde60e049b3fb16e62c397585a0',1,'Signal.h']]], + ['scalardstate_1',['ScalardState',['../State_8h.html#aab879370bd488ae3cb270da1dfc5f695',1,'State.h']]], + ['scalardstatesignal_2',['ScalardStateSignal',['../State_8h.html#a95f500a02b3d50ef0a73883e96ae8768',1,'State.h']]], + ['scalarsignal_3',['ScalarSignal',['../Signal_8h.html#a19e9e3fdf9dac462c6fb79ee572d2b4c',1,'Signal.h']]], + ['scalarsignalspec_4',['ScalarSignalSpec',['../structScalarSignalSpec.html',1,'']]], + ['scalarstate_5',['ScalarState',['../State_8h.html#ae2fe8fddd28ed110fbc33b4ca506bd0f',1,'State.h']]], + ['scalarstatesignal_6',['ScalarStateSignal',['../State_8h.html#a7059d2190879b0e80afad377593fb225',1,'State.h']]], + ['scalarstatesignalspec_7',['ScalarStateSignalSpec',['../structScalarStateSignalSpec.html',1,'']]], + ['scalarstatetype_8',['ScalarStateType',['../State_8h.html#aad51d946606df50291c6c2f546030f11',1,'State.h']]], + ['se2dsignal_9',['SE2dSignal',['../Signal_8h.html#a27317de3cebe688fdf9b1f89e8d749ea',1,'Signal.h']]], + ['se2dstate_10',['SE2dState',['../State_8h.html#abf8de0fae02a60506ddd6e134b75ae00',1,'State.h']]], + ['se2dstatesignal_11',['SE2dStateSignal',['../State_8h.html#a709efdac7ba2c93eedbf1533c74e42f5',1,'State.h']]], + ['se2signal_12',['SE2Signal',['../Signal_8h.html#a5c686d1c1e780f578c950182943ecf41',1,'Signal.h']]], + ['se2state_13',['SE2State',['../State_8h.html#acc2213abe7e1f1169bce3603e87f44d2',1,'State.h']]], + ['se2statesignal_14',['SE2StateSignal',['../State_8h.html#ae34074b7d367592e7022441b0ee836d9',1,'State.h']]], + ['se3dsignal_15',['SE3dSignal',['../Signal_8h.html#a13875f09fcdcc6dd114766bacc38f01b',1,'Signal.h']]], + ['se3dstate_16',['SE3dState',['../State_8h.html#a98daf00f053bcc148a93319eac4901e4',1,'State.h']]], + ['se3dstatesignal_17',['SE3dStateSignal',['../State_8h.html#a9b00d890fcdbf16abfbb263061e9bc98',1,'State.h']]], + ['se3signal_18',['SE3Signal',['../Signal_8h.html#ab87588076a67398d28c7f77a2103470b',1,'Signal.h']]], + ['se3state_19',['SE3State',['../State_8h.html#a41c34d11317aa1e268232a6ddf9c0ba7',1,'State.h']]], + ['se3statesignal_20',['SE3StateSignal',['../State_8h.html#a337f5beba24e405d11550802e4375c73',1,'State.h']]], + ['setderivativemethod_21',['setDerivativeMethod',['../classSignal.html#a8c25f302d3c4feaa1a4c1f6d59381d89',1,'Signal']]], + ['setextrapolationmethod_22',['setExtrapolationMethod',['../classSignal.html#ac3be206ae717ad5e977d8a108de9b9e4',1,'Signal']]], + ['setinterpolationmethod_23',['setInterpolationMethod',['../classSignal.html#af336f3d6a2d643040dff9fb5b4c20558',1,'Signal']]], + ['setparams_24',['setParams',['../classModel.html#a96533143a30ab87c379e411fcae59643',1,'Model']]], + ['signal_25',['Signal',['../classSignal.html',1,'Signal< BaseSignalSpec, TangentSignalSpec >'],['../classSignal.html#a8b5d0a9fba3546f500fed7e2102cd9a7',1,'Signal::Signal()'],['../classSignal.html#a81a95abda92d3efc0bd4b4ccba77e303',1,'Signal::Signal(const Signal &other)']]], + ['signal_2eh_26',['Signal.h',['../Signal_8h.html',1,'']]], + ['signal_3c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_27',['Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20double_20_3e_28',['Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20se2_3c_20t_20_3e_2c_203_20_3e_29',['Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > >< T, SE2< T >, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20se3_3c_20t_20_3e_2c_206_20_3e_30',['Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > >< T, SE3< T >, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20so2_3c_20t_20_3e_2c_201_20_3e_31',['Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > >< T, SO2< T >, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20so3_3c_20t_20_3e_2c_203_20_3e_32',['Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > >< T, SO3< T >, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_33',['Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20double_20_3e_34',['Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20se2_3c_20t_20_3e_2c_204_2c_203_20_3e_35',['Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SE2< T >, 4, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20se3_3c_20t_20_3e_2c_207_2c_206_20_3e_36',['Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SE3< T >, 7, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20so2_3c_20t_20_3e_2c_202_2c_201_20_3e_37',['Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SO2< T >, 2, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20so3_3c_20t_20_3e_2c_204_2c_203_20_3e_38',['Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SO3< T >, 4, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20scalarsignalspec_3c_20t_20_3e_2c_20scalarsignalspec_3c_20t_20_3e_20_3e_39',['Signal< ScalarSignalSpec< T >, ScalarSignalSpec< T > >',['../classSignal.html',1,'']]], + ['signal_3c_20scalarsignalspec_3c_20t_20_3e_2c_20scalarsignalspec_3c_20t_20_3e_20_3e_3c_20double_20_3e_40',['Signal< ScalarSignalSpec< T >, ScalarSignalSpec< T > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20scalarstatesignalspec_3c_20t_20_3e_2c_20scalarstatesignalspec_3c_20t_20_3e_20_3e_41',['Signal< ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > >',['../classSignal.html',1,'']]], + ['signal_3c_20scalarstatesignalspec_3c_20t_20_3e_2c_20scalarstatesignalspec_3c_20t_20_3e_20_3e_3c_20double_20_3e_42',['Signal< ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_43',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20double_20_3e_44',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_201_20_3e_45',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_2010_20_3e_46',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 10 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_202_20_3e_47',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 2 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_203_20_3e_48',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_204_20_3e_49',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 4 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_205_20_3e_50',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 5 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_206_20_3e_51',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_207_20_3e_52',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 7 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_208_20_3e_53',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 8 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_209_20_3e_54',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 9 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_55',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20double_20_3e_56',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_201_20_3e_57',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_2010_20_3e_58',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 10 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_202_20_3e_59',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 2 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_203_20_3e_60',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_204_20_3e_61',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 4 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_205_20_3e_62',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 5 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_206_20_3e_63',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_207_20_3e_64',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 7 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_208_20_3e_65',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 8 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_209_20_3e_66',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 9 >',['../classSignal.html',1,'']]], + ['signal_5futils_67',['signal_utils',['../namespacesignal__utils.html',1,'']]], + ['signaldp_68',['SignalDP',['../structSignal_1_1SignalDP.html',1,'Signal']]], + ['signaldpcomparator_69',['SignalDPComparator',['../classSignal.html#a6db70e8a2784b5596a47f2249a2627b7',1,'Signal']]], + ['signals_20cpp_20library_20documentation_70',['signals-cpp Library Documentation',['../index.html',1,'']]], + ['signals_2eh_71',['Signals.h',['../Signals_8h.html',1,'']]], + ['simpsonintegrator_72',['SimpsonIntegrator',['../Integration_8h.html#a3ac408f7f30b4b1b5b218e5d48eca5ed',1,'Integration.h']]], + ['simpsonintegratorspec_73',['SimpsonIntegratorSpec',['../structSimpsonIntegratorSpec.html',1,'']]], + ['simulate_74',['simulate',['../classModel.html#ac7446138b27c8feba779ebfe8e82b99d',1,'Model::simulate(const InputSignalType &u, const double &tf, const bool &insertIntoHistory=false, const bool &calculateXddot=false)'],['../classModel.html#ac2550ae8ed888d167450160ce55286df',1,'Model::simulate(const InputSignalType &u, const double &tf, const double &dt, const bool &insertIntoHistory=false, const bool &calculateXddot=false)']]], + ['so2dsignal_75',['SO2dSignal',['../Signal_8h.html#a43a8b3bb4241f080c75114c98502e21b',1,'Signal.h']]], + ['so2dstate_76',['SO2dState',['../State_8h.html#af87fca61f7adfb8b62056d2f6c815e51',1,'State.h']]], + ['so2dstatesignal_77',['SO2dStateSignal',['../State_8h.html#a4f4b421bf1a450cd6514a24b8c16e8cb',1,'State.h']]], + ['so2signal_78',['SO2Signal',['../Signal_8h.html#acbd9dbde916447b024121b565ee6ea96',1,'Signal.h']]], + ['so2state_79',['SO2State',['../State_8h.html#ab2d123ee7121bd4e6c7e55ce62c770ee',1,'State.h']]], + ['so2statesignal_80',['SO2StateSignal',['../State_8h.html#a455c23e3eed1fa310813120299d8cc95',1,'State.h']]], + ['so3dsignal_81',['SO3dSignal',['../Signal_8h.html#a1fbce3445fc6d54d3dfc2aa95fdcc37f',1,'Signal.h']]], + ['so3dstate_82',['SO3dState',['../State_8h.html#a7ab722ee104a5c16222f5cbd0d682657',1,'State.h']]], + ['so3dstatesignal_83',['SO3dStateSignal',['../State_8h.html#a7069682eef4672ac723761c44e44bc5a',1,'State.h']]], + ['so3signal_84',['SO3Signal',['../Signal_8h.html#a25f5e910566ad4b1b610a8eebb96274d',1,'Signal.h']]], + ['so3state_85',['SO3State',['../State_8h.html#ae37ec421e65f8ce1346e62704e6ea859',1,'State.h']]], + ['so3statesignal_86',['SO3StateSignal',['../State_8h.html#a07ec000c82b285e661a861ae5f90736a',1,'State.h']]], + ['state_87',['State',['../structState.html',1,'State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >'],['../structState.html#adcb914ebe25fe14622a945801267fa7a',1,'State::State()'],['../structState.html#a097d236bc46ca02a379e2fd188fe3e97',1,'State::State(T *arr)'],['../structState.html#aa10b450dbe8a806a0b203521b4738c0c',1,'State::State(const State &other)']]], + ['state_2eh_88',['State.h',['../State_8h.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_89',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20double_20_3e_90',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< double >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_91',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, ManifoldType, PD, TD >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20se2_3c_20t_20_3e_2c_204_2c_203_20_3e_92',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SE2< T >, 4, 3 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20se3_3c_20t_20_3e_2c_207_2c_206_20_3e_93',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SE3< T >, 7, 6 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20so2_3c_20t_20_3e_2c_202_2c_201_20_3e_94',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SO2< T >, 2, 1 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20so3_3c_20t_20_3e_2c_204_2c_203_20_3e_95',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SO3< T >, 4, 3 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_20_3e_96',['State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_20_3e_3c_20double_20_3e_97',['State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 >< double >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_20_3e_3c_20t_20_3e_98',['State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 >< T >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_99',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20double_20_3e_100',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< double >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_201_20_3e_101',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 1 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_2010_20_3e_102',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 10 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_202_20_3e_103',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 2 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_203_20_3e_104',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 3 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_204_20_3e_105',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 4 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_205_20_3e_106',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 5 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_206_20_3e_107',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 6 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_207_20_3e_108',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 7 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_208_20_3e_109',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 8 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_209_20_3e_110',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 9 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_20d_20_3e_111',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, d >',['../structState.html',1,'']]], + ['statedotdottype_112',['StateDotDotType',['../structTranslationalDynamicsBase.html#a4ae3874e31bcc97d54f4cebea0606002',1,'TranslationalDynamicsBase::StateDotDotType'],['../structRotationalDynamics1DOF.html#a5e2f1cd471e7be99dc9e0f3f29f146f3',1,'RotationalDynamics1DOF::StateDotDotType'],['../structRotationalDynamics3DOF.html#a6e75764a6e9b0ec406d716dfb60943b1',1,'RotationalDynamics3DOF::StateDotDotType'],['../structRigidBodyDynamics3DOF.html#a562a8cc5e6e8dca19982509022a22ba4',1,'RigidBodyDynamics3DOF::StateDotDotType'],['../structRigidBodyDynamics6DOF.html#a32c92b85c94f66739358385a0a3a07fc',1,'RigidBodyDynamics6DOF::StateDotDotType']]], + ['statedotsignaltype_113',['StateDotSignalType',['../classModel.html#a8abdf37c6158386a9f1d2c6c506f6839',1,'Model::StateDotSignalType'],['../structTranslationalDynamicsBase.html#a3870f6b57fcb6cb578b3640401331a39',1,'TranslationalDynamicsBase::StateDotSignalType'],['../structRotationalDynamics1DOF.html#a32c4979bf8f6aa3f9c1b0f2818ba4abd',1,'RotationalDynamics1DOF::StateDotSignalType'],['../structRotationalDynamics3DOF.html#a6b1ce3427c65404128d15a66c3d11621',1,'RotationalDynamics3DOF::StateDotSignalType'],['../structRigidBodyDynamics3DOF.html#a28d138392ca0069c5e6274f78fd08e29',1,'RigidBodyDynamics3DOF::StateDotSignalType'],['../structRigidBodyDynamics6DOF.html#afcafc7961087b27b239ad998e436da9a',1,'RigidBodyDynamics6DOF::StateDotSignalType']]], + ['statedottype_114',['StateDotType',['../structTranslationalDynamicsBase.html#a25c6532290d222c25e727394a0afa0b7',1,'TranslationalDynamicsBase::StateDotType'],['../structRotationalDynamics1DOF.html#a7df05f9db990eecd331f506d1a17597e',1,'RotationalDynamics1DOF::StateDotType'],['../structRotationalDynamics3DOF.html#a40c9649794d2d6e82da6451d17c32bb5',1,'RotationalDynamics3DOF::StateDotType'],['../structRigidBodyDynamics3DOF.html#a7a9fa29ba97531d856e87560806a805c',1,'RigidBodyDynamics3DOF::StateDotType'],['../structRigidBodyDynamics6DOF.html#aa664579d3d691fcd4c5824b242dd2061',1,'RigidBodyDynamics6DOF::StateDotType']]], + ['statesignaltype_115',['StateSignalType',['../classModel.html#a643e1a47ddbb10c5c10844f9aea5be98',1,'Model::StateSignalType'],['../structTranslationalDynamicsBase.html#a1f0fdd4bbfb73f52878c7e5c7e459f16',1,'TranslationalDynamicsBase::StateSignalType'],['../structRotationalDynamics1DOF.html#ac321d27d0098cb3e8e64ea0d98500cb6',1,'RotationalDynamics1DOF::StateSignalType'],['../structRotationalDynamics3DOF.html#a2814e21ab959a4cb71fdc2682d1cad69',1,'RotationalDynamics3DOF::StateSignalType'],['../structRigidBodyDynamics3DOF.html#a0c346a983bc929f1f7a6e5d2be3a0841',1,'RigidBodyDynamics3DOF::StateSignalType'],['../structRigidBodyDynamics6DOF.html#ad4e0605bf2a0c90acbe9a1a333b9b952',1,'RigidBodyDynamics6DOF::StateSignalType']]], + ['statetype_116',['StateType',['../structTranslationalDynamicsBase.html#aabb958cc98babacfc8478a04fb7a37dd',1,'TranslationalDynamicsBase::StateType'],['../structRotationalDynamics1DOF.html#aada86d78db85576298e606afda8c928d',1,'RotationalDynamics1DOF::StateType'],['../structRotationalDynamics3DOF.html#aaee29651f3b1671b6ab4e10656ea6f9a',1,'RotationalDynamics3DOF::StateType'],['../structRigidBodyDynamics3DOF.html#a448c5efb998f492d1518eb0d2d7ded74',1,'RigidBodyDynamics3DOF::StateType'],['../structRigidBodyDynamics6DOF.html#adf5c3e5f6090032d18019c7aeab91f51',1,'RigidBodyDynamics6DOF::StateType']]] +]; diff --git a/docs/search/classes_0.js b/docs/search/classes_0.js new file mode 100644 index 0000000..5d161be --- /dev/null +++ b/docs/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['eulerintegratorspec_0',['EulerIntegratorSpec',['../structEulerIntegratorSpec.html',1,'']]] +]; diff --git a/docs/search/classes_1.js b/docs/search/classes_1.js new file mode 100644 index 0000000..090355a --- /dev/null +++ b/docs/search/classes_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['integrator_0',['Integrator',['../structIntegrator.html',1,'']]], + ['integrator_3c_20eulerintegratorspec_20_3e_1',['Integrator< EulerIntegratorSpec >',['../structIntegrator.html',1,'']]], + ['integrator_3c_20simpsonintegratorspec_20_3e_2',['Integrator< SimpsonIntegratorSpec >',['../structIntegrator.html',1,'']]], + ['integrator_3c_20trapezoidalintegratorspec_20_3e_3',['Integrator< TrapezoidalIntegratorSpec >',['../structIntegrator.html',1,'']]] +]; diff --git a/docs/search/classes_2.js b/docs/search/classes_2.js new file mode 100644 index 0000000..f4490df --- /dev/null +++ b/docs/search/classes_2.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['manifoldsignalspec_0',['ManifoldSignalSpec',['../structManifoldSignalSpec.html',1,'']]], + ['manifoldstatesignalspec_1',['ManifoldStateSignalSpec',['../structManifoldStateSignalSpec.html',1,'']]], + ['model_2',['Model',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics3dof_3c_20t_20_3e_20_3e_3',['Model< RigidBodyDynamics3DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics3dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_4',['Model< RigidBodyDynamics3DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics6dof_3c_20t_20_3e_20_3e_5',['Model< RigidBodyDynamics6DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rigidbodydynamics6dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_6',['Model< RigidBodyDynamics6DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics1dof_3c_20t_20_3e_20_3e_7',['Model< RotationalDynamics1DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics1dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_8',['Model< RotationalDynamics1DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics3dof_3c_20t_20_3e_20_3e_9',['Model< RotationalDynamics3DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20rotationaldynamics3dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_10',['Model< RotationalDynamics3DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics1dof_3c_20t_20_3e_20_3e_11',['Model< TranslationalDynamics1DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics1dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_12',['Model< TranslationalDynamics1DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics2dof_3c_20t_20_3e_20_3e_13',['Model< TranslationalDynamics2DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics2dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_14',['Model< TranslationalDynamics2DOF< T > >< double >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics3dof_3c_20t_20_3e_20_3e_15',['Model< TranslationalDynamics3DOF< T > >',['../classModel.html',1,'']]], + ['model_3c_20translationaldynamics3dof_3c_20t_20_3e_20_3e_3c_20double_20_3e_16',['Model< TranslationalDynamics3DOF< T > >< double >',['../classModel.html',1,'']]] +]; diff --git a/docs/search/classes_3.js b/docs/search/classes_3.js new file mode 100644 index 0000000..5edfde1 --- /dev/null +++ b/docs/search/classes_3.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['rigidbodydynamics3dof_0',['RigidBodyDynamics3DOF',['../structRigidBodyDynamics3DOF.html',1,'']]], + ['rigidbodydynamics6dof_1',['RigidBodyDynamics6DOF',['../structRigidBodyDynamics6DOF.html',1,'']]], + ['rigidbodyparams1d_2',['RigidBodyParams1D',['../structRigidBodyParams1D.html',1,'']]], + ['rigidbodyparams2d_3',['RigidBodyParams2D',['../structRigidBodyParams2D.html',1,'']]], + ['rigidbodyparams3d_4',['RigidBodyParams3D',['../structRigidBodyParams3D.html',1,'']]], + ['rotationaldynamics1dof_5',['RotationalDynamics1DOF',['../structRotationalDynamics1DOF.html',1,'']]], + ['rotationaldynamics3dof_6',['RotationalDynamics3DOF',['../structRotationalDynamics3DOF.html',1,'']]] +]; diff --git a/docs/search/classes_4.js b/docs/search/classes_4.js new file mode 100644 index 0000000..98209f9 --- /dev/null +++ b/docs/search/classes_4.js @@ -0,0 +1,72 @@ +var searchData= +[ + ['scalarsignalspec_0',['ScalarSignalSpec',['../structScalarSignalSpec.html',1,'']]], + ['scalarstatesignalspec_1',['ScalarStateSignalSpec',['../structScalarStateSignalSpec.html',1,'']]], + ['signal_2',['Signal',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3',['Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20double_20_3e_4',['Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20se2_3c_20t_20_3e_2c_203_20_3e_5',['Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > >< T, SE2< T >, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20se3_3c_20t_20_3e_2c_206_20_3e_6',['Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > >< T, SE3< T >, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20so2_3c_20t_20_3e_2c_201_20_3e_7',['Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > >< T, SO2< T >, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_20so3_3c_20t_20_3e_2c_203_20_3e_8',['Signal< ManifoldSignalSpec< ManifoldType >, VectorSignalSpec< T, d > >< T, SO3< T >, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_9',['Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20double_20_3e_10',['Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20se2_3c_20t_20_3e_2c_204_2c_203_20_3e_11',['Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SE2< T >, 4, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20se3_3c_20t_20_3e_2c_207_2c_206_20_3e_12',['Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SE3< T >, 7, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20so2_3c_20t_20_3e_2c_202_2c_201_20_3e_13',['Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SO2< T >, 2, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20manifoldstatesignalspec_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20td_20_3e_20_3e_3c_20t_2c_20so3_3c_20t_20_3e_2c_204_2c_203_20_3e_14',['Signal< ManifoldStateSignalSpec< T, ManifoldType, PD, TD >, VectorStateSignalSpec< T, TD > >< T, SO3< T >, 4, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20scalarsignalspec_3c_20t_20_3e_2c_20scalarsignalspec_3c_20t_20_3e_20_3e_15',['Signal< ScalarSignalSpec< T >, ScalarSignalSpec< T > >',['../classSignal.html',1,'']]], + ['signal_3c_20scalarsignalspec_3c_20t_20_3e_2c_20scalarsignalspec_3c_20t_20_3e_20_3e_3c_20double_20_3e_16',['Signal< ScalarSignalSpec< T >, ScalarSignalSpec< T > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20scalarstatesignalspec_3c_20t_20_3e_2c_20scalarstatesignalspec_3c_20t_20_3e_20_3e_17',['Signal< ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > >',['../classSignal.html',1,'']]], + ['signal_3c_20scalarstatesignalspec_3c_20t_20_3e_2c_20scalarstatesignalspec_3c_20t_20_3e_20_3e_3c_20double_20_3e_18',['Signal< ScalarStateSignalSpec< T >, ScalarStateSignalSpec< T > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_19',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20double_20_3e_20',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_201_20_3e_21',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_2010_20_3e_22',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 10 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_202_20_3e_23',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 2 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_203_20_3e_24',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_204_20_3e_25',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 4 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_205_20_3e_26',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 5 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_206_20_3e_27',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_207_20_3e_28',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 7 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_208_20_3e_29',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 8 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_209_20_3e_30',['Signal< VectorSignalSpec< T, d >, VectorSignalSpec< T, d > >< T, 9 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_31',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20double_20_3e_32',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< double >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_201_20_3e_33',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 1 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_2010_20_3e_34',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 10 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_202_20_3e_35',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 2 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_203_20_3e_36',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 3 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_204_20_3e_37',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 4 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_205_20_3e_38',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 5 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_206_20_3e_39',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 6 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_207_20_3e_40',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 7 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_208_20_3e_41',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 8 >',['../classSignal.html',1,'']]], + ['signal_3c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_2c_20vectorstatesignalspec_3c_20t_2c_20d_20_3e_20_3e_3c_20t_2c_209_20_3e_42',['Signal< VectorStateSignalSpec< T, d >, VectorStateSignalSpec< T, d > >< T, 9 >',['../classSignal.html',1,'']]], + ['signaldp_43',['SignalDP',['../structSignal_1_1SignalDP.html',1,'Signal']]], + ['simpsonintegratorspec_44',['SimpsonIntegratorSpec',['../structSimpsonIntegratorSpec.html',1,'']]], + ['state_45',['State',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_46',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20double_20_3e_47',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< double >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20manifoldtype_2c_20pd_2c_20td_20_3e_48',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, ManifoldType, PD, TD >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20se2_3c_20t_20_3e_2c_204_2c_203_20_3e_49',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SE2< T >, 4, 3 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20se3_3c_20t_20_3e_2c_207_2c_206_20_3e_50',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SE3< T >, 7, 6 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20so2_3c_20t_20_3e_2c_202_2c_201_20_3e_51',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SO2< T >, 2, 1 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20manifoldsignalspec_3c_20manifoldtype_20_3e_2c_20pd_2c_20vectorsignalspec_3c_20t_2c_20td_20_3e_2c_20td_20_3e_3c_20t_2c_20so3_3c_20t_20_3e_2c_204_2c_203_20_3e_52',['State< T, ManifoldSignalSpec< ManifoldType >, PD, VectorSignalSpec< T, TD >, TD >< T, SO3< T >, 4, 3 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_20_3e_53',['State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_20_3e_3c_20double_20_3e_54',['State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 >< double >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_2c_20scalarsignalspec_3c_20t_20_3e_2c_201_20_3e_3c_20t_20_3e_55',['State< T, ScalarSignalSpec< T >, 1, ScalarSignalSpec< T >, 1 >< T >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_56',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20double_20_3e_57',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< double >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_201_20_3e_58',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 1 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_2010_20_3e_59',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 10 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_202_20_3e_60',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 2 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_203_20_3e_61',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 3 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_204_20_3e_62',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 4 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_205_20_3e_63',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 5 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_206_20_3e_64',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 6 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_207_20_3e_65',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 7 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_208_20_3e_66',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 8 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_209_20_3e_67',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, 9 >',['../structState.html',1,'']]], + ['state_3c_20t_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_2c_20vectorsignalspec_3c_20t_2c_20d_20_3e_2c_20d_20_3e_3c_20t_2c_20d_20_3e_68',['State< T, VectorSignalSpec< T, d >, d, VectorSignalSpec< T, d >, d >< T, d >',['../structState.html',1,'']]] +]; diff --git a/docs/search/classes_5.js b/docs/search/classes_5.js new file mode 100644 index 0000000..e198267 --- /dev/null +++ b/docs/search/classes_5.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['translationaldynamicsbase_0',['TranslationalDynamicsBase',['../structTranslationalDynamicsBase.html',1,'']]], + ['translationaldynamicsbase_3c_20scalarsignal_3c_20t_20_3e_2c_20scalarstatesignal_3c_20t_20_3e_2c_20scalarstatesignal_3c_20t_20_3e_2c_201_2c_20rigidbodyparams1d_20_3e_1',['TranslationalDynamicsBase< ScalarSignal< T >, ScalarStateSignal< T >, ScalarStateSignal< T >, 1, RigidBodyParams1D >',['../structTranslationalDynamicsBase.html',1,'']]], + ['translationaldynamicsbase_3c_20vector2signal_3c_20t_20_3e_2c_20vector2statesignal_3c_20t_20_3e_2c_20vector2statesignal_3c_20t_20_3e_2c_202_2c_20rigidbodyparams2d_20_3e_2',['TranslationalDynamicsBase< Vector2Signal< T >, Vector2StateSignal< T >, Vector2StateSignal< T >, 2, RigidBodyParams2D >',['../structTranslationalDynamicsBase.html',1,'']]], + ['translationaldynamicsbase_3c_20vector3signal_3c_20t_20_3e_2c_20vector3statesignal_3c_20t_20_3e_2c_20vector3statesignal_3c_20t_20_3e_2c_203_2c_20rigidbodyparams3d_20_3e_3',['TranslationalDynamicsBase< Vector3Signal< T >, Vector3StateSignal< T >, Vector3StateSignal< T >, 3, RigidBodyParams3D >',['../structTranslationalDynamicsBase.html',1,'']]], + ['trapezoidalintegratorspec_4',['TrapezoidalIntegratorSpec',['../structTrapezoidalIntegratorSpec.html',1,'']]] +]; diff --git a/docs/search/classes_6.js b/docs/search/classes_6.js new file mode 100644 index 0000000..1b5c2d3 --- /dev/null +++ b/docs/search/classes_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['vectorsignalspec_0',['VectorSignalSpec',['../structVectorSignalSpec.html',1,'']]], + ['vectorstatesignalspec_1',['VectorStateSignalSpec',['../structVectorStateSignalSpec.html',1,'']]] +]; diff --git a/docs/search/close.svg b/docs/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/docs/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/docs/search/defines_0.js b/docs/search/defines_0.js new file mode 100644 index 0000000..25a2454 --- /dev/null +++ b/docs/search/defines_0.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['make_5fintegrator_0',['MAKE_INTEGRATOR',['../Integration_8h.html#ac22028f5bd0a2ecee786d53a348e4073',1,'Integration.h']]], + ['make_5fmanif_5fsignal_1',['MAKE_MANIF_SIGNAL',['../Signal_8h.html#adf89e7a1e286d52fa755d04f0c087ea3',1,'Signal.h']]], + ['make_5fmanif_5fstates_2',['MAKE_MANIF_STATES',['../State_8h.html#a72800aeb486c7eebe1ab0fe8cfae6294',1,'State.h']]], + ['make_5fmodel_3',['MAKE_MODEL',['../Models_8h.html#a01637abb86bd3009fcff2cebc8a8735a',1,'Models.h']]], + ['make_5fvector_5fsignal_4',['MAKE_VECTOR_SIGNAL',['../Signal_8h.html#a45ef87a3bf4ac7938147e95995f76849',1,'Signal.h']]], + ['make_5fvector_5fstates_5',['MAKE_VECTOR_STATES',['../State_8h.html#aed0e3d5bd576a92c33ab3950c98a4e3b',1,'State.h']]] +]; diff --git a/docs/search/enums_0.js b/docs/search/enums_0.js new file mode 100644 index 0000000..466754e --- /dev/null +++ b/docs/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['derivativemethod_0',['DerivativeMethod',['../Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242',1,'Signal.h']]] +]; diff --git a/docs/search/enums_1.js b/docs/search/enums_1.js new file mode 100644 index 0000000..4ea2cae --- /dev/null +++ b/docs/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['extrapolationmethod_0',['ExtrapolationMethod',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4',1,'Signal.h']]] +]; diff --git a/docs/search/enums_2.js b/docs/search/enums_2.js new file mode 100644 index 0000000..b99562e --- /dev/null +++ b/docs/search/enums_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['interpolationmethod_0',['InterpolationMethod',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284',1,'Signal.h']]] +]; diff --git a/docs/search/enumvalues_0.js b/docs/search/enumvalues_0.js new file mode 100644 index 0000000..ffdb0cb --- /dev/null +++ b/docs/search/enumvalues_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['closest_0',['CLOSEST',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4a901e715f86c693ccd2851e8c0b64cca3',1,'Signal.h']]], + ['cubic_5fspline_1',['CUBIC_SPLINE',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284a13480ea7779c90806a9fa4ef70322ebc',1,'Signal.h']]] +]; diff --git a/docs/search/enumvalues_1.js b/docs/search/enumvalues_1.js new file mode 100644 index 0000000..992a90c --- /dev/null +++ b/docs/search/enumvalues_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['dirty_0',['DIRTY',['../Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242a6a4e132eb192a22c351397837d4c082c',1,'Signal.h']]] +]; diff --git a/docs/search/enumvalues_2.js b/docs/search/enumvalues_2.js new file mode 100644 index 0000000..f74ca2b --- /dev/null +++ b/docs/search/enumvalues_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['finite_5fdiff_0',['FINITE_DIFF',['../Signal_8h.html#a35d05b0e727a39b86907d8669e9e1242a31a5b438304c770230e3fbb9999c9c2e',1,'Signal.h']]] +]; diff --git a/docs/search/enumvalues_3.js b/docs/search/enumvalues_3.js new file mode 100644 index 0000000..399f5cf --- /dev/null +++ b/docs/search/enumvalues_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['linear_0',['LINEAR',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284adc101ebf31c49c2d4b80b7c6f59f22cb',1,'Signal.h']]] +]; diff --git a/docs/search/enumvalues_4.js b/docs/search/enumvalues_4.js new file mode 100644 index 0000000..c286826 --- /dev/null +++ b/docs/search/enumvalues_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nans_0',['NANS',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4af4517d0db561241ccfcf150e1629767f',1,'Signal.h']]] +]; diff --git a/docs/search/enumvalues_5.js b/docs/search/enumvalues_5.js new file mode 100644 index 0000000..2df62e7 --- /dev/null +++ b/docs/search/enumvalues_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['zero_5forder_5fhold_0',['ZERO_ORDER_HOLD',['../Signal_8h.html#aa0081e804011c551ea0f4a596a64b284ad873f8ab97a3f6e892c8b834b23db574',1,'Signal.h']]], + ['zeros_1',['ZEROS',['../Signal_8h.html#a9943b8bd1a1a1cdb774553d44c12cde4a5d7341ec5879a7f47c5cb82c0fdf6b5f',1,'Signal.h']]] +]; diff --git a/docs/search/files_0.js b/docs/search/files_0.js new file mode 100644 index 0000000..399a7ee --- /dev/null +++ b/docs/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['integration_2eh_0',['Integration.h',['../Integration_8h.html',1,'']]] +]; diff --git a/docs/search/files_1.js b/docs/search/files_1.js new file mode 100644 index 0000000..1a6772a --- /dev/null +++ b/docs/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['models_2eh_0',['Models.h',['../Models_8h.html',1,'']]] +]; diff --git a/docs/search/files_2.js b/docs/search/files_2.js new file mode 100644 index 0000000..df4a0ce --- /dev/null +++ b/docs/search/files_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['signal_2eh_0',['Signal.h',['../Signal_8h.html',1,'']]], + ['signals_2eh_1',['Signals.h',['../Signals_8h.html',1,'']]], + ['state_2eh_2',['State.h',['../State_8h.html',1,'']]] +]; diff --git a/docs/search/files_3.js b/docs/search/files_3.js new file mode 100644 index 0000000..9f8c25f --- /dev/null +++ b/docs/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['utils_2eh_0',['Utils.h',['../Utils_8h.html',1,'']]] +]; diff --git a/docs/search/functions_0.js b/docs/search/functions_0.js new file mode 100644 index 0000000..18591c9 --- /dev/null +++ b/docs/search/functions_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dot_0',['dot',['../classSignal.html#a8b12b8bc1e74ddbadb67248fab16c461',1,'Signal::dot() const'],['../classSignal.html#a8989cbb307917a9c1f6331be2a5ae4e9',1,'Signal::dot(const double &t) const'],['../classSignal.html#aad31a21f4a7d572da1e06e407ccacecd',1,'Signal::dot(const std::vector< double > &t) const']]], + ['dotsignal_1',['dotSignal',['../classSignal.html#a95241f68d33194232ba1eea1747a5231',1,'Signal']]] +]; diff --git a/docs/search/functions_1.js b/docs/search/functions_1.js new file mode 100644 index 0000000..4a3a29b --- /dev/null +++ b/docs/search/functions_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gettimedelta_0',['getTimeDelta',['../namespacesignal__utils.html#ad7667542f893604d059a5d0022d2890c',1,'signal_utils']]] +]; diff --git a/docs/search/functions_2.js b/docs/search/functions_2.js new file mode 100644 index 0000000..44dcb2b --- /dev/null +++ b/docs/search/functions_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['hasparams_0',['hasParams',['../classModel.html#a4f059d658bfda1665bf44a36b7aaf8e5',1,'Model']]] +]; diff --git a/docs/search/functions_3.js b/docs/search/functions_3.js new file mode 100644 index 0000000..94aecbe --- /dev/null +++ b/docs/search/functions_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['identity_0',['identity',['../structState.html#a035f1f7193895463743b8ee58d75634f',1,'State']]], + ['integrate_1',['integrate',['../structIntegrator.html#ab3bebaa347f6019f3d2da2b2bcee5918',1,'Integrator::integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const bool &insertIntoHistory=false)'],['../structIntegrator.html#a8266e6bf3abd90d83fa7eb6b9270c0c4',1,'Integrator::integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const double &dt, const bool &insertIntoHistory=false)'],['../structEulerIntegratorSpec.html#a6c8d7aa2ecf83f7a348a575e5023639f',1,'EulerIntegratorSpec::integrate()'],['../structTrapezoidalIntegratorSpec.html#a38c21a876135bae55c62ec43c3a18a86',1,'TrapezoidalIntegratorSpec::integrate()'],['../structSimpsonIntegratorSpec.html#a6194da52902a391e4a9b251c05e6abf2',1,'SimpsonIntegratorSpec::integrate()']]] +]; diff --git a/docs/search/functions_4.js b/docs/search/functions_4.js new file mode 100644 index 0000000..386bff5 --- /dev/null +++ b/docs/search/functions_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['model_0',['Model',['../classModel.html#a3cbccc00606661a35110dbe111af54ad',1,'Model']]] +]; diff --git a/docs/search/functions_5.js b/docs/search/functions_5.js new file mode 100644 index 0000000..6a7c982 --- /dev/null +++ b/docs/search/functions_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['nans_0',['nans',['../structState.html#a9e331e0ecbed1ab2a03d9b3e5a457426',1,'State']]], + ['nanstype_1',['NansType',['../structScalarSignalSpec.html#a040a016b3023c9df47a913599e9af1e2',1,'ScalarSignalSpec::NansType()'],['../structVectorSignalSpec.html#a3a25051bf64d2677fc511bd026b7f6a2',1,'VectorSignalSpec::NansType()'],['../structManifoldSignalSpec.html#a8131da54a75205e3f61547afee1ccfcc',1,'ManifoldSignalSpec::NansType()'],['../structScalarStateSignalSpec.html#ac3878dfd1b21706364c34d09e6da37ce',1,'ScalarStateSignalSpec::NansType()'],['../structVectorStateSignalSpec.html#a4729eec41bab8eb5ed7b45aa8272be4d',1,'VectorStateSignalSpec::NansType()'],['../structManifoldStateSignalSpec.html#a7542075f653a7e8fba76702499936b17',1,'ManifoldStateSignalSpec::NansType()']]] +]; diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js new file mode 100644 index 0000000..7f6e26e --- /dev/null +++ b/docs/search/functions_6.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['operator_28_29_0',['operator()',['../classSignal.html#a2d222b24cb25f6f228a0c69d71d95918',1,'Signal::operator()() const'],['../classSignal.html#ad32d0b6b6bbc54ab8bd0fa63ed3039b9',1,'Signal::operator()(const double &t) const'],['../classSignal.html#abf8612dae8c835fa349c6f26201016eb',1,'Signal::operator()(const std::vector< double > &t) const']]], + ['operator_2a_1',['operator*',['../Signal_8h.html#ad77fa5fab1a3e9a6ca4d7e87364003b9',1,'operator*(const double &l, const Signal< BaseSignalSpec, TangentSignalSpec > &r): Signal.h'],['../Signal_8h.html#ae0b0bee5051aeec3c9cff9fd148d8cb5',1,'operator*(const Signal< BaseSignalSpec, TangentSignalSpec > &l, const double &r): Signal.h'],['../State_8h.html#a795d2ff5c53f24de712134f27e197001',1,'operator*(const double &l, const State< T, PTS, PD, TTS, TD > &r): State.h'],['../State_8h.html#a7fa016cf853be0dbc882359bf5b637f9',1,'operator*(const State< T, PTS, PD, TTS, TD > &l, const double &r): State.h']]], + ['operator_2a_3d_2',['operator*=',['../structState.html#af76faa98cfc18fb81afb0c86f7a0aa75',1,'State']]], + ['operator_2b_3',['operator+',['../Signal_8h.html#aa4dc7aa056ee91a7dc4ec540b6bc9cd3',1,'operator+(const Signal< BaseSignalSpec, TangentSignalSpec > &l, const Signal< TangentSignalSpec, TangentSignalSpec > &r): Signal.h'],['../State_8h.html#ac3e1ccc35f63b762bdd2c87478f8aad6',1,'operator+(const State< T, PTS, PD, TTS, TD > &l, const State< T, TTS, TD, TTS, TD > &r): State.h']]], + ['operator_2b_3d_4',['operator+=',['../structState.html#a7764970f0c29576eac07ab57c28261be',1,'State']]], + ['operator_2d_5',['operator-',['../Signal_8h.html#afd611b1d0ab8c1f43be72184926ec8ac',1,'operator-(const Signal< BaseSignalSpec, TangentSignalSpec > &l, const Signal< BaseSignalSpec, TangentSignalSpec > &r): Signal.h'],['../State_8h.html#ad7ac1ecc8c925fbc991d2fa8ca50d4eb',1,'operator-(const State< T, PTS, PD, TTS, TD > &l, const State< T, PTS, PD, TTS, TD > &r): State.h']]], + ['operator_2f_6',['operator/',['../State_8h.html#af3ec1e7d28a9aac4e1cde4c7f3438128',1,'operator/(const ScalarStateType< T > &l, const double &r): State.h'],['../State_8h.html#a0f388e10603fb47846a1147ff5b6839d',1,'operator/(const VectorStateType< T, d > &l, const double &r): State.h']]], + ['operator_3c_3c_7',['operator<<',['../Signal_8h.html#a47318c97bced9b7ee828c94c1a4eeb29',1,'operator<<(std::ostream &os, const ScalarSignal< T > &x): Signal.h'],['../Signal_8h.html#aeb7f6d79d7e692981221b685c0863d54',1,'operator<<(std::ostream &os, const VectorSignal< T, d > &x): Signal.h'],['../Signal_8h.html#a6a76598b459ea2e14353617de437c808',1,'operator<<(std::ostream &os, const ManifoldSignal< T, ManifoldType, d > &x): Signal.h'],['../State_8h.html#ae29ac55bb38cdbd3acce109857e8e7a4',1,'operator<<(std::ostream &os, const ScalarStateType< T > &x): State.h'],['../State_8h.html#af1eca508289d2fcbdecd0cc136eed43d',1,'operator<<(std::ostream &os, const VectorStateType< T, d > &x): State.h'],['../State_8h.html#a494fe74e8c2fc3cd3f7e14886eeb7d6c',1,'operator<<(std::ostream &os, const ManifoldStateType< T, ManifoldType, PD, TD > &x): State.h'],['../State_8h.html#ab6fe6347b40120d5f45445b1fc6596f4',1,'operator<<(std::ostream &os, const ScalarStateSignal< T > &x): State.h'],['../State_8h.html#a1675ff98779b45e08f5d169056e26a4d',1,'operator<<(std::ostream &os, const VectorStateSignal< T, d > &x): State.h'],['../State_8h.html#a6c0f637d1f1980a2de56f125e9cf4ec1',1,'operator<<(std::ostream &os, const ManifoldStateSignal< T, ManifoldType, PD, TD > &x): State.h']]] +]; diff --git a/docs/search/functions_7.js b/docs/search/functions_7.js new file mode 100644 index 0000000..f0e9665 --- /dev/null +++ b/docs/search/functions_7.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['reset_0',['reset',['../classModel.html#a823536a9764d6a35cce173573ee62e90',1,'Model::reset()'],['../classSignal.html#a914fd7f09ae0723c88fce310fd7c79fd',1,'Signal::reset()']]], + ['rigidbodyparams1d_1',['RigidBodyParams1D',['../structRigidBodyParams1D.html#ab2b9c3eb89bcbf0ac06a33e95725e0eb',1,'RigidBodyParams1D']]], + ['rigidbodyparams2d_2',['RigidBodyParams2D',['../structRigidBodyParams2D.html#a6febaa8c9f355105b908979da3dd1255',1,'RigidBodyParams2D']]], + ['rigidbodyparams3d_3',['RigidBodyParams3D',['../structRigidBodyParams3D.html#a8aa76fea7a0790ead025bf79e767d0cf',1,'RigidBodyParams3D']]] +]; diff --git a/docs/search/functions_8.js b/docs/search/functions_8.js new file mode 100644 index 0000000..13906b2 --- /dev/null +++ b/docs/search/functions_8.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['setderivativemethod_0',['setDerivativeMethod',['../classSignal.html#a8c25f302d3c4feaa1a4c1f6d59381d89',1,'Signal']]], + ['setextrapolationmethod_1',['setExtrapolationMethod',['../classSignal.html#ac3be206ae717ad5e977d8a108de9b9e4',1,'Signal']]], + ['setinterpolationmethod_2',['setInterpolationMethod',['../classSignal.html#af336f3d6a2d643040dff9fb5b4c20558',1,'Signal']]], + ['setparams_3',['setParams',['../classModel.html#a96533143a30ab87c379e411fcae59643',1,'Model']]], + ['signal_4',['Signal',['../classSignal.html#a8b5d0a9fba3546f500fed7e2102cd9a7',1,'Signal::Signal()'],['../classSignal.html#a81a95abda92d3efc0bd4b4ccba77e303',1,'Signal::Signal(const Signal &other)']]], + ['simulate_5',['simulate',['../classModel.html#ac7446138b27c8feba779ebfe8e82b99d',1,'Model::simulate(const InputSignalType &u, const double &tf, const bool &insertIntoHistory=false, const bool &calculateXddot=false)'],['../classModel.html#ac2550ae8ed888d167450160ce55286df',1,'Model::simulate(const InputSignalType &u, const double &tf, const double &dt, const bool &insertIntoHistory=false, const bool &calculateXddot=false)']]], + ['state_6',['State',['../structState.html#adcb914ebe25fe14622a945801267fa7a',1,'State::State()'],['../structState.html#a097d236bc46ca02a379e2fd188fe3e97',1,'State::State(T *arr)'],['../structState.html#aa10b450dbe8a806a0b203521b4738c0c',1,'State::State(const State &other)']]] +]; diff --git a/docs/search/functions_9.js b/docs/search/functions_9.js new file mode 100644 index 0000000..710af7d --- /dev/null +++ b/docs/search/functions_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['t_0',['t',['../classModel.html#a7661852411b9ffd59240d5d5ca0e4dd3',1,'Model::t()'],['../classSignal.html#a058783faf86f369b296c50d4e72c0881',1,'Signal::t()']]] +]; diff --git a/docs/search/functions_a.js b/docs/search/functions_a.js new file mode 100644 index 0000000..552ce7e --- /dev/null +++ b/docs/search/functions_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['update_0',['update',['../structTranslationalDynamicsBase.html#a3f1e02018ec014fe38ba851dc0d5b2ed',1,'TranslationalDynamicsBase::update()'],['../structRotationalDynamics1DOF.html#a433f042fafdcff07948eb952e47f13b6',1,'RotationalDynamics1DOF::update()'],['../structRotationalDynamics3DOF.html#aee5958f7949268650c00097b2a871252',1,'RotationalDynamics3DOF::update()'],['../structRigidBodyDynamics3DOF.html#acafe68f9e9ea78f54bc70d64a1b39d9c',1,'RigidBodyDynamics3DOF::update()'],['../structRigidBodyDynamics6DOF.html#ae0d9bb27da7f804a1f8dc4923546a95d',1,'RigidBodyDynamics6DOF::update()'],['../classSignal.html#ab91f52b80939a6c67b6863ee463b4ff0',1,'Signal::update(const double &_t, const BaseType &_x, bool insertHistory=false)'],['../classSignal.html#a6c7174c9bb20970ebb3de64687f771d8',1,'Signal::update(const double &_t, const BaseType &_x, const TangentType &_xdot, bool insertHistory=false)'],['../classSignal.html#a5530308ef517fd0021f510d47c390dc0',1,'Signal::update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory)'],['../classSignal.html#a74929b7332876f5aeddc9a05d26d3d32',1,'Signal::update(const std::vector< double > &_tHistory, const std::vector< BaseType > &_xHistory, const std::vector< TangentType > &_xdotHistory)']]] +]; diff --git a/docs/search/functions_b.js b/docs/search/functions_b.js new file mode 100644 index 0000000..98958cd --- /dev/null +++ b/docs/search/functions_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zerotype_0',['ZeroType',['../structScalarSignalSpec.html#a941ad7ca4c5943d3b2244e1126d1febf',1,'ScalarSignalSpec::ZeroType()'],['../structVectorSignalSpec.html#a4c535f5d5b25faa7148f8719d74693fd',1,'VectorSignalSpec::ZeroType()'],['../structManifoldSignalSpec.html#a445c0d7b5e23264b3a08b881f3c68a72',1,'ManifoldSignalSpec::ZeroType()'],['../structScalarStateSignalSpec.html#a0dc57853395e3c57d6447a23ae513b91',1,'ScalarStateSignalSpec::ZeroType()'],['../structVectorStateSignalSpec.html#ae659b96e95497b25e711fab331037c21',1,'VectorStateSignalSpec::ZeroType()'],['../structManifoldStateSignalSpec.html#adca9f48f26d97f95b2083b9e55bb58cb',1,'ManifoldStateSignalSpec::ZeroType()']]] +]; diff --git a/docs/search/mag.svg b/docs/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/docs/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/search/mag_d.svg b/docs/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/docs/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/docs/search/mag_sel.svg b/docs/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/docs/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/search/mag_seld.svg b/docs/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/docs/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/docs/search/namespaces_0.js b/docs/search/namespaces_0.js new file mode 100644 index 0000000..eef63d3 --- /dev/null +++ b/docs/search/namespaces_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['signal_5futils_0',['signal_utils',['../namespacesignal__utils.html',1,'']]] +]; diff --git a/docs/search/pages_0.js b/docs/search/pages_0.js new file mode 100644 index 0000000..cf942cf --- /dev/null +++ b/docs/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['cpp_20library_20documentation_0',['signals-cpp Library Documentation',['../index.html',1,'']]] +]; diff --git a/docs/search/pages_1.js b/docs/search/pages_1.js new file mode 100644 index 0000000..7b10194 --- /dev/null +++ b/docs/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['documentation_0',['signals-cpp Library Documentation',['../index.html',1,'']]] +]; diff --git a/docs/search/pages_2.js b/docs/search/pages_2.js new file mode 100644 index 0000000..16b3edc --- /dev/null +++ b/docs/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['library_20documentation_0',['signals-cpp Library Documentation',['../index.html',1,'']]] +]; diff --git a/docs/search/pages_3.js b/docs/search/pages_3.js new file mode 100644 index 0000000..6ff6d59 --- /dev/null +++ b/docs/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['signals_20cpp_20library_20documentation_0',['signals-cpp Library Documentation',['../index.html',1,'']]] +]; diff --git a/docs/search/related_0.js b/docs/search/related_0.js new file mode 100644 index 0000000..633202b --- /dev/null +++ b/docs/search/related_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['operator_2a_0',['operator*',['../classSignal.html#ad61a2749da48601dcf27bedaa0cf54fd',1,'Signal::operator*(const double &l, const Signal< BSS, TSS > &r)'],['../classSignal.html#ae5d88905516fd17257964442b0830584',1,'Signal::operator*(const Signal< BSS, TSS > &l, const double &r)']]], + ['operator_2b_1',['operator+',['../classSignal.html#aead0dbc78a90fbd6ad3f86ab61ed65f7',1,'Signal']]], + ['operator_2d_2',['operator-',['../classSignal.html#a22d02130c5fec79a084ef4d1a28521dc',1,'Signal']]] +]; diff --git a/docs/search/search.css b/docs/search/search.css new file mode 100644 index 0000000..d7b0f90 --- /dev/null +++ b/docs/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: url('mag_sel.svg'); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: url('mag.svg'); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial,Verdana,sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: black; +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial,Verdana,sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: black; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: black; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: white; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid black; + background-color: #EEF1F7; + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: #EEF1F7; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial,Verdana,sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial,Verdana,sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/search/search.js b/docs/search/search.js new file mode 100644 index 0000000..666af01 --- /dev/null +++ b/docs/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    EulerIntegratorSpec Member List
    +
    +
    + +

    This is the complete list of members for EulerIntegratorSpec, including all inherited members.

    + + +
    integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)EulerIntegratorSpecinlinestatic
    +
    + + + + diff --git a/docs/structEulerIntegratorSpec.html b/docs/structEulerIntegratorSpec.html new file mode 100644 index 0000000..8375992 --- /dev/null +++ b/docs/structEulerIntegratorSpec.html @@ -0,0 +1,203 @@ + + + + + + + +signals-cpp: EulerIntegratorSpec Struct Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    EulerIntegratorSpec Struct Reference
    +
    +
    + +

    Specification for numerically integrating a black box function using Euler's method. + More...

    + +

    #include <Integration.h>

    + + + + + + +

    +Static Public Member Functions

    template<typename BaseSignalSpec, typename TangentSignalSpec>
    static bool integrate (Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)
     Euler integration implementation.
     
    +

    Detailed Description

    +

    Specification for numerically integrating a black box function using Euler's method.

    +

    Member Function Documentation

    + +

    ◆ integrate()

    + +
    +
    +
    +template<typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool EulerIntegratorSpec::integrate (Signal< BaseSignalSpec, TangentSignalSpec > & xInt,
    const Signal< TangentSignalSpec, TangentSignalSpec > & x,
    const double & t0,
    const double & tf,
    const bool & insertIntoHistory )
    +
    +inlinestatic
    +
    + +

    Euler integration implementation.

    +
    Parameters
    + + + + + + +
    xIntThe output signal representing the integration.
    xThe input signal to be integrated.
    t0The start time for the integration.
    tfThe time to integrate to. Ideally the delta from the start time is small.
    insertIntoHistoryWhether to store the result in xInt's memory.
    +
    +
    +
    Returns
    Whether the integration was successful.
    +

    Euler integration increments the current integral by

    +

    \(x(t_f)\Delta t\)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structIntegrator-members.html b/docs/structIntegrator-members.html new file mode 100644 index 0000000..4cf6529 --- /dev/null +++ b/docs/structIntegrator-members.html @@ -0,0 +1,124 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Integrator< IntegratorType > Member List
    +
    +
    + +

    This is the complete list of members for Integrator< IntegratorType >, including all inherited members.

    + + + +
    integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const bool &insertIntoHistory=false)Integrator< IntegratorType >inlinestatic
    integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const double &dt, const bool &insertIntoHistory=false)Integrator< IntegratorType >inlinestatic
    +
    + + + + diff --git a/docs/structIntegrator.html b/docs/structIntegrator.html new file mode 100644 index 0000000..76af14e --- /dev/null +++ b/docs/structIntegrator.html @@ -0,0 +1,270 @@ + + + + + + + +signals-cpp: Integrator< IntegratorType > Struct Template Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    Integrator< IntegratorType > Struct Template Reference
    +
    +
    + +

    Base type for all integrators. + More...

    + +

    #include <Integration.h>

    + + + + + + + + + + +

    +Static Public Member Functions

    template<typename BaseSignalSpec, typename TangentSignalSpec>
    static bool integrate (Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const bool &insertIntoHistory=false)
     Integrate a signal from the current time to the specified end time.
     
    template<typename BaseSignalSpec, typename TangentSignalSpec>
    static bool integrate (Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &tf, const double &dt, const bool &insertIntoHistory=false)
     Integrate a signal from the current time to the specified end time, chunked up into smaller integration increments.
     
    +

    Detailed Description

    +
    template<typename IntegratorType>
    +struct Integrator< IntegratorType >

    Base type for all integrators.

    +

    Provides methods for incremental (e.g., for control) or holistic (e.g., for open-loop simulation) integrations of arbitrary signal types.

    +

    Derived types:

    + +

    Member Function Documentation

    + +

    ◆ integrate() [1/2]

    + +
    +
    +
    +template<typename IntegratorType>
    +
    +template<typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    static bool Integrator< IntegratorType >::integrate (Signal< BaseSignalSpec, TangentSignalSpec > & xInt,
    const Signal< TangentSignalSpec, TangentSignalSpec > & x,
    const double & tf,
    const bool & insertIntoHistory = false )
    +
    +inlinestatic
    +
    + +

    Integrate a signal from the current time to the specified end time.

    +
    Parameters
    + + + + + +
    xIntThe output signal representing the integration.
    xThe input signal to be integrated.
    tfThe time to integrate to. Ideally the delta from the current time is small.
    insertIntoHistoryWhether to store the result in xInt's memory.
    +
    +
    +
    Returns
    Whether the integration was successful.
    + +
    +
    + +

    ◆ integrate() [2/2]

    + +
    +
    +
    +template<typename IntegratorType>
    +
    +template<typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool Integrator< IntegratorType >::integrate (Signal< BaseSignalSpec, TangentSignalSpec > & xInt,
    const Signal< TangentSignalSpec, TangentSignalSpec > & x,
    const double & tf,
    const double & dt,
    const bool & insertIntoHistory = false )
    +
    +inlinestatic
    +
    + +

    Integrate a signal from the current time to the specified end time, chunked up into smaller integration increments.

    +
    Parameters
    + + + + + + +
    xIntThe output signal representing the integration.
    xThe input signal to be integrated.
    tfThe time to integrate to.
    dtTime delta length by which to chunk up the integrations. Ideally this is small.
    insertIntoHistoryWhether to store the result in xInt's memory.
    +
    +
    +
    Returns
    Whether the integration was successful.
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structManifoldSignalSpec-members.html b/docs/structManifoldSignalSpec-members.html new file mode 100644 index 0000000..b992910 --- /dev/null +++ b/docs/structManifoldSignalSpec-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    ManifoldSignalSpec< ManifoldType > Member List
    +
    +
    + +

    This is the complete list of members for ManifoldSignalSpec< ManifoldType >, including all inherited members.

    + + + + +
    NansType()ManifoldSignalSpec< ManifoldType >inlinestatic
    Type typedefManifoldSignalSpec< ManifoldType >
    ZeroType()ManifoldSignalSpec< ManifoldType >inlinestatic
    +
    + + + + diff --git a/docs/structManifoldSignalSpec.html b/docs/structManifoldSignalSpec.html new file mode 100644 index 0000000..cad70f0 --- /dev/null +++ b/docs/structManifoldSignalSpec.html @@ -0,0 +1,214 @@ + + + + + + + +signals-cpp: ManifoldSignalSpec< ManifoldType > Struct Template Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    ManifoldSignalSpec< ManifoldType > Struct Template Reference
    +
    +
    + +

    #include <Signal.h>

    + + + + +

    +Public Types

    using Type = ManifoldType
     
    + + + + + +

    +Static Public Member Functions

    static Type ZeroType ()
     
    static Type NansType ()
     
    +

    Member Typedef Documentation

    + +

    ◆ Type

    + +
    +
    +
    +template<typename ManifoldType>
    + + + + +
    using ManifoldSignalSpec< ManifoldType >::Type = ManifoldType
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ NansType()

    + +
    +
    +
    +template<typename ManifoldType>
    + + + + + +
    + + + + + + + +
    static Type ManifoldSignalSpec< ManifoldType >::NansType ()
    +
    +inlinestatic
    +
    + +
    +
    + +

    ◆ ZeroType()

    + +
    +
    +
    +template<typename ManifoldType>
    + + + + + +
    + + + + + + + +
    static Type ManifoldSignalSpec< ManifoldType >::ZeroType ()
    +
    +inlinestatic
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structManifoldSignalSpec.js b/docs/structManifoldSignalSpec.js new file mode 100644 index 0000000..eb895e0 --- /dev/null +++ b/docs/structManifoldSignalSpec.js @@ -0,0 +1,4 @@ +var structManifoldSignalSpec = +[ + [ "Type", "structManifoldSignalSpec.html#ae6292debacd46f629429d03cf7e9a342", null ] +]; \ No newline at end of file diff --git a/docs/structManifoldStateSignalSpec-members.html b/docs/structManifoldStateSignalSpec-members.html new file mode 100644 index 0000000..2ac9c06 --- /dev/null +++ b/docs/structManifoldStateSignalSpec-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    ManifoldStateSignalSpec< T, ManifoldType, PD, TD > Member List
    +
    + +
    + + + + diff --git a/docs/structManifoldStateSignalSpec.html b/docs/structManifoldStateSignalSpec.html new file mode 100644 index 0000000..d916ac2 --- /dev/null +++ b/docs/structManifoldStateSignalSpec.html @@ -0,0 +1,214 @@ + + + + + + + +signals-cpp: ManifoldStateSignalSpec< T, ManifoldType, PD, TD > Struct Template Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    ManifoldStateSignalSpec< T, ManifoldType, PD, TD > Struct Template Reference
    +
    +
    + +

    #include <State.h>

    + + + + +

    +Public Types

    using Type = ManifoldStateType<T, ManifoldType, PD, TD>
     
    + + + + + +

    +Static Public Member Functions

    static Type ZeroType ()
     
    static Type NansType ()
     
    +

    Member Typedef Documentation

    + +

    ◆ Type

    + +
    +
    +
    +template<typename T, typename ManifoldType, size_t PD, size_t TD>
    + + + + +
    using ManifoldStateSignalSpec< T, ManifoldType, PD, TD >::Type = ManifoldStateType<T, ManifoldType, PD, TD>
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ NansType()

    + +
    +
    +
    +template<typename T, typename ManifoldType, size_t PD, size_t TD>
    + + + + + +
    + + + + + + + +
    static Type ManifoldStateSignalSpec< T, ManifoldType, PD, TD >::NansType ()
    +
    +inlinestatic
    +
    + +
    +
    + +

    ◆ ZeroType()

    + +
    +
    +
    +template<typename T, typename ManifoldType, size_t PD, size_t TD>
    + + + + + +
    + + + + + + + +
    static Type ManifoldStateSignalSpec< T, ManifoldType, PD, TD >::ZeroType ()
    +
    +inlinestatic
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structManifoldStateSignalSpec.js b/docs/structManifoldStateSignalSpec.js new file mode 100644 index 0000000..8fa2d7c --- /dev/null +++ b/docs/structManifoldStateSignalSpec.js @@ -0,0 +1,4 @@ +var structManifoldStateSignalSpec = +[ + [ "Type", "structManifoldStateSignalSpec.html#aef8d411c012125303e1faa1d66b35c1c", null ] +]; \ No newline at end of file diff --git a/docs/structRigidBodyDynamics3DOF-members.html b/docs/structRigidBodyDynamics3DOF-members.html new file mode 100644 index 0000000..d7619c7 --- /dev/null +++ b/docs/structRigidBodyDynamics3DOF-members.html @@ -0,0 +1,131 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RigidBodyDynamics3DOF< T > Member List
    +
    +
    + +

    This is the complete list of members for RigidBodyDynamics3DOF< T >, including all inherited members.

    + + + + + + + + + + +
    InputSignalType typedefRigidBodyDynamics3DOF< T >
    InputType typedefRigidBodyDynamics3DOF< T >
    ParamsType typedefRigidBodyDynamics3DOF< T >
    StateDotDotType typedefRigidBodyDynamics3DOF< T >
    StateDotSignalType typedefRigidBodyDynamics3DOF< T >
    StateDotType typedefRigidBodyDynamics3DOF< T >
    StateSignalType typedefRigidBodyDynamics3DOF< T >
    StateType typedefRigidBodyDynamics3DOF< T >
    update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)RigidBodyDynamics3DOF< T >inlinestatic
    +
    + + + + diff --git a/docs/structRigidBodyDynamics3DOF.html b/docs/structRigidBodyDynamics3DOF.html new file mode 100644 index 0000000..2dbefbc --- /dev/null +++ b/docs/structRigidBodyDynamics3DOF.html @@ -0,0 +1,367 @@ + + + + + + + +signals-cpp: RigidBodyDynamics3DOF< T > Struct Template Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RigidBodyDynamics3DOF< T > Struct Template Reference
    +
    +
    + +

    Definition of the dynamics for planar motion of a mass that's allowed to rotate. + More...

    + +

    #include <Models.h>

    + + + + + + + + + + + + + + + + + + +

    +Public Types

    using InputSignalType = Vector3Signal<T>
     
    using StateSignalType = SE2StateSignal<T>
     
    using StateDotSignalType = Vector3StateSignal<T>
     
    using InputType = typename InputSignalType::BaseType
     
    using StateType = typename StateSignalType::BaseType
     
    using StateDotType = typename StateDotSignalType::BaseType
     
    using StateDotDotType = typename StateDotSignalType::TangentType
     
    using ParamsType = RigidBodyParams2D
     
    + + + + +

    +Static Public Member Functions

    static bool update (StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
     Update a provided state time derivative given an input and time interval.
     
    +

    Detailed Description

    +
    template<typename T>
    +struct RigidBodyDynamics3DOF< T >

    Definition of the dynamics for planar motion of a mass that's allowed to rotate.

    +

    Member Typedef Documentation

    + +

    ◆ InputSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::InputSignalType = Vector3Signal<T>
    +
    + +
    +
    + +

    ◆ InputType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::InputType = typename InputSignalType::BaseType
    +
    + +
    +
    + +

    ◆ ParamsType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::ParamsType = RigidBodyParams2D
    +
    + +
    +
    + +

    ◆ StateDotDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::StateDotDotType = typename StateDotSignalType::TangentType
    +
    + +
    +
    + +

    ◆ StateDotSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::StateDotSignalType = Vector3StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::StateDotType = typename StateDotSignalType::BaseType
    +
    + +
    +
    + +

    ◆ StateSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::StateSignalType = SE2StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics3DOF< T >::StateType = typename StateSignalType::BaseType
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ update()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool RigidBodyDynamics3DOF< T >::update (StateDotSignalType & xdot,
    const StateSignalType & x,
    const InputSignalType & u,
    const double & t0,
    const double & tf,
    const ParamsType & params,
    const bool & insertIntoHistory = false,
    const bool & calculateXddot = false )
    +
    +inlinestatic
    +
    + +

    Update a provided state time derivative given an input and time interval.

    +
    Parameters
    + + + + + + + + + +
    xdotThe state time derivative signal to update.
    xThe state signal to reference for the dynamics.
    uThe input signal to reference for the dynamics.
    t0The time at which to sample the state and input.
    tfThe time at which to modify the state time derivative.
    paramsThe 2D rigid body model parameters.
    insertIntoHistoryWhether to insert the answer into state time derivative signal history.
    calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRigidBodyDynamics3DOF.js b/docs/structRigidBodyDynamics3DOF.js new file mode 100644 index 0000000..67406e7 --- /dev/null +++ b/docs/structRigidBodyDynamics3DOF.js @@ -0,0 +1,11 @@ +var structRigidBodyDynamics3DOF = +[ + [ "InputSignalType", "structRigidBodyDynamics3DOF.html#a4341d5e4a676e15edc8f8faafef5431a", null ], + [ "InputType", "structRigidBodyDynamics3DOF.html#aa90232643a368b1d4b9fd618ae8d57f7", null ], + [ "ParamsType", "structRigidBodyDynamics3DOF.html#afa1ade3cc027b78a2d2c65df867d52b0", null ], + [ "StateDotDotType", "structRigidBodyDynamics3DOF.html#a562a8cc5e6e8dca19982509022a22ba4", null ], + [ "StateDotSignalType", "structRigidBodyDynamics3DOF.html#a28d138392ca0069c5e6274f78fd08e29", null ], + [ "StateDotType", "structRigidBodyDynamics3DOF.html#a7a9fa29ba97531d856e87560806a805c", null ], + [ "StateSignalType", "structRigidBodyDynamics3DOF.html#a0c346a983bc929f1f7a6e5d2be3a0841", null ], + [ "StateType", "structRigidBodyDynamics3DOF.html#a448c5efb998f492d1518eb0d2d7ded74", null ] +]; \ No newline at end of file diff --git a/docs/structRigidBodyDynamics6DOF-members.html b/docs/structRigidBodyDynamics6DOF-members.html new file mode 100644 index 0000000..3ff2555 --- /dev/null +++ b/docs/structRigidBodyDynamics6DOF-members.html @@ -0,0 +1,131 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RigidBodyDynamics6DOF< T > Member List
    +
    +
    + +

    This is the complete list of members for RigidBodyDynamics6DOF< T >, including all inherited members.

    + + + + + + + + + + +
    InputSignalType typedefRigidBodyDynamics6DOF< T >
    InputType typedefRigidBodyDynamics6DOF< T >
    ParamsType typedefRigidBodyDynamics6DOF< T >
    StateDotDotType typedefRigidBodyDynamics6DOF< T >
    StateDotSignalType typedefRigidBodyDynamics6DOF< T >
    StateDotType typedefRigidBodyDynamics6DOF< T >
    StateSignalType typedefRigidBodyDynamics6DOF< T >
    StateType typedefRigidBodyDynamics6DOF< T >
    update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)RigidBodyDynamics6DOF< T >inlinestatic
    +
    + + + + diff --git a/docs/structRigidBodyDynamics6DOF.html b/docs/structRigidBodyDynamics6DOF.html new file mode 100644 index 0000000..e7bd31e --- /dev/null +++ b/docs/structRigidBodyDynamics6DOF.html @@ -0,0 +1,367 @@ + + + + + + + +signals-cpp: RigidBodyDynamics6DOF< T > Struct Template Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RigidBodyDynamics6DOF< T > Struct Template Reference
    +
    +
    + +

    Definition of the dynamics for a 3D rigid body that can rotate about any axis. + More...

    + +

    #include <Models.h>

    + + + + + + + + + + + + + + + + + + +

    +Public Types

    using InputSignalType = Vector6Signal<T>
     
    using StateSignalType = SE3StateSignal<T>
     
    using StateDotSignalType = Vector6StateSignal<T>
     
    using InputType = typename InputSignalType::BaseType
     
    using StateType = typename StateSignalType::BaseType
     
    using StateDotType = typename StateDotSignalType::BaseType
     
    using StateDotDotType = typename StateDotSignalType::TangentType
     
    using ParamsType = RigidBodyParams3D
     
    + + + + +

    +Static Public Member Functions

    static bool update (StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
     Update a provided state time derivative given an input and time interval.
     
    +

    Detailed Description

    +
    template<typename T>
    +struct RigidBodyDynamics6DOF< T >

    Definition of the dynamics for a 3D rigid body that can rotate about any axis.

    +

    Member Typedef Documentation

    + +

    ◆ InputSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::InputSignalType = Vector6Signal<T>
    +
    + +
    +
    + +

    ◆ InputType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::InputType = typename InputSignalType::BaseType
    +
    + +
    +
    + +

    ◆ ParamsType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::ParamsType = RigidBodyParams3D
    +
    + +
    +
    + +

    ◆ StateDotDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::StateDotDotType = typename StateDotSignalType::TangentType
    +
    + +
    +
    + +

    ◆ StateDotSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::StateDotSignalType = Vector6StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::StateDotType = typename StateDotSignalType::BaseType
    +
    + +
    +
    + +

    ◆ StateSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::StateSignalType = SE3StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RigidBodyDynamics6DOF< T >::StateType = typename StateSignalType::BaseType
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ update()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool RigidBodyDynamics6DOF< T >::update (StateDotSignalType & xdot,
    const StateSignalType & x,
    const InputSignalType & u,
    const double & t0,
    const double & tf,
    const ParamsType & params,
    const bool & insertIntoHistory = false,
    const bool & calculateXddot = false )
    +
    +inlinestatic
    +
    + +

    Update a provided state time derivative given an input and time interval.

    +
    Parameters
    + + + + + + + + + +
    xdotThe state time derivative signal to update.
    xThe state signal to reference for the dynamics.
    uThe input signal to reference for the dynamics.
    t0The time at which to sample the state and input.
    tfThe time at which to modify the state time derivative.
    paramsThe 3D rigid body model parameters.
    insertIntoHistoryWhether to insert the answer into state time derivative signal history.
    calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRigidBodyDynamics6DOF.js b/docs/structRigidBodyDynamics6DOF.js new file mode 100644 index 0000000..4877c13 --- /dev/null +++ b/docs/structRigidBodyDynamics6DOF.js @@ -0,0 +1,11 @@ +var structRigidBodyDynamics6DOF = +[ + [ "InputSignalType", "structRigidBodyDynamics6DOF.html#a8927301269f2ce616317819c769b9364", null ], + [ "InputType", "structRigidBodyDynamics6DOF.html#ac8780c98b59889f8329aa467a5b375fe", null ], + [ "ParamsType", "structRigidBodyDynamics6DOF.html#ad252337a912dcd1cfaa097d9c2d5814e", null ], + [ "StateDotDotType", "structRigidBodyDynamics6DOF.html#a32c92b85c94f66739358385a0a3a07fc", null ], + [ "StateDotSignalType", "structRigidBodyDynamics6DOF.html#afcafc7961087b27b239ad998e436da9a", null ], + [ "StateDotType", "structRigidBodyDynamics6DOF.html#aa664579d3d691fcd4c5824b242dd2061", null ], + [ "StateSignalType", "structRigidBodyDynamics6DOF.html#ad4e0605bf2a0c90acbe9a1a333b9b952", null ], + [ "StateType", "structRigidBodyDynamics6DOF.html#adf5c3e5f6090032d18019c7aeab91f51", null ] +]; \ No newline at end of file diff --git a/docs/structRigidBodyParams1D-members.html b/docs/structRigidBodyParams1D-members.html new file mode 100644 index 0000000..b073d32 --- /dev/null +++ b/docs/structRigidBodyParams1D-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RigidBodyParams1D Member List
    +
    +
    + +

    This is the complete list of members for RigidBodyParams1D, including all inherited members.

    + + + + +
    gRigidBodyParams1D
    mRigidBodyParams1D
    RigidBodyParams1D()RigidBodyParams1Dinline
    +
    + + + + diff --git a/docs/structRigidBodyParams1D.html b/docs/structRigidBodyParams1D.html new file mode 100644 index 0000000..ebaa789 --- /dev/null +++ b/docs/structRigidBodyParams1D.html @@ -0,0 +1,210 @@ + + + + + + + +signals-cpp: RigidBodyParams1D Struct Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RigidBodyParams1D Struct Reference
    +
    +
    + +

    Parameters for a 1D rigid body model. + More...

    + +

    #include <Models.h>

    + + + + +

    +Public Member Functions

     RigidBodyParams1D ()
     
    + + + + + + + +

    +Public Attributes

    double m
     Model mass.
     
    double g
     Gravitational constant.
     
    +

    Detailed Description

    +

    Parameters for a 1D rigid body model.

    +

    Picture a point mass existing on a line, whether horizontal or vertical.

    +

    Constructor & Destructor Documentation

    + +

    ◆ RigidBodyParams1D()

    + +
    +
    + + + + + +
    + + + + + + + +
    RigidBodyParams1D::RigidBodyParams1D ()
    +
    +inline
    +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ g

    + +
    +
    + + + + +
    double RigidBodyParams1D::g
    +
    + +

    Gravitational constant.

    +

    Essentially defines which way is "down." Set to zero if e.g., the 1D dimension is horizontal.

    + +
    +
    + +

    ◆ m

    + +
    +
    + + + + +
    double RigidBodyParams1D::m
    +
    + +

    Model mass.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRigidBodyParams1D.js b/docs/structRigidBodyParams1D.js new file mode 100644 index 0000000..83288f1 --- /dev/null +++ b/docs/structRigidBodyParams1D.js @@ -0,0 +1,6 @@ +var structRigidBodyParams1D = +[ + [ "RigidBodyParams1D", "structRigidBodyParams1D.html#ab2b9c3eb89bcbf0ac06a33e95725e0eb", null ], + [ "g", "structRigidBodyParams1D.html#a823d208bcbabadd83d3cc8f222973c95", null ], + [ "m", "structRigidBodyParams1D.html#a2f5a1c0e6320c14d72d0ff98ad979332", null ] +]; \ No newline at end of file diff --git a/docs/structRigidBodyParams2D-members.html b/docs/structRigidBodyParams2D-members.html new file mode 100644 index 0000000..fae0ab8 --- /dev/null +++ b/docs/structRigidBodyParams2D-members.html @@ -0,0 +1,126 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RigidBodyParams2D Member List
    +
    +
    + +

    This is the complete list of members for RigidBodyParams2D, including all inherited members.

    + + + + + +
    gRigidBodyParams2D
    JRigidBodyParams2D
    mRigidBodyParams2D
    RigidBodyParams2D()RigidBodyParams2Dinline
    +
    + + + + diff --git a/docs/structRigidBodyParams2D.html b/docs/structRigidBodyParams2D.html new file mode 100644 index 0000000..3a15395 --- /dev/null +++ b/docs/structRigidBodyParams2D.html @@ -0,0 +1,230 @@ + + + + + + + +signals-cpp: RigidBodyParams2D Struct Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RigidBodyParams2D Struct Reference
    +
    +
    + +

    Parameters for a 2D rigid body model. + More...

    + +

    #include <Models.h>

    + + + + +

    +Public Member Functions

     RigidBodyParams2D ()
     
    + + + + + + + + + + +

    +Public Attributes

    double m
     Model mass.
     
    double J
     Moment of inertia.
     
    Vector2d g
     Gravitational vector.
     
    +

    Detailed Description

    +

    Parameters for a 2D rigid body model.

    +

    Picture a mass (not necessarily a point mass) confined to a 2D plane.

    +

    Constructor & Destructor Documentation

    + +

    ◆ RigidBodyParams2D()

    + +
    +
    + + + + + +
    + + + + + + + +
    RigidBodyParams2D::RigidBodyParams2D ()
    +
    +inline
    +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ g

    + +
    +
    + + + + +
    Vector2d RigidBodyParams2D::g
    +
    + +

    Gravitational vector.

    +

    Essentially defines which way is "down." Set to all zeroes if e.g., the 2D plane represents flat ground.

    + +
    +
    + +

    ◆ J

    + +
    +
    + + + + +
    double RigidBodyParams2D::J
    +
    + +

    Moment of inertia.

    +

    The moment of inertia is about the axis coming out of the 2D plane.

    + +
    +
    + +

    ◆ m

    + +
    +
    + + + + +
    double RigidBodyParams2D::m
    +
    + +

    Model mass.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRigidBodyParams2D.js b/docs/structRigidBodyParams2D.js new file mode 100644 index 0000000..695919a --- /dev/null +++ b/docs/structRigidBodyParams2D.js @@ -0,0 +1,7 @@ +var structRigidBodyParams2D = +[ + [ "RigidBodyParams2D", "structRigidBodyParams2D.html#a6febaa8c9f355105b908979da3dd1255", null ], + [ "g", "structRigidBodyParams2D.html#ab212f53241edb1bf232499a6ba963258", null ], + [ "J", "structRigidBodyParams2D.html#aaefd836b5e013be87bc317aaba261a25", null ], + [ "m", "structRigidBodyParams2D.html#a5e37a979a1a69333bcc5576d14397185", null ] +]; \ No newline at end of file diff --git a/docs/structRigidBodyParams3D-members.html b/docs/structRigidBodyParams3D-members.html new file mode 100644 index 0000000..52ce27b --- /dev/null +++ b/docs/structRigidBodyParams3D-members.html @@ -0,0 +1,126 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RigidBodyParams3D Member List
    +
    +
    + +

    This is the complete list of members for RigidBodyParams3D, including all inherited members.

    + + + + + +
    gRigidBodyParams3D
    JRigidBodyParams3D
    mRigidBodyParams3D
    RigidBodyParams3D()RigidBodyParams3Dinline
    +
    + + + + diff --git a/docs/structRigidBodyParams3D.html b/docs/structRigidBodyParams3D.html new file mode 100644 index 0000000..20a7f17 --- /dev/null +++ b/docs/structRigidBodyParams3D.html @@ -0,0 +1,230 @@ + + + + + + + +signals-cpp: RigidBodyParams3D Struct Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RigidBodyParams3D Struct Reference
    +
    +
    + +

    Parameters for a 3D rigid body model. + More...

    + +

    #include <Models.h>

    + + + + +

    +Public Member Functions

     RigidBodyParams3D ()
     
    + + + + + + + + + + +

    +Public Attributes

    double m
     Model mass.
     
    Matrix3d J
     Moment of inertia.
     
    Vector3d g
     Gravitational vector.
     
    +

    Detailed Description

    +

    Parameters for a 3D rigid body model.

    +

    Picture a mass (not necessarily a point mass) free to move around 3D space.

    +

    Constructor & Destructor Documentation

    + +

    ◆ RigidBodyParams3D()

    + +
    +
    + + + + + +
    + + + + + + + +
    RigidBodyParams3D::RigidBodyParams3D ()
    +
    +inline
    +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ g

    + +
    +
    + + + + +
    Vector3d RigidBodyParams3D::g
    +
    + +

    Gravitational vector.

    +

    Essentially defines which way is "down." Set to all zeroes if there's no gravity.

    + +
    +
    + +

    ◆ J

    + +
    +
    + + + + +
    Matrix3d RigidBodyParams3D::J
    +
    + +

    Moment of inertia.

    +

    Moments of inertia about all three principal axes, represented as \(\boldsymbol{J}\in\mathbb{R}^{3\times 3}\).

    + +
    +
    + +

    ◆ m

    + +
    +
    + + + + +
    double RigidBodyParams3D::m
    +
    + +

    Model mass.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRigidBodyParams3D.js b/docs/structRigidBodyParams3D.js new file mode 100644 index 0000000..6c7b237 --- /dev/null +++ b/docs/structRigidBodyParams3D.js @@ -0,0 +1,7 @@ +var structRigidBodyParams3D = +[ + [ "RigidBodyParams3D", "structRigidBodyParams3D.html#a8aa76fea7a0790ead025bf79e767d0cf", null ], + [ "g", "structRigidBodyParams3D.html#a87b9c6a467ebcd6805a1d9419e6149d1", null ], + [ "J", "structRigidBodyParams3D.html#a049fb70b2897579849053dfe2ea840e6", null ], + [ "m", "structRigidBodyParams3D.html#acfa4c165c3278306dac4c0f51819e694", null ] +]; \ No newline at end of file diff --git a/docs/structRotationalDynamics1DOF-members.html b/docs/structRotationalDynamics1DOF-members.html new file mode 100644 index 0000000..4e48a12 --- /dev/null +++ b/docs/structRotationalDynamics1DOF-members.html @@ -0,0 +1,131 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RotationalDynamics1DOF< T > Member List
    +
    +
    + +

    This is the complete list of members for RotationalDynamics1DOF< T >, including all inherited members.

    + + + + + + + + + + +
    InputSignalType typedefRotationalDynamics1DOF< T >
    InputType typedefRotationalDynamics1DOF< T >
    ParamsType typedefRotationalDynamics1DOF< T >
    StateDotDotType typedefRotationalDynamics1DOF< T >
    StateDotSignalType typedefRotationalDynamics1DOF< T >
    StateDotType typedefRotationalDynamics1DOF< T >
    StateSignalType typedefRotationalDynamics1DOF< T >
    StateType typedefRotationalDynamics1DOF< T >
    update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)RotationalDynamics1DOF< T >inlinestatic
    +
    + + + + diff --git a/docs/structRotationalDynamics1DOF.html b/docs/structRotationalDynamics1DOF.html new file mode 100644 index 0000000..14845ea --- /dev/null +++ b/docs/structRotationalDynamics1DOF.html @@ -0,0 +1,367 @@ + + + + + + + +signals-cpp: RotationalDynamics1DOF< T > Struct Template Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RotationalDynamics1DOF< T > Struct Template Reference
    +
    +
    + +

    Definition of the dynamics for planar rotation-only motion of a mass. + More...

    + +

    #include <Models.h>

    + + + + + + + + + + + + + + + + + + +

    +Public Types

    using InputSignalType = Vector1Signal<T>
     
    using StateSignalType = SO2StateSignal<T>
     
    using StateDotSignalType = Vector1StateSignal<T>
     
    using InputType = typename InputSignalType::BaseType
     
    using StateType = typename StateSignalType::BaseType
     
    using StateDotType = typename StateDotSignalType::BaseType
     
    using StateDotDotType = typename StateDotSignalType::TangentType
     
    using ParamsType = RigidBodyParams2D
     
    + + + + +

    +Static Public Member Functions

    static bool update (StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
     Update a provided state time derivative given an input and time interval.
     
    +

    Detailed Description

    +
    template<typename T>
    +struct RotationalDynamics1DOF< T >

    Definition of the dynamics for planar rotation-only motion of a mass.

    +

    Member Typedef Documentation

    + +

    ◆ InputSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::InputSignalType = Vector1Signal<T>
    +
    + +
    +
    + +

    ◆ InputType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::InputType = typename InputSignalType::BaseType
    +
    + +
    +
    + +

    ◆ ParamsType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::ParamsType = RigidBodyParams2D
    +
    + +
    +
    + +

    ◆ StateDotDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::StateDotDotType = typename StateDotSignalType::TangentType
    +
    + +
    +
    + +

    ◆ StateDotSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::StateDotSignalType = Vector1StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::StateDotType = typename StateDotSignalType::BaseType
    +
    + +
    +
    + +

    ◆ StateSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::StateSignalType = SO2StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics1DOF< T >::StateType = typename StateSignalType::BaseType
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ update()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool RotationalDynamics1DOF< T >::update (StateDotSignalType & xdot,
    const StateSignalType & x,
    const InputSignalType & u,
    const double & t0,
    const double & tf,
    const ParamsType & params,
    const bool & insertIntoHistory = false,
    const bool & calculateXddot = false )
    +
    +inlinestatic
    +
    + +

    Update a provided state time derivative given an input and time interval.

    +
    Parameters
    + + + + + + + + + +
    xdotThe state time derivative signal to update.
    xThe state signal to reference for the dynamics.
    uThe input signal to reference for the dynamics.
    t0The time at which to sample the state and input.
    tfThe time at which to modify the state time derivative.
    paramsThe 2D rigid body model parameters.
    insertIntoHistoryWhether to insert the answer into state time derivative signal history.
    calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRotationalDynamics1DOF.js b/docs/structRotationalDynamics1DOF.js new file mode 100644 index 0000000..54c8085 --- /dev/null +++ b/docs/structRotationalDynamics1DOF.js @@ -0,0 +1,11 @@ +var structRotationalDynamics1DOF = +[ + [ "InputSignalType", "structRotationalDynamics1DOF.html#a80b5f730e292fda15bdcf1e8b96fe02e", null ], + [ "InputType", "structRotationalDynamics1DOF.html#ad43b9ce6a37b65d677d01ceafe448259", null ], + [ "ParamsType", "structRotationalDynamics1DOF.html#a38ff3a3028dc85817407d15587bf3451", null ], + [ "StateDotDotType", "structRotationalDynamics1DOF.html#a5e2f1cd471e7be99dc9e0f3f29f146f3", null ], + [ "StateDotSignalType", "structRotationalDynamics1DOF.html#a32c4979bf8f6aa3f9c1b0f2818ba4abd", null ], + [ "StateDotType", "structRotationalDynamics1DOF.html#a7df05f9db990eecd331f506d1a17597e", null ], + [ "StateSignalType", "structRotationalDynamics1DOF.html#ac321d27d0098cb3e8e64ea0d98500cb6", null ], + [ "StateType", "structRotationalDynamics1DOF.html#aada86d78db85576298e606afda8c928d", null ] +]; \ No newline at end of file diff --git a/docs/structRotationalDynamics3DOF-members.html b/docs/structRotationalDynamics3DOF-members.html new file mode 100644 index 0000000..de499e5 --- /dev/null +++ b/docs/structRotationalDynamics3DOF-members.html @@ -0,0 +1,131 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    RotationalDynamics3DOF< T > Member List
    +
    +
    + +

    This is the complete list of members for RotationalDynamics3DOF< T >, including all inherited members.

    + + + + + + + + + + +
    InputSignalType typedefRotationalDynamics3DOF< T >
    InputType typedefRotationalDynamics3DOF< T >
    ParamsType typedefRotationalDynamics3DOF< T >
    StateDotDotType typedefRotationalDynamics3DOF< T >
    StateDotSignalType typedefRotationalDynamics3DOF< T >
    StateDotType typedefRotationalDynamics3DOF< T >
    StateSignalType typedefRotationalDynamics3DOF< T >
    StateType typedefRotationalDynamics3DOF< T >
    update(StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)RotationalDynamics3DOF< T >inlinestatic
    +
    + + + + diff --git a/docs/structRotationalDynamics3DOF.html b/docs/structRotationalDynamics3DOF.html new file mode 100644 index 0000000..a61ee36 --- /dev/null +++ b/docs/structRotationalDynamics3DOF.html @@ -0,0 +1,367 @@ + + + + + + + +signals-cpp: RotationalDynamics3DOF< T > Struct Template Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    RotationalDynamics3DOF< T > Struct Template Reference
    +
    +
    + +

    Definition of the dynamics for 3D rotation-only motion of a mass. + More...

    + +

    #include <Models.h>

    + + + + + + + + + + + + + + + + + + +

    +Public Types

    using InputSignalType = Vector3Signal<T>
     
    using StateSignalType = SO3StateSignal<T>
     
    using StateDotSignalType = Vector3StateSignal<T>
     
    using InputType = typename InputSignalType::BaseType
     
    using StateType = typename StateSignalType::BaseType
     
    using StateDotType = typename StateDotSignalType::BaseType
     
    using StateDotDotType = typename StateDotSignalType::TangentType
     
    using ParamsType = RigidBodyParams3D
     
    + + + + +

    +Static Public Member Functions

    static bool update (StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
     Update a provided state time derivative given an input and time interval.
     
    +

    Detailed Description

    +
    template<typename T>
    +struct RotationalDynamics3DOF< T >

    Definition of the dynamics for 3D rotation-only motion of a mass.

    +

    Member Typedef Documentation

    + +

    ◆ InputSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::InputSignalType = Vector3Signal<T>
    +
    + +
    +
    + +

    ◆ InputType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::InputType = typename InputSignalType::BaseType
    +
    + +
    +
    + +

    ◆ ParamsType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::ParamsType = RigidBodyParams3D
    +
    + +
    +
    + +

    ◆ StateDotDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::StateDotDotType = typename StateDotSignalType::TangentType
    +
    + +
    +
    + +

    ◆ StateDotSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::StateDotSignalType = Vector3StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateDotType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::StateDotType = typename StateDotSignalType::BaseType
    +
    + +
    +
    + +

    ◆ StateSignalType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::StateSignalType = SO3StateSignal<T>
    +
    + +
    +
    + +

    ◆ StateType

    + +
    +
    +
    +template<typename T>
    + + + + +
    using RotationalDynamics3DOF< T >::StateType = typename StateSignalType::BaseType
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ update()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool RotationalDynamics3DOF< T >::update (StateDotSignalType & xdot,
    const StateSignalType & x,
    const InputSignalType & u,
    const double & t0,
    const double & tf,
    const ParamsType & params,
    const bool & insertIntoHistory = false,
    const bool & calculateXddot = false )
    +
    +inlinestatic
    +
    + +

    Update a provided state time derivative given an input and time interval.

    +
    Parameters
    + + + + + + + + + +
    xdotThe state time derivative signal to update.
    xThe state signal to reference for the dynamics.
    uThe input signal to reference for the dynamics.
    t0The time at which to sample the state and input.
    tfThe time at which to modify the state time derivative.
    paramsThe 3D rigid body model parameters.
    insertIntoHistoryWhether to insert the answer into state time derivative signal history.
    calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structRotationalDynamics3DOF.js b/docs/structRotationalDynamics3DOF.js new file mode 100644 index 0000000..7f99ba7 --- /dev/null +++ b/docs/structRotationalDynamics3DOF.js @@ -0,0 +1,11 @@ +var structRotationalDynamics3DOF = +[ + [ "InputSignalType", "structRotationalDynamics3DOF.html#aac317f9992071217ce644f6b9ccd8763", null ], + [ "InputType", "structRotationalDynamics3DOF.html#aafaa22bb44de6a10f6293f66da5c52e5", null ], + [ "ParamsType", "structRotationalDynamics3DOF.html#a2ac951c964726729410488c2bfcfa156", null ], + [ "StateDotDotType", "structRotationalDynamics3DOF.html#a6e75764a6e9b0ec406d716dfb60943b1", null ], + [ "StateDotSignalType", "structRotationalDynamics3DOF.html#a6b1ce3427c65404128d15a66c3d11621", null ], + [ "StateDotType", "structRotationalDynamics3DOF.html#a40c9649794d2d6e82da6451d17c32bb5", null ], + [ "StateSignalType", "structRotationalDynamics3DOF.html#a2814e21ab959a4cb71fdc2682d1cad69", null ], + [ "StateType", "structRotationalDynamics3DOF.html#aaee29651f3b1671b6ab4e10656ea6f9a", null ] +]; \ No newline at end of file diff --git a/docs/structScalarSignalSpec-members.html b/docs/structScalarSignalSpec-members.html new file mode 100644 index 0000000..f020e8c --- /dev/null +++ b/docs/structScalarSignalSpec-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    ScalarSignalSpec< T > Member List
    +
    +
    + +

    This is the complete list of members for ScalarSignalSpec< T >, including all inherited members.

    + + + + +
    NansType()ScalarSignalSpec< T >inlinestatic
    Type typedefScalarSignalSpec< T >
    ZeroType()ScalarSignalSpec< T >inlinestatic
    +
    + + + + diff --git a/docs/structScalarSignalSpec.html b/docs/structScalarSignalSpec.html new file mode 100644 index 0000000..449bf34 --- /dev/null +++ b/docs/structScalarSignalSpec.html @@ -0,0 +1,214 @@ + + + + + + + +signals-cpp: ScalarSignalSpec< T > Struct Template Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    ScalarSignalSpec< T > Struct Template Reference
    +
    +
    + +

    #include <Signal.h>

    + + + + +

    +Public Types

    using Type = T
     
    + + + + + +

    +Static Public Member Functions

    static Type ZeroType ()
     
    static Type NansType ()
     
    +

    Member Typedef Documentation

    + +

    ◆ Type

    + +
    +
    +
    +template<typename T>
    + + + + +
    using ScalarSignalSpec< T >::Type = T
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ NansType()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + +
    static Type ScalarSignalSpec< T >::NansType ()
    +
    +inlinestatic
    +
    + +
    +
    + +

    ◆ ZeroType()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + +
    static Type ScalarSignalSpec< T >::ZeroType ()
    +
    +inlinestatic
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structScalarSignalSpec.js b/docs/structScalarSignalSpec.js new file mode 100644 index 0000000..b3e0065 --- /dev/null +++ b/docs/structScalarSignalSpec.js @@ -0,0 +1,4 @@ +var structScalarSignalSpec = +[ + [ "Type", "structScalarSignalSpec.html#a4a319643aeb76b94214f8b41d64d5402", null ] +]; \ No newline at end of file diff --git a/docs/structScalarStateSignalSpec-members.html b/docs/structScalarStateSignalSpec-members.html new file mode 100644 index 0000000..8796473 --- /dev/null +++ b/docs/structScalarStateSignalSpec-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    ScalarStateSignalSpec< T > Member List
    +
    +
    + +

    This is the complete list of members for ScalarStateSignalSpec< T >, including all inherited members.

    + + + + +
    NansType()ScalarStateSignalSpec< T >inlinestatic
    Type typedefScalarStateSignalSpec< T >
    ZeroType()ScalarStateSignalSpec< T >inlinestatic
    +
    + + + + diff --git a/docs/structScalarStateSignalSpec.html b/docs/structScalarStateSignalSpec.html new file mode 100644 index 0000000..854e934 --- /dev/null +++ b/docs/structScalarStateSignalSpec.html @@ -0,0 +1,214 @@ + + + + + + + +signals-cpp: ScalarStateSignalSpec< T > Struct Template Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    ScalarStateSignalSpec< T > Struct Template Reference
    +
    +
    + +

    #include <State.h>

    + + + + +

    +Public Types

    using Type = ScalarStateType<T>
     
    + + + + + +

    +Static Public Member Functions

    static Type ZeroType ()
     
    static Type NansType ()
     
    +

    Member Typedef Documentation

    + +

    ◆ Type

    + +
    +
    +
    +template<typename T>
    + + + + +
    using ScalarStateSignalSpec< T >::Type = ScalarStateType<T>
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ NansType()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + +
    static Type ScalarStateSignalSpec< T >::NansType ()
    +
    +inlinestatic
    +
    + +
    +
    + +

    ◆ ZeroType()

    + +
    +
    +
    +template<typename T>
    + + + + + +
    + + + + + + + +
    static Type ScalarStateSignalSpec< T >::ZeroType ()
    +
    +inlinestatic
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structScalarStateSignalSpec.js b/docs/structScalarStateSignalSpec.js new file mode 100644 index 0000000..87741a1 --- /dev/null +++ b/docs/structScalarStateSignalSpec.js @@ -0,0 +1,4 @@ +var structScalarStateSignalSpec = +[ + [ "Type", "structScalarStateSignalSpec.html#a7ae52069e3aafdb7c45b14168b1ad11b", null ] +]; \ No newline at end of file diff --git a/docs/structSignal_1_1SignalDP-members.html b/docs/structSignal_1_1SignalDP-members.html new file mode 100644 index 0000000..226852b --- /dev/null +++ b/docs/structSignal_1_1SignalDP-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Signal< BaseSignalSpec, TangentSignalSpec >::SignalDP Member List
    +
    + +
    + + + + diff --git a/docs/structSignal_1_1SignalDP.html b/docs/structSignal_1_1SignalDP.html new file mode 100644 index 0000000..1593329 --- /dev/null +++ b/docs/structSignal_1_1SignalDP.html @@ -0,0 +1,187 @@ + + + + + + + +signals-cpp: Signal< BaseSignalSpec, TangentSignalSpec >::SignalDP Struct Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    Signal< BaseSignalSpec, TangentSignalSpec >::SignalDP Struct Reference
    +
    +
    + +

    #include <Signal.h>

    + + + + + + + + +

    +Public Attributes

    double t
     
    BaseType x
     
    TangentType xdot
     
    +

    Member Data Documentation

    + +

    ◆ t

    + +
    +
    +
    +template<typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + +
    double Signal< BaseSignalSpec, TangentSignalSpec >::SignalDP::t
    +
    + +
    +
    + +

    ◆ x

    + +
    +
    +
    +template<typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + +
    BaseType Signal< BaseSignalSpec, TangentSignalSpec >::SignalDP::x
    +
    + +
    +
    + +

    ◆ xdot

    + +
    +
    +
    +template<typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + +
    TangentType Signal< BaseSignalSpec, TangentSignalSpec >::SignalDP::xdot
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structSignal_1_1SignalDP.js b/docs/structSignal_1_1SignalDP.js new file mode 100644 index 0000000..553deeb --- /dev/null +++ b/docs/structSignal_1_1SignalDP.js @@ -0,0 +1,6 @@ +var structSignal_1_1SignalDP = +[ + [ "t", "structSignal_1_1SignalDP.html#ac9d0651b25c9bcf14fcfc65a32fcfa86", null ], + [ "x", "structSignal_1_1SignalDP.html#a9b7c7d507ee5f16f1909dccdae98e649", null ], + [ "xdot", "structSignal_1_1SignalDP.html#a31d004bf32039463b33344e4c10bd5bb", null ] +]; \ No newline at end of file diff --git a/docs/structSimpsonIntegratorSpec-members.html b/docs/structSimpsonIntegratorSpec-members.html new file mode 100644 index 0000000..3d9c095 --- /dev/null +++ b/docs/structSimpsonIntegratorSpec-members.html @@ -0,0 +1,123 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    SimpsonIntegratorSpec Member List
    +
    +
    + +

    This is the complete list of members for SimpsonIntegratorSpec, including all inherited members.

    + + +
    integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)SimpsonIntegratorSpecinlinestatic
    +
    + + + + diff --git a/docs/structSimpsonIntegratorSpec.html b/docs/structSimpsonIntegratorSpec.html new file mode 100644 index 0000000..aefe78d --- /dev/null +++ b/docs/structSimpsonIntegratorSpec.html @@ -0,0 +1,203 @@ + + + + + + + +signals-cpp: SimpsonIntegratorSpec Struct Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    SimpsonIntegratorSpec Struct Reference
    +
    +
    + +

    Specification for numerically integrating a black box function using Simpson's method. + More...

    + +

    #include <Integration.h>

    + + + + + + +

    +Static Public Member Functions

    template<typename BaseSignalSpec, typename TangentSignalSpec>
    static bool integrate (Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)
     Simpson integration implementation.
     
    +

    Detailed Description

    +

    Specification for numerically integrating a black box function using Simpson's method.

    +

    Member Function Documentation

    + +

    ◆ integrate()

    + +
    +
    +
    +template<typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool SimpsonIntegratorSpec::integrate (Signal< BaseSignalSpec, TangentSignalSpec > & xInt,
    const Signal< TangentSignalSpec, TangentSignalSpec > & x,
    const double & t0,
    const double & tf,
    const bool & insertIntoHistory )
    +
    +inlinestatic
    +
    + +

    Simpson integration implementation.

    +
    Parameters
    + + + + + + +
    xIntThe output signal representing the integration.
    xThe input signal to be integrated.
    t0The start time for the integration.
    tfThe time to integrate to. Ideally the delta from the start time is small.
    insertIntoHistoryWhether to store the result in xInt's memory.
    +
    +
    +
    Returns
    Whether the integration was successful.
    +

    Simpson's method for integration increments the current integral by

    +

    \(\frac{x(t_0)+4x((t_0+t_f)/2)+x(t_f)}{6}\Delta t\)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structState-members.html b/docs/structState-members.html new file mode 100644 index 0000000..e9fe118 --- /dev/null +++ b/docs/structState-members.html @@ -0,0 +1,133 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + + + + + + diff --git a/docs/structState.html b/docs/structState.html new file mode 100644 index 0000000..5c99b3d --- /dev/null +++ b/docs/structState.html @@ -0,0 +1,455 @@ + + + + + + + +signals-cpp: State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim > Struct Template Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim > Struct Template Reference
    +
    +
    + +

    Base type for all Model state representations. + More...

    + +

    #include <State.h>

    + + + + + + +

    +Public Types

    using PoseType = typename PoseTypeSpec::Type
     
    using TwistType = typename TwistTypeSpec::Type
     
    + + + + + + + + + + + + +

    +Public Member Functions

     State ()
     
     State (T *arr)
     
     State (const State &other)
     
    Stateoperator*= (const double &s)
     
    template<typename T2>
    Stateoperator+= (const State< T2, TwistTypeSpec, TwistDim, TwistTypeSpec, TwistDim > &r)
     
    + + + + + +

    +Static Public Member Functions

    static State identity ()
     
    static State nans ()
     
    + + + + + + +

    +Public Attributes

    PoseType pose
     TODO.
     
    TwistType twist
     
    +

    Detailed Description

    +
    template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    +struct State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >

    Base type for all Model state representations.

    +

    Provides a convenient union of the "pose" and "twist" (or time derivative of pose) components of a state vector and defines arithmetic operations for that union.

    +

    A state is not a Signal type in itself, which is why separate *Signal types are derived below.

    +

    Derived types:

    +
      +
    • Scalar(d)State and Scalar(d)StateSignal
    • +
    • Vector1(d)State and Vector1(d)StateSignal
    • +
    • Vector2(d)State and Vector2(d)StateSignal
    • +
    • Vector3(d)State and Vector3(d)StateSignal
    • +
    • Vector4(d)State and Vector4(d)StateSignal
    • +
    • Vector5(d)State and Vector5(d)StateSignal
    • +
    • Vector6(d)State and Vector6(d)StateSignal
    • +
    • Vector7(d)State and Vector7(d)StateSignal
    • +
    • Vector8(d)State and Vector8(d)StateSignal
    • +
    • Vector9(d)State and Vector9(d)StateSignal
    • +
    • Vector10(d)State and Vector10(d)StateSignal
    • +
    • SO2(d)State and SO2(d)StateSignal
    • +
    • SO3(d)State and SO3(d)StateSignal
    • +
    • SE2(d)State and SE2(d)StateSignal
    • +
    • SE3(d)State and SE3(d)StateSignal
    • +
    +

    Member Typedef Documentation

    + +

    ◆ PoseType

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + +
    using State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::PoseType = typename PoseTypeSpec::Type
    +
    + +
    +
    + +

    ◆ TwistType

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + +
    using State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::TwistType = typename TwistTypeSpec::Type
    +
    + +
    +
    +

    Constructor & Destructor Documentation

    + +

    ◆ State() [1/3]

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + + +
    + + + + + + + +
    State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::State ()
    +
    +inline
    +
    + +
    +
    + +

    ◆ State() [2/3]

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + + +
    + + + + + + + +
    State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::State (T * arr)
    +
    +inline
    +
    + +
    +
    + +

    ◆ State() [3/3]

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + + +
    + + + + + + + +
    State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::State (const State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim > & other)
    +
    +inline
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ identity()

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + + +
    + + + + + + + +
    static State State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::identity ()
    +
    +inlinestatic
    +
    + +
    +
    + +

    ◆ nans()

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + + +
    + + + + + + + +
    static State State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::nans ()
    +
    +inlinestatic
    +
    + +
    +
    + +

    ◆ operator*=()

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + + +
    + + + + + + + +
    State & State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::operator*= (const double & s)
    +
    +inline
    +
    + +
    +
    + +

    ◆ operator+=()

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    +
    +template<typename T2>
    + + + + + +
    + + + + + + + +
    State & State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::operator+= (const State< T2, TwistTypeSpec, TwistDim, TwistTypeSpec, TwistDim > & r)
    +
    +inline
    +
    + +
    +
    +

    Member Data Documentation

    + +

    ◆ pose

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + +
    PoseType State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::pose
    +
    + +

    TODO.

    + +
    +
    + +

    ◆ twist

    + +
    +
    +
    +template<typename T, typename PoseTypeSpec, size_t PoseDim, typename TwistTypeSpec, size_t TwistDim>
    + + + + +
    TwistType State< T, PoseTypeSpec, PoseDim, TwistTypeSpec, TwistDim >::twist
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structState.js b/docs/structState.js new file mode 100644 index 0000000..53be9bf --- /dev/null +++ b/docs/structState.js @@ -0,0 +1,12 @@ +var structState = +[ + [ "PoseType", "structState.html#a31bd8aa44dff5f656b2b2057c8d63821", null ], + [ "TwistType", "structState.html#ab58b6e2fe6ea3c2777c5a8a92f6665a1", null ], + [ "State", "structState.html#adcb914ebe25fe14622a945801267fa7a", null ], + [ "State", "structState.html#a097d236bc46ca02a379e2fd188fe3e97", null ], + [ "State", "structState.html#aa10b450dbe8a806a0b203521b4738c0c", null ], + [ "operator*=", "structState.html#af76faa98cfc18fb81afb0c86f7a0aa75", null ], + [ "operator+=", "structState.html#a7764970f0c29576eac07ab57c28261be", null ], + [ "pose", "structState.html#a0a5874d4c3988770f5498c34ec508c34", null ], + [ "twist", "structState.html#a3f5fb4275701e71a56d2fa1fb8d54080", null ] +]; \ No newline at end of file diff --git a/docs/structTranslationalDynamicsBase-members.html b/docs/structTranslationalDynamicsBase-members.html new file mode 100644 index 0000000..d3503eb --- /dev/null +++ b/docs/structTranslationalDynamicsBase-members.html @@ -0,0 +1,131 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    TranslationalDynamicsBase< IST, SST, SDST, d, PT > Member List
    +
    + +
    + + + + diff --git a/docs/structTranslationalDynamicsBase.html b/docs/structTranslationalDynamicsBase.html new file mode 100644 index 0000000..7d34662 --- /dev/null +++ b/docs/structTranslationalDynamicsBase.html @@ -0,0 +1,367 @@ + + + + + + + +signals-cpp: TranslationalDynamicsBase< IST, SST, SDST, d, PT > Struct Template Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    TranslationalDynamicsBase< IST, SST, SDST, d, PT > Struct Template Reference
    +
    +
    + +

    Base class for defining the dynamics for 1D, 2D, and 3D point masses. + More...

    + +

    #include <Models.h>

    + + + + + + + + + + + + + + + + + + +

    +Public Types

    using InputSignalType = IST
     
    using StateDotSignalType = SST
     
    using StateSignalType = SDST
     
    using InputType = typename InputSignalType::BaseType
     
    using StateType = typename StateSignalType::BaseType
     
    using StateDotType = typename StateDotSignalType::BaseType
     
    using StateDotDotType = typename StateDotSignalType::TangentType
     
    using ParamsType = PT
     
    + + + + +

    +Static Public Member Functions

    static bool update (StateDotSignalType &xdot, const StateSignalType &x, const InputSignalType &u, const double &t0, const double &tf, const ParamsType &params, const bool &insertIntoHistory=false, const bool &calculateXddot=false)
     Update a provided state time derivative given an input and time interval.
     
    +

    Detailed Description

    +
    template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    +struct TranslationalDynamicsBase< IST, SST, SDST, d, PT >

    Base class for defining the dynamics for 1D, 2D, and 3D point masses.

    +

    Member Typedef Documentation

    + +

    ◆ InputSignalType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::InputSignalType = IST
    +
    + +
    +
    + +

    ◆ InputType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::InputType = typename InputSignalType::BaseType
    +
    + +
    +
    + +

    ◆ ParamsType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::ParamsType = PT
    +
    + +
    +
    + +

    ◆ StateDotDotType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::StateDotDotType = typename StateDotSignalType::TangentType
    +
    + +
    +
    + +

    ◆ StateDotSignalType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::StateDotSignalType = SST
    +
    + +
    +
    + +

    ◆ StateDotType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::StateDotType = typename StateDotSignalType::BaseType
    +
    + +
    +
    + +

    ◆ StateSignalType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::StateSignalType = SDST
    +
    + +
    +
    + +

    ◆ StateType

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + +
    using TranslationalDynamicsBase< IST, SST, SDST, d, PT >::StateType = typename StateSignalType::BaseType
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ update()

    + +
    +
    +
    +template<typename IST, typename SST, typename SDST, size_t d, typename PT>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool TranslationalDynamicsBase< IST, SST, SDST, d, PT >::update (StateDotSignalType & xdot,
    const StateSignalType & x,
    const InputSignalType & u,
    const double & t0,
    const double & tf,
    const ParamsType & params,
    const bool & insertIntoHistory = false,
    const bool & calculateXddot = false )
    +
    +inlinestatic
    +
    + +

    Update a provided state time derivative given an input and time interval.

    +
    Parameters
    + + + + + + + + + +
    xdotThe state time derivative signal to update.
    xThe state signal to reference for the dynamics.
    uThe input signal to reference for the dynamics.
    t0The time at which to sample the state and input.
    tfThe time at which to modify the state time derivative.
    paramsThe rigid body model parameters.
    insertIntoHistoryWhether to insert the answer into state time derivative signal history.
    calculateXddotWhether to use finite differencing to calculate the second time derivative of the state.
    +
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structTranslationalDynamicsBase.js b/docs/structTranslationalDynamicsBase.js new file mode 100644 index 0000000..b7c4ab0 --- /dev/null +++ b/docs/structTranslationalDynamicsBase.js @@ -0,0 +1,11 @@ +var structTranslationalDynamicsBase = +[ + [ "InputSignalType", "structTranslationalDynamicsBase.html#aac403e4db54adf389b8f1fa3700f6f6a", null ], + [ "InputType", "structTranslationalDynamicsBase.html#ac57d5ab2e4cf3e6afe4a5ae550e858bb", null ], + [ "ParamsType", "structTranslationalDynamicsBase.html#a4ba374f05dd1f5c4168adf3d6a15ef0c", null ], + [ "StateDotDotType", "structTranslationalDynamicsBase.html#a4ae3874e31bcc97d54f4cebea0606002", null ], + [ "StateDotSignalType", "structTranslationalDynamicsBase.html#a3870f6b57fcb6cb578b3640401331a39", null ], + [ "StateDotType", "structTranslationalDynamicsBase.html#a25c6532290d222c25e727394a0afa0b7", null ], + [ "StateSignalType", "structTranslationalDynamicsBase.html#a1f0fdd4bbfb73f52878c7e5c7e459f16", null ], + [ "StateType", "structTranslationalDynamicsBase.html#aabb958cc98babacfc8478a04fb7a37dd", null ] +]; \ No newline at end of file diff --git a/docs/structTrapezoidalIntegratorSpec-members.html b/docs/structTrapezoidalIntegratorSpec-members.html new file mode 100644 index 0000000..d2824c1 --- /dev/null +++ b/docs/structTrapezoidalIntegratorSpec-members.html @@ -0,0 +1,123 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    TrapezoidalIntegratorSpec Member List
    +
    +
    + +

    This is the complete list of members for TrapezoidalIntegratorSpec, including all inherited members.

    + + +
    integrate(Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)TrapezoidalIntegratorSpecinlinestatic
    +
    + + + + diff --git a/docs/structTrapezoidalIntegratorSpec.html b/docs/structTrapezoidalIntegratorSpec.html new file mode 100644 index 0000000..71af624 --- /dev/null +++ b/docs/structTrapezoidalIntegratorSpec.html @@ -0,0 +1,203 @@ + + + + + + + +signals-cpp: TrapezoidalIntegratorSpec Struct Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    TrapezoidalIntegratorSpec Struct Reference
    +
    +
    + +

    Specification for numerically integrating a black box function using the Trapezoidal method. + More...

    + +

    #include <Integration.h>

    + + + + + + +

    +Static Public Member Functions

    template<typename BaseSignalSpec, typename TangentSignalSpec>
    static bool integrate (Signal< BaseSignalSpec, TangentSignalSpec > &xInt, const Signal< TangentSignalSpec, TangentSignalSpec > &x, const double &t0, const double &tf, const bool &insertIntoHistory)
     Trapezoidal integration implementation.
     
    +

    Detailed Description

    +

    Specification for numerically integrating a black box function using the Trapezoidal method.

    +

    Member Function Documentation

    + +

    ◆ integrate()

    + +
    +
    +
    +template<typename BaseSignalSpec, typename TangentSignalSpec>
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    static bool TrapezoidalIntegratorSpec::integrate (Signal< BaseSignalSpec, TangentSignalSpec > & xInt,
    const Signal< TangentSignalSpec, TangentSignalSpec > & x,
    const double & t0,
    const double & tf,
    const bool & insertIntoHistory )
    +
    +inlinestatic
    +
    + +

    Trapezoidal integration implementation.

    +
    Parameters
    + + + + + + +
    xIntThe output signal representing the integration.
    xThe input signal to be integrated.
    t0The start time for the integration.
    tfThe time to integrate to. Ideally the delta from the start time is small.
    insertIntoHistoryWhether to store the result in xInt's memory.
    +
    +
    +
    Returns
    Whether the integration was successful.
    +

    Trapezoidal integration increments the current integral by

    +

    \(\frac{x(t_0)+x(t_f)}{2}\Delta t\)

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structVectorSignalSpec-members.html b/docs/structVectorSignalSpec-members.html new file mode 100644 index 0000000..339f1c2 --- /dev/null +++ b/docs/structVectorSignalSpec-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    VectorSignalSpec< T, d > Member List
    +
    +
    + +

    This is the complete list of members for VectorSignalSpec< T, d >, including all inherited members.

    + + + + +
    NansType()VectorSignalSpec< T, d >inlinestatic
    Type typedefVectorSignalSpec< T, d >
    ZeroType()VectorSignalSpec< T, d >inlinestatic
    +
    + + + + diff --git a/docs/structVectorSignalSpec.html b/docs/structVectorSignalSpec.html new file mode 100644 index 0000000..f3ef9b3 --- /dev/null +++ b/docs/structVectorSignalSpec.html @@ -0,0 +1,214 @@ + + + + + + + +signals-cpp: VectorSignalSpec< T, d > Struct Template Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    VectorSignalSpec< T, d > Struct Template Reference
    +
    +
    + +

    #include <Signal.h>

    + + + + +

    +Public Types

    using Type = Matrix<T, d, 1>
     
    + + + + + +

    +Static Public Member Functions

    static Type ZeroType ()
     
    static Type NansType ()
     
    +

    Member Typedef Documentation

    + +

    ◆ Type

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + +
    using VectorSignalSpec< T, d >::Type = Matrix<T, d, 1>
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ NansType()

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + + +
    + + + + + + + +
    static Type VectorSignalSpec< T, d >::NansType ()
    +
    +inlinestatic
    +
    + +
    +
    + +

    ◆ ZeroType()

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + + +
    + + + + + + + +
    static Type VectorSignalSpec< T, d >::ZeroType ()
    +
    +inlinestatic
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structVectorSignalSpec.js b/docs/structVectorSignalSpec.js new file mode 100644 index 0000000..ff66fe0 --- /dev/null +++ b/docs/structVectorSignalSpec.js @@ -0,0 +1,4 @@ +var structVectorSignalSpec = +[ + [ "Type", "structVectorSignalSpec.html#ac21d15d01635665373eaf23b62f3d440", null ] +]; \ No newline at end of file diff --git a/docs/structVectorStateSignalSpec-members.html b/docs/structVectorStateSignalSpec-members.html new file mode 100644 index 0000000..b81d281 --- /dev/null +++ b/docs/structVectorStateSignalSpec-members.html @@ -0,0 +1,125 @@ + + + + + + + +signals-cpp: Member List + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    VectorStateSignalSpec< T, d > Member List
    +
    +
    + +

    This is the complete list of members for VectorStateSignalSpec< T, d >, including all inherited members.

    + + + + +
    NansType()VectorStateSignalSpec< T, d >inlinestatic
    Type typedefVectorStateSignalSpec< T, d >
    ZeroType()VectorStateSignalSpec< T, d >inlinestatic
    +
    + + + + diff --git a/docs/structVectorStateSignalSpec.html b/docs/structVectorStateSignalSpec.html new file mode 100644 index 0000000..9962802 --- /dev/null +++ b/docs/structVectorStateSignalSpec.html @@ -0,0 +1,214 @@ + + + + + + + +signals-cpp: VectorStateSignalSpec< T, d > Struct Template Reference + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    signals-cpp +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    VectorStateSignalSpec< T, d > Struct Template Reference
    +
    +
    + +

    #include <State.h>

    + + + + +

    +Public Types

    using Type = VectorStateType<T, d>
     
    + + + + + +

    +Static Public Member Functions

    static Type ZeroType ()
     
    static Type NansType ()
     
    +

    Member Typedef Documentation

    + +

    ◆ Type

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + +
    using VectorStateSignalSpec< T, d >::Type = VectorStateType<T, d>
    +
    + +
    +
    +

    Member Function Documentation

    + +

    ◆ NansType()

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + + +
    + + + + + + + +
    static Type VectorStateSignalSpec< T, d >::NansType ()
    +
    +inlinestatic
    +
    + +
    +
    + +

    ◆ ZeroType()

    + +
    +
    +
    +template<typename T, size_t d>
    + + + + + +
    + + + + + + + +
    static Type VectorStateSignalSpec< T, d >::ZeroType ()
    +
    +inlinestatic
    +
    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/docs/structVectorStateSignalSpec.js b/docs/structVectorStateSignalSpec.js new file mode 100644 index 0000000..8bcb22b --- /dev/null +++ b/docs/structVectorStateSignalSpec.js @@ -0,0 +1,4 @@ +var structVectorStateSignalSpec = +[ + [ "Type", "structVectorStateSignalSpec.html#a3994948f467b39ca2dcd77d220a8cf3a", null ] +]; \ No newline at end of file diff --git a/docs/sync_off.png b/docs/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/docs/sync_off.png differ diff --git a/docs/sync_on.png b/docs/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/docs/sync_on.png differ diff --git a/docs/tab_a.png b/docs/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/docs/tab_a.png differ diff --git a/docs/tab_ad.png b/docs/tab_ad.png new file mode 100644 index 0000000..e34850a Binary files /dev/null and b/docs/tab_ad.png differ diff --git a/docs/tab_b.png b/docs/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/docs/tab_b.png differ diff --git a/docs/tab_bd.png b/docs/tab_bd.png new file mode 100644 index 0000000..91c2524 Binary files /dev/null and b/docs/tab_bd.png differ diff --git a/docs/tab_h.png b/docs/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/docs/tab_h.png differ diff --git a/docs/tab_hd.png b/docs/tab_hd.png new file mode 100644 index 0000000..2489273 Binary files /dev/null and b/docs/tab_hd.png differ diff --git a/docs/tab_s.png b/docs/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/docs/tab_s.png differ diff --git a/docs/tab_sd.png b/docs/tab_sd.png new file mode 100644 index 0000000..757a565 Binary files /dev/null and b/docs/tab_sd.png differ diff --git a/docs/tabs.css b/docs/tabs.css new file mode 100644 index 0000000..edbb424 --- /dev/null +++ b/docs/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#364D7C;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url('tab_b.png')}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255, 255, 255, 0.9);color:#283A5D;outline:0}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255, 255, 255, 0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:white}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url('tab_b.png');line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url('tab_s.png');background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent white transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:white;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555555;background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:white;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url('tab_b.png')}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:white}} diff --git a/doxygen-awesome-css b/doxygen-awesome-css new file mode 160000 index 0000000..9760c30 --- /dev/null +++ b/doxygen-awesome-css @@ -0,0 +1 @@ +Subproject commit 9760c30014131f4eacb8e96f15f3869c7bc5dd8c diff --git a/include/signals/Integration.h b/include/signals/Integration.h index 7105ea9..115013a 100644 --- a/include/signals/Integration.h +++ b/include/signals/Integration.h @@ -1,9 +1,29 @@ #pragma once #include "signals/Signal.h" +/** + * @brief Base type for all integrators. + * + * Provides methods for incremental (e.g., for control) or holistic (e.g., for open-loop simulation) integrations of + * arbitrary signal types. + * + * **Derived types**: + * + * - `EulerIntegrator` + * - `TrapezoidalIntegrator` + * - `SimpsonIntegrator` + */ template struct Integrator { + /** + * @brief Integrate a signal from the current time to the specified end time. + * @param xInt The output signal representing the integration. + * @param x The input signal to be integrated. + * @param tf The time to integrate to. Ideally the delta from the current time is small. + * @param insertIntoHistory Whether to store the result in xInt's memory. + * @returns Whether the integration was successful. + */ template static bool integrate(Signal& xInt, const Signal& x, @@ -19,6 +39,16 @@ struct Integrator return IntegratorType::integrate(xInt, x, t0, tf, insertIntoHistory); } + /** + * @brief Integrate a signal from the current time to the specified end time, chunked up into smaller integration + * increments. + * @param xInt The output signal representing the integration. + * @param x The input signal to be integrated. + * @param tf The time to integrate to. + * @param dt Time delta length by which to chunk up the integrations. Ideally this is small. + * @param insertIntoHistory Whether to store the result in xInt's memory. + * @returns Whether the integration was successful. + */ template static bool integrate(Signal& xInt, const Signal& x, @@ -46,8 +76,24 @@ struct Integrator } }; +/** + * @brief Specification for numerically integrating a black box function using Euler's method. + */ struct EulerIntegratorSpec { + /** + * @brief Euler integration implementation. + * @param xInt The output signal representing the integration. + * @param x The input signal to be integrated. + * @param t0 The start time for the integration. + * @param tf The time to integrate to. Ideally the delta from the start time is small. + * @param insertIntoHistory Whether to store the result in xInt's memory. + * @returns Whether the integration was successful. + * + * Euler integration increments the current integral by + * + * \f$x(t_f)\Delta t\f$ + */ template static bool integrate(Signal& xInt, const Signal& x, @@ -60,8 +106,24 @@ struct EulerIntegratorSpec } }; +/** + * @brief Specification for numerically integrating a black box function using the Trapezoidal method. + */ struct TrapezoidalIntegratorSpec { + /** + * @brief Trapezoidal integration implementation. + * @param xInt The output signal representing the integration. + * @param x The input signal to be integrated. + * @param t0 The start time for the integration. + * @param tf The time to integrate to. Ideally the delta from the start time is small. + * @param insertIntoHistory Whether to store the result in xInt's memory. + * @returns Whether the integration was successful. + * + * Trapezoidal integration increments the current integral by + * + * \f$\frac{x(t_0)+x(t_f)}{2}\Delta t\f$ + */ template static bool integrate(Signal& xInt, const Signal& x, @@ -70,11 +132,45 @@ struct TrapezoidalIntegratorSpec const bool& insertIntoHistory) { double dt = tf - t0; - return xInt.update(tf, xInt() + (xInt.dot() + x(tf)) * dt / 2.0, x(tf), insertIntoHistory); + return xInt.update(tf, xInt() + (x(t0) + x(tf)) * dt / 2.0, x(tf), insertIntoHistory); } }; -// TODO SimpsonIntegratorSpec +/** + * @brief Specification for numerically integrating a black box function using Simpson's method. + */ +struct SimpsonIntegratorSpec +{ + /** + * @brief Simpson integration implementation. + * @param xInt The output signal representing the integration. + * @param x The input signal to be integrated. + * @param t0 The start time for the integration. + * @param tf The time to integrate to. Ideally the delta from the start time is small. + * @param insertIntoHistory Whether to store the result in xInt's memory. + * @returns Whether the integration was successful. + * + * Simpson's method for integration increments the current integral by + * + * \f$\frac{x(t_0)+4x((t_0+t_f)/2)+x(t_f)}{6}\Delta t\f$ + */ + template + static bool integrate(Signal& xInt, + const Signal& x, + const double& t0, + const double& tf, + const bool& insertIntoHistory) + { + double dt = tf - t0; + return xInt.update(tf, + xInt() + (x(t0) + 4.0 * x((t0 + tf) / 2.0) + x(tf)) * dt / 6.0, + x(tf), + insertIntoHistory); + } +}; + +#define MAKE_INTEGRATOR(IntegratorName) typedef Integrator IntegratorName##Integrator; -typedef Integrator EulerIntegrator; -typedef Integrator TrapezoidalIntegrator; +MAKE_INTEGRATOR(Euler) +MAKE_INTEGRATOR(Trapezoidal) +MAKE_INTEGRATOR(Simpson) diff --git a/include/signals/Models.h b/include/signals/Models.h index ec318b8..42b74d4 100644 --- a/include/signals/Models.h +++ b/include/signals/Models.h @@ -5,6 +5,21 @@ using namespace Eigen; +/** + * @brief Base type for all model simulators. + * + * Provides methods for initialization, reset, and simulation of dynamic models. + * + * **Derived types**: + * + * - `Translational1DOFModel(d)` + * - `Translational2DOFModel(d)` + * - `Translational3DOFModel(d)` + * - `Rotational1DOFModel(d)` + * - `Rotational3DOFModel(d)` + * - `RigidBody3DOFModel(d)` + * - `RigidBody6DOFModel(d)` + */ template class Model { @@ -14,35 +29,66 @@ class Model using StateSignalType = typename DynamicsType::StateSignalType; using ParamsType = typename DynamicsType::ParamsType; - StateSignalType x; + /** + * @brief Model state signal. + */ + StateSignalType x; + /** + * @brief Time derivative of the model state signal. + */ StateDotSignalType xdot; + /** + * @brief Initialize a model with no parameters. + */ Model() : params_{std::nullopt} { reset(); } + /** + * @brief Initialize the model with any required parameters. + * + * The required parameters are determined by the model / dynamics specialization. + */ void setParams(const ParamsType& params) { params_ = params; } + /** + * @brief Verify that the model has parameters explicity set by `setParams()`. + */ bool hasParams() { return params_.has_value(); } + /** + * @brief Zero out the model state and derivative variables and reset simulation time to zero. + */ void reset() { x.reset(); xdot.reset(); } + /** + * @brief Get the current simulation time. + */ double t() const { return x.t(); } + /** + * @brief Simulate the system response to an input over a specified time interval. + * @param u The input signal, which should be defined up to tf. + * @param tf The time to simulate to. Ideally the delta from the current time is small. + * @param insertIntoHistory Whether to store the result in state memory. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + * @returns Whether the simulation was successful. + */ template bool simulate(const InputSignalType& u, const double& tf, @@ -68,6 +114,16 @@ class Model return true; } + /** + * @brief Simulate the system response to an input over a specified time interval, chunked up into smaller + * integration increments. + * @param u The input signal, which should be defined up to tf. + * @param tf The time to simulate to. + * @param dt Time delta length by which to chunk up the integrations. Ideally this is small. + * @param insertIntoHistory Whether to store the result in state memory. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + * @returns Whether the simulation was successful. + */ template bool simulate(const InputSignalType& u, const double& tf, @@ -103,29 +159,81 @@ class Model std::optional params_; }; +/** + * @brief Parameters for a 1D rigid body model. + * + * Picture a point mass existing on a line, whether horizontal or vertical. + */ struct RigidBodyParams1D { RigidBodyParams1D() : m(1), g(0) {} + /** + * @brief Model mass. + */ double m; + /** + * @brief Gravitational constant. + * + * Essentially defines which way is "down." Set to zero if e.g., the 1D dimension is horizontal. + */ double g; }; +/** + * @brief Parameters for a 2D rigid body model. + * + * Picture a mass (not necessarily a point mass) confined to a 2D plane. + */ struct RigidBodyParams2D { RigidBodyParams2D() : m(1), J(1), g(Vector2d::Zero()) {} - double m; - double J; + /** + * @brief Model mass. + */ + double m; + /** + * @brief Moment of inertia. + * + * The moment of inertia is about the axis coming out of the 2D plane. + */ + double J; + /** + * @brief Gravitational vector. + * + * Essentially defines which way is "down." Set to all zeroes if e.g., the 2D plane represents flat ground. + */ Vector2d g; }; +/** + * @brief Parameters for a 3D rigid body model. + * + * Picture a mass (not necessarily a point mass) free to move around 3D space. + */ struct RigidBodyParams3D { RigidBodyParams3D() : m(1), J(Matrix3d::Identity()), g(Vector3d::Zero()) {} - double m; + /** + * @brief Model mass. + */ + double m; + /** + * @brief Moment of inertia. + * + * Moments of inertia about all three principal axes, represented as \f$\boldsymbol{J}\in\mathbb{R}^{3\times 3}\f$. + */ Matrix3d J; + /** + * @brief Gravitational vector. + * + * Essentially defines which way is "down." Set to all zeroes if there's no gravity. + */ Vector3d g; }; +/** + * @brief Base class for defining the dynamics for 1D, 2D, and 3D *point masses*. + */ template struct TranslationalDynamicsBase { @@ -140,6 +248,17 @@ struct TranslationalDynamicsBase using ParamsType = PT; + /** + * @brief Update a provided state time derivative given an input and time interval. + * @param xdot The state time derivative signal to update. + * @param x The state signal to reference for the dynamics. + * @param u The input signal to reference for the dynamics. + * @param t0 The time at which to sample the state and input. + * @param tf The time at which to modify the state time derivative. + * @param params The rigid body model parameters. + * @param insertIntoHistory Whether to insert the answer into state time derivative signal history. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + */ static bool update(StateDotSignalType& xdot, const StateSignalType& x, const InputSignalType& u, @@ -179,6 +298,9 @@ template using TranslationalDynamics3DOF = TranslationalDynamicsBase, Vector3StateSignal, Vector3StateSignal, 3, RigidBodyParams3D>; +/** + * @brief Definition of the dynamics for planar rotation-only motion of a mass. + */ template struct RotationalDynamics1DOF { @@ -193,6 +315,17 @@ struct RotationalDynamics1DOF using ParamsType = RigidBodyParams2D; + /** + * @brief Update a provided state time derivative given an input and time interval. + * @param xdot The state time derivative signal to update. + * @param x The state signal to reference for the dynamics. + * @param u The input signal to reference for the dynamics. + * @param t0 The time at which to sample the state and input. + * @param tf The time at which to modify the state time derivative. + * @param params The 2D rigid body model parameters. + * @param insertIntoHistory Whether to insert the answer into state time derivative signal history. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + */ static bool update(StateDotSignalType& xdot, const StateSignalType& x, const InputSignalType& u, @@ -220,6 +353,9 @@ struct RotationalDynamics1DOF } }; +/** + * @brief Definition of the dynamics for 3D rotation-only motion of a mass. + */ template struct RotationalDynamics3DOF { @@ -234,6 +370,17 @@ struct RotationalDynamics3DOF using ParamsType = RigidBodyParams3D; + /** + * @brief Update a provided state time derivative given an input and time interval. + * @param xdot The state time derivative signal to update. + * @param x The state signal to reference for the dynamics. + * @param u The input signal to reference for the dynamics. + * @param t0 The time at which to sample the state and input. + * @param tf The time at which to modify the state time derivative. + * @param params The 3D rigid body model parameters. + * @param insertIntoHistory Whether to insert the answer into state time derivative signal history. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + */ static bool update(StateDotSignalType& xdot, const StateSignalType& x, const InputSignalType& u, @@ -261,6 +408,9 @@ struct RotationalDynamics3DOF } }; +/** + * @brief Definition of the dynamics for planar motion of a mass that's allowed to rotate. + */ template struct RigidBodyDynamics3DOF { @@ -275,6 +425,17 @@ struct RigidBodyDynamics3DOF using ParamsType = RigidBodyParams2D; + /** + * @brief Update a provided state time derivative given an input and time interval. + * @param xdot The state time derivative signal to update. + * @param x The state signal to reference for the dynamics. + * @param u The input signal to reference for the dynamics. + * @param t0 The time at which to sample the state and input. + * @param tf The time at which to modify the state time derivative. + * @param params The 2D rigid body model parameters. + * @param insertIntoHistory Whether to insert the answer into state time derivative signal history. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + */ static bool update(StateDotSignalType& xdot, const StateSignalType& x, const InputSignalType& u, @@ -305,6 +466,9 @@ struct RigidBodyDynamics3DOF } }; +/** + * @brief Definition of the dynamics for a 3D rigid body that can rotate about any axis. + */ template struct RigidBodyDynamics6DOF { @@ -319,6 +483,17 @@ struct RigidBodyDynamics6DOF using ParamsType = RigidBodyParams3D; + /** + * @brief Update a provided state time derivative given an input and time interval. + * @param xdot The state time derivative signal to update. + * @param x The state signal to reference for the dynamics. + * @param u The input signal to reference for the dynamics. + * @param t0 The time at which to sample the state and input. + * @param tf The time at which to modify the state time derivative. + * @param params The 3D rigid body model parameters. + * @param insertIntoHistory Whether to insert the answer into state time derivative signal history. + * @param calculateXddot Whether to use finite differencing to calculate the second time derivative of the state. + */ static bool update(StateDotSignalType& xdot, const StateSignalType& x, const InputSignalType& u, @@ -356,31 +531,15 @@ struct RigidBodyDynamics6DOF } }; -template -using Translational1DOFModel = Model>; - -template -using Translational2DOFModel = Model>; - -template -using Translational3DOFModel = Model>; - -template -using Rotational1DOFModel = Model>; - -template -using Rotational3DOFModel = Model>; - -template -using RigidBody3DOFModel = Model>; - -template -using RigidBody6DOFModel = Model>; - -typedef Translational1DOFModel Translational1DOFModeld; -typedef Translational2DOFModel Translational2DOFModeld; -typedef Translational3DOFModel Translational3DOFModeld; -typedef Rotational1DOFModel Rotational1DOFModeld; -typedef Rotational3DOFModel Rotational3DOFModeld; -typedef RigidBody3DOFModel RigidBody3DOFModeld; -typedef RigidBody6DOFModel RigidBody6DOFModeld; +#define MAKE_MODEL(ModelBaseName, ModelDOF) \ + template \ + using ModelBaseName##ModelDOF##Model = Model>; \ + typedef ModelBaseName##ModelDOF##Model ModelBaseName##ModelDOF##Modeld; + +MAKE_MODEL(Translational, 1DOF) +MAKE_MODEL(Translational, 2DOF) +MAKE_MODEL(Translational, 3DOF) +MAKE_MODEL(Rotational, 1DOF) +MAKE_MODEL(Rotational, 3DOF) +MAKE_MODEL(RigidBody, 3DOF) +MAKE_MODEL(RigidBody, 6DOF) diff --git a/include/signals/Signal.h b/include/signals/Signal.h index 292b0ea..b9e2a66 100644 --- a/include/signals/Signal.h +++ b/include/signals/Signal.h @@ -1,5 +1,6 @@ #pragma once #include +#include #include #include #include @@ -9,6 +10,9 @@ using namespace Eigen; +/** + * @brief ^^^^ TODO + */ enum InterpolationMethod { ZERO_ORDER_HOLD, @@ -635,7 +639,7 @@ struct VectorSignalSpec } static Type NansType() { - return Type::Zero(); // TODO fix + return Type::Constant(std::numeric_limits::quiet_NaN()); } }; @@ -649,7 +653,7 @@ struct ManifoldSignalSpec } static Type NansType() { - return Type::identity(); // TODO fix + return Type::nans(); } }; @@ -683,47 +687,28 @@ inline std::ostream& operator<<(std::ostream& os, const ManifoldSignal -using Vector1Signal = VectorSignal; -template -using Vector2Signal = VectorSignal; -template -using Vector3Signal = VectorSignal; -template -using Vector4Signal = VectorSignal; -template -using Vector5Signal = VectorSignal; -template -using Vector6Signal = VectorSignal; -template -using Vector7Signal = VectorSignal; -template -using Vector8Signal = VectorSignal; -template -using Vector9Signal = VectorSignal; -template -using Vector10Signal = VectorSignal; -template -using SO2Signal = ManifoldSignal, 1>; -template -using SO3Signal = ManifoldSignal, 3>; -template -using SE2Signal = ManifoldSignal, 3>; -template -using SE3Signal = ManifoldSignal, 6>; - -typedef ScalarSignal ScalardSignal; -typedef Vector1Signal Vector1dSignal; -typedef Vector2Signal Vector2dSignal; -typedef Vector3Signal Vector3dSignal; -typedef Vector4Signal Vector4dSignal; -typedef Vector5Signal Vector5dSignal; -typedef Vector6Signal Vector6dSignal; -typedef Vector7Signal Vector7dSignal; -typedef Vector8Signal Vector8dSignal; -typedef Vector9Signal Vector9dSignal; -typedef Vector10Signal Vector10dSignal; -typedef SO2Signal SO2dSignal; -typedef SO3Signal SO3dSignal; -typedef SE2Signal SE2dSignal; -typedef SE3Signal SE3dSignal; +#define MAKE_VECTOR_SIGNAL(Dimension) \ + template \ + using Vector##Dimension##Signal = VectorSignal; \ + typedef Vector##Dimension##Signal Vector##Dimension##dSignal; + +#define MAKE_MANIF_SIGNAL(Manif, Dimension) \ + template \ + using Manif##Signal = ManifoldSignal, Dimension>; \ + typedef Manif##Signal Manif##dSignal; + +typedef ScalarSignal ScalardSignal; +MAKE_VECTOR_SIGNAL(1) +MAKE_VECTOR_SIGNAL(2) +MAKE_VECTOR_SIGNAL(3) +MAKE_VECTOR_SIGNAL(4) +MAKE_VECTOR_SIGNAL(5) +MAKE_VECTOR_SIGNAL(6) +MAKE_VECTOR_SIGNAL(7) +MAKE_VECTOR_SIGNAL(8) +MAKE_VECTOR_SIGNAL(9) +MAKE_VECTOR_SIGNAL(10) +MAKE_MANIF_SIGNAL(SO2, 1) +MAKE_MANIF_SIGNAL(SO3, 3) +MAKE_MANIF_SIGNAL(SE2, 3) +MAKE_MANIF_SIGNAL(SE3, 6) diff --git a/include/signals/Signals.h b/include/signals/Signals.h index 2f2f459..e5b2ec4 100644 --- a/include/signals/Signals.h +++ b/include/signals/Signals.h @@ -4,3 +4,34 @@ #include "signals/Integration.h" #include "signals/State.h" #include "signals/Models.h" + +/** + * @mainpage signals-cpp Library Documentation + * + * @section intro_sec Introduction + * Header-only templated C++ library implementing rigid-body dynamics, derivatives, integrals, and interpolation. + * + * The key class definitions in this library from which all specialized types are derived are: + * + * - Signal + * - State + * - Model + * - Integrator + * + * @section install Installation + * This code is meant to be built as a static library with CMake. It should be compatible with the latest versions of + * Eigen and Boost (unit test framework only). + * The library [manif-geom-cpp](https://github.com/goromal/manif-geom-cpp) must also be installed. + * + * Install with + * + * ```bash + * mkdir build + * cd build + * cmake .. + * make # or make install + * ``` + * + * By default, building will also build and run the unit tests, but this can be turned off with the CMake option + * `BUILD_TESTS`. + */ diff --git a/include/signals/State.h b/include/signals/State.h index 84008be..e85dbc0 100644 --- a/include/signals/State.h +++ b/include/signals/State.h @@ -3,25 +3,69 @@ using namespace Eigen; +/** + * @brief Base type for all Model state representations. + * + * Provides a convenient union of the "pose" and "twist" (or time derivative of pose) components of a state vector and + * defines arithmetic operations for that union. + * + * A state is *not* a Signal type in itself, which is why separate `*Signal` types are derived below. + * + * **Derived types**: + * + * - `Scalar(d)State` and `Scalar(d)StateSignal` + * - `Vector1(d)State` and `Vector1(d)StateSignal` + * - `Vector2(d)State` and `Vector2(d)StateSignal` + * - `Vector3(d)State` and `Vector3(d)StateSignal` + * - `Vector4(d)State` and `Vector4(d)StateSignal` + * - `Vector5(d)State` and `Vector5(d)StateSignal` + * - `Vector6(d)State` and `Vector6(d)StateSignal` + * - `Vector7(d)State` and `Vector7(d)StateSignal` + * - `Vector8(d)State` and `Vector8(d)StateSignal` + * - `Vector9(d)State` and `Vector9(d)StateSignal` + * - `Vector10(d)State` and `Vector10(d)StateSignal` + * - `SO2(d)State` and `SO2(d)StateSignal` + * - `SO3(d)State` and `SO3(d)StateSignal` + * - `SE2(d)State` and `SE2(d)StateSignal` + * - `SE3(d)State` and `SE3(d)StateSignal` + */ template struct State { using PoseType = typename PoseTypeSpec::Type; using TwistType = typename TwistTypeSpec::Type; - PoseType pose; + /** + * @brief Pose type. + */ + PoseType pose; + /** + * @brief Twist (derivative of Pose) type. + */ TwistType twist; + /** + * @brief Initialize an empty state. + */ State() {} + /** + * @brief Initialize state from a pose and twist pointer array. + */ State(T* arr) : pose(arr), twist(arr + PoseDim) {} + /** + * @brief State copy constructor. + */ State(const State& other) { this->pose = other.pose; this->twist = other.twist; } + /** + * @brief Set the state to identity (zero) values across the board. + */ static State identity() { State x; @@ -30,6 +74,20 @@ struct State return x; } + /** + * @brief Set the state to NaN values across the board. + */ + static State nans() + { + State x; + x.pose = PoseTypeSpec::NansType(); + x.twist = TwistTypeSpec::NansType(); + return x; + } + + /** + * @brief Scale the state (pose and twist) by a scalar. + */ State& operator*=(const double& s) { pose *= s; @@ -37,6 +95,9 @@ struct State return *this; } + /** + * @brief Add a tangent space state (twist and derivative of twist) to the current state. + */ template State& operator+=(const State& r) { @@ -46,6 +107,9 @@ struct State } }; +/** + * @brief Add a tangent space state (twist and derivative of twist) to the current state. + */ template State operator+(const State& l, const State& r) { @@ -55,6 +119,9 @@ State operator+(const State& l, const return lpr; } +/** + * @brief Subtract a tangent space state (twist and derivative of twist) from the current state. + */ template State operator-(const State& l, const State& r) { @@ -64,6 +131,9 @@ State operator-(const State& l, const return lmr; } +/** + * @brief Scale the state (pose and twist) by a scalar. + */ template State operator*(const double& l, const State& r) { @@ -73,6 +143,9 @@ State operator*(const double& l, const State State operator*(const State& l, const double& r) { @@ -92,6 +165,9 @@ inline std::ostream& operator<<(std::ostream& os, const ScalarStateType& x) return os; } +/** + * @brief Scale the state (pose and twist) by a scalar. + */ template ScalarStateType operator/(const ScalarStateType& l, const double& r) { @@ -111,6 +187,9 @@ inline std::ostream& operator<<(std::ostream& os, const VectorStateType& x return os; } +/** + * @brief Scale the state (pose and twist) by a scalar. + */ template VectorStateType operator/(const VectorStateType& l, const double& r) { @@ -130,48 +209,20 @@ inline std::ostream& operator<<(std::ostream& os, const ManifoldStateType -using ScalarState = ScalarStateType; -template -using Vector1State = VectorStateType; -template -using Vector2State = VectorStateType; -template -using Vector3State = VectorStateType; -template -using Vector4State = VectorStateType; -template -using Vector5State = VectorStateType; -template -using Vector6State = VectorStateType; -template -using Vector7State = VectorStateType; -template -using Vector8State = VectorStateType; -template -using Vector9State = VectorStateType; -template -using Vector10State = VectorStateType; -template -using SO2State = ManifoldStateType, 2, 1>; -template -using SO3State = ManifoldStateType, 4, 3>; -template -using SE2State = ManifoldStateType, 4, 3>; -template -using SE3State = ManifoldStateType, 7, 6>; - template struct ScalarStateSignalSpec { using Type = ScalarStateType; + /** + * ^^^^ TODO + */ static Type ZeroType() { return Type::identity(); } static Type NansType() { - return Type::identity(); // TODO fix + return Type::nans(); } }; @@ -185,7 +236,7 @@ struct VectorStateSignalSpec } static Type NansType() { - return Type::identity(); // TODO fix + return Type::nans(); } }; @@ -199,7 +250,7 @@ struct ManifoldStateSignalSpec } static Type NansType() { - return Type::identity(); // TODO fix + return Type::nans(); } }; @@ -234,64 +285,37 @@ inline std::ostream& operator<<(std::ostream& os, const ManifoldStateSignal \ + using Vector##Dimension##State = VectorStateType; \ + template \ + using Vector##Dimension##StateSignal = VectorStateSignal; \ + typedef Vector##Dimension##State Vector##Dimension##dState; \ + typedef Vector##Dimension##StateSignal Vector##Dimension##dStateSignal; + +#define MAKE_MANIF_STATES(Manif, Dimension, TangentDimension) \ + template \ + using Manif##State = ManifoldStateType, Dimension, TangentDimension>; \ + template \ + using Manif##StateSignal = ManifoldStateSignal, Dimension, TangentDimension>; \ + typedef Manif##State Manif##dState; \ + typedef Manif##StateSignal Manif##dStateSignal; + template -using Vector1StateSignal = VectorStateSignal; -template -using Vector2StateSignal = VectorStateSignal; -template -using Vector3StateSignal = VectorStateSignal; -template -using Vector4StateSignal = VectorStateSignal; -template -using Vector5StateSignal = VectorStateSignal; -template -using Vector6StateSignal = VectorStateSignal; -template -using Vector7StateSignal = VectorStateSignal; -template -using Vector8StateSignal = VectorStateSignal; -template -using Vector9StateSignal = VectorStateSignal; -template -using Vector10StateSignal = VectorStateSignal; -template -using SO2StateSignal = ManifoldStateSignal, 2, 1>; -template -using SO3StateSignal = ManifoldStateSignal, 4, 3>; -template -using SE2StateSignal = ManifoldStateSignal, 4, 3>; -template -using SE3StateSignal = ManifoldStateSignal, 7, 6>; - -// TODO Macro-ize all these types of declarations and put them in Signals.h? -typedef ScalarState ScalardState; -typedef Vector1State Vector1dState; -typedef Vector2State Vector2dState; -typedef Vector3State Vector3dState; -typedef Vector4State Vector4dState; -typedef Vector5State Vector5dState; -typedef Vector6State Vector6dState; -typedef Vector7State Vector7dState; -typedef Vector8State Vector8dState; -typedef Vector9State Vector9dState; -typedef Vector10State Vector10dState; -typedef SO2State SO2dState; -typedef SO3State SO3dState; -typedef SE2State SE2dState; -typedef SE3State SE3dState; - -typedef ScalarStateSignal ScalardStateSignal; -typedef Vector1StateSignal Vector1dStateSignal; -typedef Vector2StateSignal Vector2dStateSignal; -typedef Vector3StateSignal Vector3dStateSignal; -typedef Vector4StateSignal Vector4dStateSignal; -typedef Vector5StateSignal Vector5dStateSignal; -typedef Vector6StateSignal Vector6dStateSignal; -typedef Vector7StateSignal Vector7dStateSignal; -typedef Vector8StateSignal Vector8dStateSignal; -typedef Vector9StateSignal Vector9dStateSignal; -typedef Vector10StateSignal Vector10dStateSignal; -typedef SO2StateSignal SO2dStateSignal; -typedef SO3StateSignal SO3dStateSignal; -typedef SE2StateSignal SE2dStateSignal; -typedef SE3StateSignal SE3dStateSignal; +using ScalarState = ScalarStateType; +typedef ScalarState ScalardState; +typedef ScalarStateSignal ScalardStateSignal; +MAKE_VECTOR_STATES(1) +MAKE_VECTOR_STATES(2) +MAKE_VECTOR_STATES(3) +MAKE_VECTOR_STATES(4) +MAKE_VECTOR_STATES(5) +MAKE_VECTOR_STATES(6) +MAKE_VECTOR_STATES(7) +MAKE_VECTOR_STATES(8) +MAKE_VECTOR_STATES(9) +MAKE_VECTOR_STATES(10) +MAKE_MANIF_STATES(SO2, 2, 1) +MAKE_MANIF_STATES(SO3, 4, 3) +MAKE_MANIF_STATES(SE2, 4, 3) +MAKE_MANIF_STATES(SE3, 7, 6) diff --git a/include/signals/Utils.h b/include/signals/Utils.h index b54dd24..f0c2b4f 100644 --- a/include/signals/Utils.h +++ b/include/signals/Utils.h @@ -3,6 +3,10 @@ namespace signal_utils { +/** + * @internal + * This function is for internal use for the Model and Integrator classes. + */ inline bool getTimeDelta(double& dt, const double& t0, const double& tf, const double& dt_max = std::numeric_limits::max()) { diff --git a/scripts/check_dockstrings.sh b/scripts/check_dockstrings.sh new file mode 100644 index 0000000..afa6116 --- /dev/null +++ b/scripts/check_dockstrings.sh @@ -0,0 +1,9 @@ +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" +SOURCE="$(readlink "$SOURCE")" +[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" +done +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" +cd "$DIR/.." +grep -Prn '(?