From aebf9e537729230daf29b6f397df67e404ecfd1c Mon Sep 17 00:00:00 2001 From: Agnel Wang <59766821+Agnel-Wang@users.noreply.github.com> Date: Tue, 18 Apr 2023 20:26:55 +0800 Subject: [PATCH] fix cartesian path bug --- .gitignore | 2 + CMakeLists.txt | 2 +- include/FSM/BaseState.h | 62 +- include/FSM/FSMState.h | 98 +- include/FSM/FiniteStateMachine.h | 54 +- include/FSM/State_BackToStart.h | 42 +- include/FSM/State_Calibration.h | 34 +- include/FSM/State_Cartesian.h | 2 +- include/FSM/State_JointSpace.h | 34 +- include/FSM/State_LowCmd.h | 34 +- include/FSM/State_MoveC.h | 44 +- include/FSM/State_MoveJ.h | 0 include/FSM/State_MoveL.h | 0 include/FSM/State_Passive.h | 28 +- include/FSM/State_SaveState.h | 34 +- include/FSM/State_Teach.h | 46 +- include/FSM/State_TeachRepeat.h | 54 +- include/FSM/State_ToState.h | 46 +- include/FSM/State_Trajectory.h | 72 +- include/common/enumClass.h | 76 +- include/common/math/Filter.h | 56 +- include/common/math/mathTypes.h | 216 +- include/common/utilities/CSVTool.h | 490 +- include/common/utilities/loop.h | 0 include/common/utilities/typeTrans.h | 148 +- include/control/CtrlComponents.h | 104 +- include/control/armSDK.h | 2 +- include/control/cmdPanel.h | 2 +- include/interface/IOInterface.h | 54 +- include/interface/IOROS.h | 0 include/interface/IOUDP.h | 50 +- include/message/LowlevelCmd.h | 112 +- include/message/LowlevelState.h | 122 +- include/message/MotorCmd.h | 522 +- include/message/MotorState.h | 582 +-- include/message/arm_common.h | 0 include/thirdparty/quadProgpp/Array.hh | 5064 +++++++++---------- include/thirdparty/quadProgpp/QuadProg++.hh | 154 +- include/thirdparty/tinyxml/tinystr.h | 610 +-- include/thirdparty/tinyxml/tinyxml.h | 3610 ++++++------- include/trajectory/EndCircleTraj.h | 62 +- include/trajectory/EndLineTraj.h | 0 include/trajectory/JointSpaceTraj.h | 64 +- include/trajectory/SCurve.h | 96 +- include/trajectory/StopForTime.h | 32 +- include/trajectory/TrajectoryManager.h | 74 +- lib/libZ1_ROS_Linux64.so | Bin 1639832 -> 1622640 bytes lib/libZ1_UDP_Linux64.so | Bin 1548768 -> 1531568 bytes main.cpp | 2 +- 49 files changed, 6497 insertions(+), 6495 deletions(-) create mode 100644 .gitignore mode change 100755 => 100644 include/FSM/State_Cartesian.h mode change 100755 => 100644 include/FSM/State_MoveJ.h mode change 100755 => 100644 include/FSM/State_MoveL.h mode change 100644 => 100755 include/common/math/Filter.h mode change 100644 => 100755 include/common/utilities/loop.h mode change 100755 => 100644 include/interface/IOROS.h mode change 100644 => 100755 include/message/arm_common.h mode change 100644 => 100755 include/thirdparty/quadProgpp/Array.hh mode change 100644 => 100755 include/thirdparty/quadProgpp/QuadProg++.hh mode change 100755 => 100644 include/trajectory/EndLineTraj.h mode change 100644 => 100755 lib/libZ1_ROS_Linux64.so mode change 100644 => 100755 lib/libZ1_UDP_Linux64.so mode change 100755 => 100644 main.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..af96791 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.vscode +build diff --git a/CMakeLists.txt b/CMakeLists.txt index 65723b4..f14ec80 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ set(PACKAGE_NAME z1_controller) set(CMAKE_CXX_FLAGS "$ENV{CXXFLAGS} -O3") # ----------------------options---------------------- -set(COMMUNICATION UDP) # UDP + set(COMMUNICATION UDP) # UDP # set(COMMUNICATION ROS) # ROS diff --git a/include/FSM/BaseState.h b/include/FSM/BaseState.h index 43d9071..96b7249 100755 --- a/include/FSM/BaseState.h +++ b/include/FSM/BaseState.h @@ -1,32 +1,32 @@ -#ifndef BASESTATE_H -#define BASESTATE_H - -#include -#include "common/enumClass.h" - -class BaseState{ -public: - BaseState(int stateNameEnum, std::string stateNameString) - : _stateNameEnum(stateNameEnum), _stateNameString(stateNameString){} - virtual ~BaseState(){}; - - virtual void enter() = 0; - virtual void run() = 0; - virtual void exit() = 0; - virtual int checkChange(int cmd) = 0; - - bool isState(int stateEnum){ - if(_stateNameEnum == stateEnum){ - return true; - }else{ - return false; - } - } - std::string getStateName(){return _stateNameString;} - int getStateNameEnum(){return _stateNameEnum;}; -protected: - int _stateNameEnum; - std::string _stateNameString; -}; - +#ifndef BASESTATE_H +#define BASESTATE_H + +#include +#include "common/enumClass.h" + +class BaseState{ +public: + BaseState(int stateNameEnum, std::string stateNameString) + : _stateNameEnum(stateNameEnum), _stateNameString(stateNameString){} + virtual ~BaseState(){}; + + virtual void enter() = 0; + virtual void run() = 0; + virtual void exit() = 0; + virtual int checkChange(int cmd) = 0; + + bool isState(int stateEnum){ + if(_stateNameEnum == stateEnum){ + return true; + }else{ + return false; + } + } + std::string getStateName(){return _stateNameString;} + int getStateNameEnum(){return _stateNameEnum;}; +protected: + int _stateNameEnum; + std::string _stateNameString; +}; + #endif \ No newline at end of file diff --git a/include/FSM/FSMState.h b/include/FSM/FSMState.h index 3fafdeb..7e45a39 100755 --- a/include/FSM/FSMState.h +++ b/include/FSM/FSMState.h @@ -1,49 +1,49 @@ -#ifndef FSMSTATE_H -#define FSMSTATE_H - -#include -#include -#include -#include "control/CtrlComponents.h" -#include "common/math/mathTools.h" -#include "common/utilities/timer.h" -#include "FSM/BaseState.h" - -class FSMState : public BaseState{ -public: - FSMState(CtrlComponents *ctrlComp, ArmFSMStateName stateName, std::string stateNameString); - virtual ~FSMState(){} - - virtual void enter() = 0; - virtual void run() = 0; - virtual void exit() = 0; - virtual int checkChange(int cmd) {return (int)ArmFSMStateName::INVALID;} - bool _collisionTest(); - -protected: - void _armCtrl(); - void _recordData(); - Vec6 _postureToVec6(Posture posture); - void _tauFriction(); - - LowlevelCmd *_lowCmd; - LowlevelState *_lowState; - IOInterface *_ioInter; - ArmModel *_armModel; - - Vec6 _qPast, _qdPast, _q, _qd, _qdd, _tauForward; - double _gripperPos, _gripperW, _gripperTau; - - CtrlComponents *_ctrlComp; - Vec6 _g, _tauCmd, _tauFric; - -private: - - uint _collisionCnt; - - Vec6 _mLinearFriction; - Vec6 _mCoulombFriction; - -}; - -#endif // FSMSTATE_H +#ifndef FSMSTATE_H +#define FSMSTATE_H + +#include +#include +#include +#include "control/CtrlComponents.h" +#include "common/math/mathTools.h" +#include "common/utilities/timer.h" +#include "FSM/BaseState.h" + +class FSMState : public BaseState{ +public: + FSMState(CtrlComponents *ctrlComp, ArmFSMStateName stateName, std::string stateNameString); + virtual ~FSMState(){} + + virtual void enter() = 0; + virtual void run() = 0; + virtual void exit() = 0; + virtual int checkChange(int cmd) {return (int)ArmFSMStateName::INVALID;} + bool _collisionTest(); + +protected: + void _armCtrl(); + void _recordData(); + Vec6 _postureToVec6(Posture posture); + void _tauFriction(); + + LowlevelCmd *_lowCmd; + LowlevelState *_lowState; + IOInterface *_ioInter; + ArmModel *_armModel; + + Vec6 _qPast, _qdPast, _q, _qd, _qdd, _tauForward; + double _gripperPos, _gripperW, _gripperTau; + + CtrlComponents *_ctrlComp; + Vec6 _g, _tauCmd, _tauFric; + +private: + + uint _collisionCnt; + + Vec6 _mLinearFriction; + Vec6 _mCoulombFriction; + +}; + +#endif // FSMSTATE_H diff --git a/include/FSM/FiniteStateMachine.h b/include/FSM/FiniteStateMachine.h index e6d1df7..4fcb3e6 100755 --- a/include/FSM/FiniteStateMachine.h +++ b/include/FSM/FiniteStateMachine.h @@ -1,28 +1,28 @@ -#ifndef FSM_H -#define FSM_H - -#include -#include "FSM/FSMState.h" -#include "common/utilities/loop.h" -#include "control/CtrlComponents.h" - -class FiniteStateMachine{ -public: - FiniteStateMachine(std::vector states, CtrlComponents *ctrlComp); - virtual ~FiniteStateMachine(); - -private: - void _run(); - std::vector _states; - - FSMMode _mode; - bool _running; - FSMState* _currentState; - FSMState* _nextState; - int _nextStateEnum; - - CtrlComponents *_ctrlComp; - LoopFunc *_runThread; -}; - +#ifndef FSM_H +#define FSM_H + +#include +#include "FSM/FSMState.h" +#include "common/utilities/loop.h" +#include "control/CtrlComponents.h" + +class FiniteStateMachine{ +public: + FiniteStateMachine(std::vector states, CtrlComponents *ctrlComp); + virtual ~FiniteStateMachine(); + +private: + void _run(); + std::vector _states; + + FSMMode _mode; + bool _running; + FSMState* _currentState; + FSMState* _nextState; + int _nextStateEnum; + + CtrlComponents *_ctrlComp; + LoopFunc *_runThread; +}; + #endif // FSM_H \ No newline at end of file diff --git a/include/FSM/State_BackToStart.h b/include/FSM/State_BackToStart.h index 61f239f..6c811ba 100644 --- a/include/FSM/State_BackToStart.h +++ b/include/FSM/State_BackToStart.h @@ -1,22 +1,22 @@ -#ifndef STATE_BACKTOSTART_H -#define STATE_BACKTOSTART_H - - -#include "FSM/FSMState.h" -#include "trajectory/JointSpaceTraj.h" - -class State_BackToStart : public FSMState{ -public: - State_BackToStart(CtrlComponents *ctrlComp); - ~State_BackToStart(); - void enter(); - void run(); - void exit(); - int checkChange(int cmd); -private: - bool _reach, _pastReach; - JointSpaceTraj *_jointTraj; - Vec6 _pos_startFlat; -}; - +#ifndef STATE_BACKTOSTART_H +#define STATE_BACKTOSTART_H + + +#include "FSM/FSMState.h" +#include "trajectory/JointSpaceTraj.h" + +class State_BackToStart : public FSMState{ +public: + State_BackToStart(CtrlComponents *ctrlComp); + ~State_BackToStart(); + void enter(); + void run(); + void exit(); + int checkChange(int cmd); +private: + bool _reach, _pastReach; + JointSpaceTraj *_jointTraj; + Vec6 _pos_startFlat; +}; + #endif // STATE_BACKTOSTART_H \ No newline at end of file diff --git a/include/FSM/State_Calibration.h b/include/FSM/State_Calibration.h index 4668eb9..87d7404 100644 --- a/include/FSM/State_Calibration.h +++ b/include/FSM/State_Calibration.h @@ -1,18 +1,18 @@ -#ifndef STATE_CALIBRATION_H -#define STATE_CALIBRATION_H - -#include "FSM/FSMState.h" - -class State_Calibration : public FSMState{ -public: - State_Calibration(CtrlComponents *ctrlComp); - ~State_Calibration(){} - void enter(); - void run(){}; - void exit(){}; - int checkChange(int cmd); -private: - -}; - +#ifndef STATE_CALIBRATION_H +#define STATE_CALIBRATION_H + +#include "FSM/FSMState.h" + +class State_Calibration : public FSMState{ +public: + State_Calibration(CtrlComponents *ctrlComp); + ~State_Calibration(){} + void enter(); + void run(){}; + void exit(){}; + int checkChange(int cmd); +private: + +}; + #endif // STATE_CALIBRATION_H \ No newline at end of file diff --git a/include/FSM/State_Cartesian.h b/include/FSM/State_Cartesian.h old mode 100755 new mode 100644 index 0b5ada3..68db655 --- a/include/FSM/State_Cartesian.h +++ b/include/FSM/State_Cartesian.h @@ -16,7 +16,7 @@ private: double _posSpeed = 0.2; double oriSpeedLimit = 0.5;// limits in SDK double posSpeedLimit = 0.5; - VecX _changeDirections; + VecX _changeDirectionsf; Vec6 _twist; HomoMat _endHomoGoal, _endHomoPast, _endHomoDelta; diff --git a/include/FSM/State_JointSpace.h b/include/FSM/State_JointSpace.h index 4b7bbdd..5a421d5 100755 --- a/include/FSM/State_JointSpace.h +++ b/include/FSM/State_JointSpace.h @@ -1,18 +1,18 @@ -#ifndef JOINTSPACE_H -#define JOINTSPACE_H - -#include "FSM/FSMState.h" - -class State_JointSpace : public FSMState{ -public: - State_JointSpace(CtrlComponents *ctrlComp); - ~State_JointSpace(){} - void enter(); - void run(); - void exit(); - int checkChange(int cmd); -private: - std::vector jointSpeedMax; -}; - +#ifndef JOINTSPACE_H +#define JOINTSPACE_H + +#include "FSM/FSMState.h" + +class State_JointSpace : public FSMState{ +public: + State_JointSpace(CtrlComponents *ctrlComp); + ~State_JointSpace(){} + void enter(); + void run(); + void exit(); + int checkChange(int cmd); +private: + std::vector jointSpeedMax; +}; + #endif // JOINTSPACE_H \ No newline at end of file diff --git a/include/FSM/State_LowCmd.h b/include/FSM/State_LowCmd.h index ce00143..c528e87 100755 --- a/include/FSM/State_LowCmd.h +++ b/include/FSM/State_LowCmd.h @@ -1,18 +1,18 @@ -#ifndef LOWCMD_H -#define LOWCMD_H - -#include "FSMState.h" - -class State_LowCmd : public FSMState{ -public: - State_LowCmd(CtrlComponents *ctrlComp); - void enter(); - void run(); - void exit(); - int checkChange(int cmd); -private: - std::vector _kp; - std::vector _kw; -}; - +#ifndef LOWCMD_H +#define LOWCMD_H + +#include "FSMState.h" + +class State_LowCmd : public FSMState{ +public: + State_LowCmd(CtrlComponents *ctrlComp); + void enter(); + void run(); + void exit(); + int checkChange(int cmd); +private: + std::vector _kp; + std::vector _kw; +}; + #endif // LOWCMD_H \ No newline at end of file diff --git a/include/FSM/State_MoveC.h b/include/FSM/State_MoveC.h index a226e61..9843ee0 100755 --- a/include/FSM/State_MoveC.h +++ b/include/FSM/State_MoveC.h @@ -1,23 +1,23 @@ -#ifndef MOVEC_H -#define MOVEC_H - -#include "FSM/FSMState.h" -#include "trajectory/EndCircleTraj.h" - -class State_MoveC : public FSMState{ -public: - State_MoveC(CtrlComponents *ctrlComp); - ~State_MoveC(); - void enter(); - void run(); - void exit(); - int checkChange(int cmd); -private: - double _speed; - std::vector _postures; - EndCircleTraj *_circleTraj; - bool _timeReached, _taskReached, _pastTaskReached, _finalReached; - uint _taskCnt; -}; - +#ifndef MOVEC_H +#define MOVEC_H + +#include "FSM/FSMState.h" +#include "trajectory/EndCircleTraj.h" + +class State_MoveC : public FSMState{ +public: + State_MoveC(CtrlComponents *ctrlComp); + ~State_MoveC(); + void enter(); + void run(); + void exit(); + int checkChange(int cmd); +private: + double _speed; + std::vector _postures; + EndCircleTraj *_circleTraj; + bool _timeReached, _taskReached, _pastTaskReached, _finalReached; + uint _taskCnt; +}; + #endif // CARTESIAN_H \ No newline at end of file diff --git a/include/FSM/State_MoveJ.h b/include/FSM/State_MoveJ.h old mode 100755 new mode 100644 diff --git a/include/FSM/State_MoveL.h b/include/FSM/State_MoveL.h old mode 100755 new mode 100644 diff --git a/include/FSM/State_Passive.h b/include/FSM/State_Passive.h index b4c4306..b3702d2 100755 --- a/include/FSM/State_Passive.h +++ b/include/FSM/State_Passive.h @@ -1,15 +1,15 @@ -#ifndef PASSIVE_H -#define PASSIVE_H - -#include "FSM/FSMState.h" - -class State_Passive : public FSMState{ -public: - State_Passive(CtrlComponents *ctrlComp); - void enter(); - void run(); - void exit(); - int checkChange(int cmd); -}; - +#ifndef PASSIVE_H +#define PASSIVE_H + +#include "FSM/FSMState.h" + +class State_Passive : public FSMState{ +public: + State_Passive(CtrlComponents *ctrlComp); + void enter(); + void run(); + void exit(); + int checkChange(int cmd); +}; + #endif // PASSIVE_H \ No newline at end of file diff --git a/include/FSM/State_SaveState.h b/include/FSM/State_SaveState.h index 5393fc7..412bc71 100755 --- a/include/FSM/State_SaveState.h +++ b/include/FSM/State_SaveState.h @@ -1,18 +1,18 @@ -#ifndef SAVESTATE_H -#define SAVESTATE_H - -#include "FSMState.h" -#include "common/utilities/CSVTool.h" - -class State_SaveState : public FSMState{ -public: - State_SaveState(CtrlComponents *ctrlComp); - ~State_SaveState(); - void enter(); - void run(); - void exit(); - int checkChange(int cmd); -private: -}; - +#ifndef SAVESTATE_H +#define SAVESTATE_H + +#include "FSMState.h" +#include "common/utilities/CSVTool.h" + +class State_SaveState : public FSMState{ +public: + State_SaveState(CtrlComponents *ctrlComp); + ~State_SaveState(); + void enter(); + void run(); + void exit(); + int checkChange(int cmd); +private: +}; + #endif // SAVESTATE_H \ No newline at end of file diff --git a/include/FSM/State_Teach.h b/include/FSM/State_Teach.h index 0bfcbb9..d4cb058 100755 --- a/include/FSM/State_Teach.h +++ b/include/FSM/State_Teach.h @@ -1,24 +1,24 @@ -#ifndef STATETEACH_H -#define STATETEACH_H - -#include "FSM/FSMState.h" - -class State_Teach : public FSMState{ -public: - State_Teach(CtrlComponents *ctrlComp); - ~State_Teach(); - void enter(); - void run(); - void exit(); - int checkChange(int cmd); -private: - CSVTool *_trajCSV; - size_t _stateID = 0; - - Vec6 _KdDiag; - Vec6 _kpForStable; - Mat6 _Kd; - double _errorBias; -}; - +#ifndef STATETEACH_H +#define STATETEACH_H + +#include "FSM/FSMState.h" + +class State_Teach : public FSMState{ +public: + State_Teach(CtrlComponents *ctrlComp); + ~State_Teach(); + void enter(); + void run(); + void exit(); + int checkChange(int cmd); +private: + CSVTool *_trajCSV; + size_t _stateID = 0; + + Vec6 _KdDiag; + Vec6 _kpForStable; + Mat6 _Kd; + double _errorBias; +}; + #endif // STATETEACH_H \ No newline at end of file diff --git a/include/FSM/State_TeachRepeat.h b/include/FSM/State_TeachRepeat.h index e79802e..9d816bf 100755 --- a/include/FSM/State_TeachRepeat.h +++ b/include/FSM/State_TeachRepeat.h @@ -1,28 +1,28 @@ -#ifndef STATE_TEACHREPEAT_H -#define STATE_TEACHREPEAT_H - -#include "FSM/FSMState.h" -#include "trajectory/TrajectoryManager.h" - -class State_TeachRepeat : public FSMState{ -public: - State_TeachRepeat(CtrlComponents *ctrlComp); - ~State_TeachRepeat(); - void enter(); - void run(); - void exit(); - int checkChange(int cmd); -private: - bool _setCorrectly; - JointSpaceTraj *_toStartTraj; - bool _reachedStart = false; - bool _finishedRepeat = false; - size_t _index = 0; - size_t _indexPast; - Vec6 _trajStartQ, _trajStartQd; - double _trajStartGripperQ, _trajStartGripperQd; - - CSVTool *_csvFile; -}; - +#ifndef STATE_TEACHREPEAT_H +#define STATE_TEACHREPEAT_H + +#include "FSM/FSMState.h" +#include "trajectory/TrajectoryManager.h" + +class State_TeachRepeat : public FSMState{ +public: + State_TeachRepeat(CtrlComponents *ctrlComp); + ~State_TeachRepeat(); + void enter(); + void run(); + void exit(); + int checkChange(int cmd); +private: + bool _setCorrectly; + JointSpaceTraj *_toStartTraj; + bool _reachedStart = false; + bool _finishedRepeat = false; + size_t _index = 0; + size_t _indexPast; + Vec6 _trajStartQ, _trajStartQd; + double _trajStartGripperQ, _trajStartGripperQd; + + CSVTool *_csvFile; +}; + #endif // STATE_TEACHREPEAT_H \ No newline at end of file diff --git a/include/FSM/State_ToState.h b/include/FSM/State_ToState.h index 066ceb3..e063f77 100755 --- a/include/FSM/State_ToState.h +++ b/include/FSM/State_ToState.h @@ -1,24 +1,24 @@ -#ifndef TOSTATE_H -#define TOSTATE_H - -#include "FSM/FSMState.h" -#include "trajectory/JointSpaceTraj.h" - -class State_ToState : public FSMState{ -public: - State_ToState(CtrlComponents *ctrlComp); - ~State_ToState(); - void enter(); - void run(); - void exit(); - int checkChange(int cmd); -private: - bool _setCorrectly; - double _costTime; - HomoMat _goalHomo; - JointSpaceTraj *_jointTraj; - bool _reach, _pastReach; - std::string _goalName; -}; - +#ifndef TOSTATE_H +#define TOSTATE_H + +#include "FSM/FSMState.h" +#include "trajectory/JointSpaceTraj.h" + +class State_ToState : public FSMState{ +public: + State_ToState(CtrlComponents *ctrlComp); + ~State_ToState(); + void enter(); + void run(); + void exit(); + int checkChange(int cmd); +private: + bool _setCorrectly; + double _costTime; + HomoMat _goalHomo; + JointSpaceTraj *_jointTraj; + bool _reach, _pastReach; + std::string _goalName; +}; + #endif // TOSTATE_H \ No newline at end of file diff --git a/include/FSM/State_Trajectory.h b/include/FSM/State_Trajectory.h index 9955df9..a5da191 100755 --- a/include/FSM/State_Trajectory.h +++ b/include/FSM/State_Trajectory.h @@ -1,37 +1,37 @@ -#ifndef CARTESIANPATH_H -#define CARTESIANPATH_H - -#include "FSM/FSMState.h" -#include "trajectory/TrajectoryManager.h" - -class State_Trajectory : public FSMState{ -public: - State_Trajectory(CtrlComponents *ctrlComp, - ArmFSMStateName stateEnum = ArmFSMStateName::TRAJECTORY, - std::string stateString = "trajectory"); - ~State_Trajectory(); - void enter(); - void run(); - void exit(); - int checkChange(int cmd); -protected: - void _setTraj(); - - TrajectoryManager *_traj; - HomoMat _goalHomo; - Vec6 _goalTwist; - double speedTemp; - - JointSpaceTraj *_toStartTraj; - bool _reachedStart = false; - bool _finishedTraj = false; - std::vector _jointTraj; - std::vector _circleTraj; - std::vector _stopTraj; - std::vector _lineTraj; - - static std::vector _trajCmd; - Vec6 _posture[2]; -}; - +#ifndef CARTESIANPATH_H +#define CARTESIANPATH_H + +#include "FSM/FSMState.h" +#include "trajectory/TrajectoryManager.h" + +class State_Trajectory : public FSMState{ +public: + State_Trajectory(CtrlComponents *ctrlComp, + ArmFSMStateName stateEnum = ArmFSMStateName::TRAJECTORY, + std::string stateString = "trajectory"); + ~State_Trajectory(); + void enter(); + void run(); + void exit(); + int checkChange(int cmd); +protected: + void _setTraj(); + + TrajectoryManager *_traj; + HomoMat _goalHomo; + Vec6 _goalTwist; + double speedTemp; + + JointSpaceTraj *_toStartTraj; + bool _reachedStart = false; + bool _finishedTraj = false; + std::vector _jointTraj; + std::vector _circleTraj; + std::vector _stopTraj; + std::vector _lineTraj; + + static std::vector _trajCmd; + Vec6 _posture[2]; +}; + #endif // CARTESIANPATH_H \ No newline at end of file diff --git a/include/common/enumClass.h b/include/common/enumClass.h index a48e186..754a835 100755 --- a/include/common/enumClass.h +++ b/include/common/enumClass.h @@ -1,39 +1,39 @@ -#ifndef ENUMCLASS_H -#define ENUMCLASS_H - -enum class FSMMode{ - NORMAL, - CHANGE -}; - -enum class ArmFSMStateName{ - INVALID, - PASSIVE, - JOINTCTRL, - CARTESIAN, - MOVEJ, - MOVEL, - MOVEC, - TRAJECTORY, - TOSTATE, - SAVESTATE, - TEACH, - TEACHREPEAT, - CALIBRATION, - SETTRAJ,//no longer used - BACKTOSTART, - NEXT, - LOWCMD -}; - -enum class JointMotorType{ - SINGLE_MOTOR, - DOUBLE_MOTOR -}; - -enum class Control{ - KEYBOARD, - SDK -}; - +#ifndef ENUMCLASS_H +#define ENUMCLASS_H + +enum class FSMMode{ + NORMAL, + CHANGE +}; + +enum class ArmFSMStateName{ + INVALID, + PASSIVE, + JOINTCTRL, + CARTESIAN, + MOVEJ, + MOVEL, + MOVEC, + TRAJECTORY, + TOSTATE, + SAVESTATE, + TEACH, + TEACHREPEAT, + CALIBRATION, + SETTRAJ,//no longer used + BACKTOSTART, + NEXT, + LOWCMD +}; + +enum class JointMotorType{ + SINGLE_MOTOR, + DOUBLE_MOTOR +}; + +enum class Control{ + KEYBOARD, + SDK +}; + #endif // ENUMCLASS_H \ No newline at end of file diff --git a/include/common/math/Filter.h b/include/common/math/Filter.h old mode 100644 new mode 100755 index ec421da..c5bebe3 --- a/include/common/math/Filter.h +++ b/include/common/math/Filter.h @@ -1,29 +1,29 @@ -#ifndef FILTER -#define FILTER - -#include -#include - -/* - Low pass filter -*/ -class LPFilter{ -public: - LPFilter(double samplePeriod, double cutFrequency, size_t valueCount); - ~LPFilter(){}; - void clear(); - void addValue(double &newValue); - void addValue(std::vector &vec); - - template - void addValue(Eigen::MatrixBase &eigenVec); - - // double getValue(); -private: - size_t _valueCount; - double _weight; - std::vector _pastValue; - bool _start; -}; - +#ifndef FILTER +#define FILTER + +#include +#include + +/* + Low pass filter +*/ +class LPFilter{ +public: + LPFilter(double samplePeriod, double cutFrequency, size_t valueCount); + ~LPFilter(){}; + void clear(); + void addValue(double &newValue); + void addValue(std::vector &vec); + + template + void addValue(Eigen::MatrixBase &eigenVec); + + // double getValue(); +private: + size_t _valueCount; + double _weight; + std::vector _pastValue; + bool _start; +}; + #endif // FILTER \ No newline at end of file diff --git a/include/common/math/mathTypes.h b/include/common/math/mathTypes.h index b74c7d7..08ca8a6 100755 --- a/include/common/math/mathTypes.h +++ b/include/common/math/mathTypes.h @@ -1,109 +1,109 @@ -#ifndef MATHTYPES_H -#define MATHTYPES_H - -#include -#include - -/************************/ -/******** Vector ********/ -/************************/ -// 2x1 Vector -using Vec2 = typename Eigen::Matrix; - -// 3x1 Vector -using Vec3 = typename Eigen::Matrix; - -// 4x1 Vector -using Vec4 = typename Eigen::Matrix; - -// 6x1 Vector -using Vec6 = typename Eigen::Matrix; - -// Quaternion -using Quat = typename Eigen::Matrix; - -// 4x1 Integer Vector -using VecInt4 = typename Eigen::Matrix; - -// 12x1 Vector -using Vec12 = typename Eigen::Matrix; - -// 18x1 Vector -using Vec18 = typename Eigen::Matrix; - -// Dynamic Length Vector -using VecX = typename Eigen::Matrix; - -/************************/ -/******** Matrix ********/ -/************************/ -// Rotation Matrix -using RotMat = typename Eigen::Matrix; - -// Homogenous Matrix -using HomoMat = typename Eigen::Matrix; - -// 2x2 Matrix -using Mat2 = typename Eigen::Matrix; - -// 3x3 Matrix -using Mat3 = typename Eigen::Matrix; - -// 3x4 Matrix, each column is a 3x1 vector -using Vec34 = typename Eigen::Matrix; - -// 6x6 Matrix -using Mat6 = typename Eigen::Matrix; - -// 12x12 Matrix -using Mat12 = typename Eigen::Matrix; - -// 3x3 Identity Matrix -#define I3 Eigen::MatrixXd::Identity(3, 3) - -// 6x6 Identity Matrix -#define I6 Eigen::MatrixXd::Identity(6, 6) - -// 12x12 Identity Matrix -#define I12 Eigen::MatrixXd::Identity(12, 12) - -// 18x18 Identity Matrix -#define I18 Eigen::MatrixXd::Identity(18, 18) - -// Dynamic Size Matrix -using MatX = typename Eigen::Matrix; - -/************************/ -/****** Functions *******/ -/************************/ -inline Vec34 vec12ToVec34(Vec12 vec12){ - Vec34 vec34; - for(int i(0); i < 4; ++i){ - vec34.col(i) = vec12.segment(3*i, 3); - } - return vec34; -} - -inline Vec12 vec34ToVec12(Vec34 vec34){ - Vec12 vec12; - for(int i(0); i < 4; ++i){ - vec12.segment(3*i, 3) = vec34.col(i); - } - return vec12; -} - -template -inline VecX stdVecToEigenVec(T stdVec){ - VecX eigenVec = Eigen::VectorXd::Map(&stdVec[0], stdVec.size()); - return eigenVec; -} - -inline std::vector EigenVectostdVec(VecX eigenVec){ - std::vector stdVec; - for(int i(0); i +#include + +/************************/ +/******** Vector ********/ +/************************/ +// 2x1 Vector +using Vec2 = typename Eigen::Matrix; + +// 3x1 Vector +using Vec3 = typename Eigen::Matrix; + +// 4x1 Vector +using Vec4 = typename Eigen::Matrix; + +// 6x1 Vector +using Vec6 = typename Eigen::Matrix; + +// Quaternion +using Quat = typename Eigen::Matrix; + +// 4x1 Integer Vector +using VecInt4 = typename Eigen::Matrix; + +// 12x1 Vector +using Vec12 = typename Eigen::Matrix; + +// 18x1 Vector +using Vec18 = typename Eigen::Matrix; + +// Dynamic Length Vector +using VecX = typename Eigen::Matrix; + +/************************/ +/******** Matrix ********/ +/************************/ +// Rotation Matrix +using RotMat = typename Eigen::Matrix; + +// Homogenous Matrix +using HomoMat = typename Eigen::Matrix; + +// 2x2 Matrix +using Mat2 = typename Eigen::Matrix; + +// 3x3 Matrix +using Mat3 = typename Eigen::Matrix; + +// 3x4 Matrix, each column is a 3x1 vector +using Vec34 = typename Eigen::Matrix; + +// 6x6 Matrix +using Mat6 = typename Eigen::Matrix; + +// 12x12 Matrix +using Mat12 = typename Eigen::Matrix; + +// 3x3 Identity Matrix +#define I3 Eigen::MatrixXd::Identity(3, 3) + +// 6x6 Identity Matrix +#define I6 Eigen::MatrixXd::Identity(6, 6) + +// 12x12 Identity Matrix +#define I12 Eigen::MatrixXd::Identity(12, 12) + +// 18x18 Identity Matrix +#define I18 Eigen::MatrixXd::Identity(18, 18) + +// Dynamic Size Matrix +using MatX = typename Eigen::Matrix; + +/************************/ +/****** Functions *******/ +/************************/ +inline Vec34 vec12ToVec34(Vec12 vec12){ + Vec34 vec34; + for(int i(0); i < 4; ++i){ + vec34.col(i) = vec12.segment(3*i, 3); + } + return vec34; +} + +inline Vec12 vec34ToVec12(Vec34 vec34){ + Vec12 vec12; + for(int i(0); i < 4; ++i){ + vec12.segment(3*i, 3) = vec34.col(i); + } + return vec12; +} + +template +inline VecX stdVecToEigenVec(T stdVec){ + VecX eigenVec = Eigen::VectorXd::Map(&stdVec[0], stdVec.size()); + return eigenVec; +} + +inline std::vector EigenVectostdVec(VecX eigenVec){ + std::vector stdVec; + for(int i(0); i (read only) - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include "common/utilities/typeTrans.h" - -enum class FileType{ - READ_WRITE, - CLEAR_DUMP -}; - -class CSVLine{ -public: - // CSVLine(std::string lineTemp, std::streampos filePos); - CSVLine(std::string lineTemp); - CSVLine(std::string label, std::vector values); - ~CSVLine(){} - - // void updateFilePos(std::streampos filePos){_filePos = filePos;} - void getValues(std::vector &values); - void changeValue(std::vector values); - void writeAtEnd(std::fstream &ioStream); - std::string getLabel(){return _label;} - -private: - // std::streampos _filePos; - std::string _label; - std::vector _values; -}; - -/* -FileType::READ_WRITE : must already exist such fileName -FileType::CLEAR_DUMP : if do not exist such file, will create one -*/ -class CSVTool{ -public: - CSVTool(std::string fileName, FileType type = FileType::READ_WRITE, int precision = 6); - ~CSVTool(){_ioStream.close();} - - bool getLine(std::string label, std::vector &values); - template - bool getLineDirect(std::string label, Args&... values); - - void modifyLine(std::string label, std::vector &values, bool addNew); - template - void modifyLineDirect(std::string label, bool addNew, Args&... values); - - void readFile(); - void saveFile(); - - bool _hasFile; -private: - std::string _fileName; - std::fstream _ioStream; - int _precision; - std::string _lineTemp; - std::map _labels; - std::vector _lines; - -}; - -/*************************/ -/* CSVLine */ -/*************************/ -// CSVLine::CSVLine(std::string lineTemp, std::streampos filePos) -// :_filePos(filePos){ - -// // std::cout << lineTemp << std::endl; -// } - -inline CSVLine::CSVLine(std::string lineTemp){ - // delete all spaces - lineTemp.erase(std::remove(lineTemp.begin(), lineTemp.end(), ' '), lineTemp.end()); - - std::stringstream ss(lineTemp); - std::string stringTemp; - - std::getline(ss, _label, ','); - - while(std::getline(ss, stringTemp, ',')){ - _values.push_back(stod(stringTemp)); - } - - // std::cout << "**********" << std::endl; - // std::cout << "_label: " << _label << std::fixed << std::setprecision(3) << std::endl; - // for(int i(0); i<_values.size(); ++i){ - // std::cout << _values.at(i) << ",,, "; - // } - // std::cout << std::endl; -} - -inline CSVLine::CSVLine(std::string label, std::vector values) - :_label(label), _values(values){ - -} - -inline void CSVLine::changeValue(std::vector values){ - if(values.size() != _values.size()){ - std::cout << "[WARNING] CSVLine::changeValue, the size changed" << std::endl; - } - _values = values; -} - -inline void CSVLine::getValues(std::vector &values){ - values = _values; -} - -inline void CSVLine::writeAtEnd(std::fstream &ioStream){ - ioStream << _label << ", "; - - for(int i(0); i<_values.size(); ++i){ - ioStream << _values.at(i) << ", "; - } - - ioStream << std::endl; -} - - -/*************************/ -/* CSVTool */ -/*************************/ -inline CSVTool::CSVTool(std::string fileName, FileType type, int precision) - : _fileName(fileName), _precision(precision){ - - if(type == FileType::READ_WRITE){ - _ioStream.open(_fileName, std::fstream::ate | std::fstream::in | std::fstream::out); - - if(!_ioStream.is_open()){ - std::cout << "[ERROR] CSVTool open file: " << fileName << " failed!" << std::endl; - // exit(-1); - _hasFile = false; - }else{ - readFile(); - _hasFile = true; - } - - } - else if(type == FileType::CLEAR_DUMP){ - _ioStream.open(_fileName, std::fstream::out); - } - -} - -inline void CSVTool::readFile(){ - if(!_ioStream.is_open()){ - // _ioStream.open(_fileName, std::fstream::ate | std::fstream::in | std::fstream::out); - std::cout << "[ERROR] CSVTool::readFile, file: " << _fileName << " has not been opened!" << std::endl; - return; - } - - _lines.clear(); - _labels.clear(); - - _ioStream.seekg(0, std::fstream::beg); - size_t lineNum = 0; - while(_ioStream && _ioStream.tellg() != std::fstream::end && getline(_ioStream, _lineTemp)){ - _lines.push_back( new CSVLine(_lineTemp) ); - - if(_labels.count(_lines.at(lineNum)->getLabel()) == 0){ - _labels.insert(std::pair(_lines.at(lineNum)->getLabel(), lineNum)); - ++lineNum; - }else{ - std::cout << "[ERROR] CSVTool::readFile, the label " - << _lines.at(lineNum)->getLabel() << " is repeated" << std::endl; - exit(-1); - } - } -} - -inline bool CSVTool::getLine(std::string label, std::vector &values){ - if(_labels.count(label) == 0){ - std::cout << "[ERROR] No such label: " << label << std::endl; - return false; - }else{ - _lines.at(_labels[label])->getValues(values); - return true; - } -} - -template -inline bool CSVTool::getLineDirect(std::string label, Args&... values){ - std::vector vec; - if(getLine(label, vec)){ - typeTrans::extractVector(vec, values...); - return true; - }else{ - return false; - } -} - -template -inline void CSVTool::modifyLineDirect(std::string label, bool addNew, Args&... values){ - std::vector vec; - typeTrans::combineToVector(vec, values...); - -// std::cout << "CSVTool::modifyLineDirect------" << std::endl; -// std::cout << "label: " << label << std::endl; -// std::cout << "vec: "; -// for(int i(0); iwriteAtEnd(_ioStream); - } - - _ioStream.close(); - _ioStream.open(_fileName, std::fstream::ate | std::fstream::in | std::fstream::out); -} - -inline void CSVTool::modifyLine(std::string label, std::vector &values, bool addNew =false){ - if(_labels.count(label) == 0){ - if(addNew){ - _labels.insert(std::pair(label, _labels.size())); - _lines.push_back(new CSVLine(label, values)); - }else{ - std::cout << "[ERROR] CSVTool::modifyLine, label " << label << "does not exist" << std::endl; - exit(-1); - } - }else{ - _lines.at(_labels[label])->changeValue(values); - } -} - - +#ifndef CSVTOOL_H +#define CSVTOOL_H + +/* + personal tool for .csv reading and modifying. + only suitable for small .csv file. + for large .csv, try (read only) + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include "common/utilities/typeTrans.h" + +enum class FileType{ + READ_WRITE, + CLEAR_DUMP +}; + +class CSVLine{ +public: + // CSVLine(std::string lineTemp, std::streampos filePos); + CSVLine(std::string lineTemp); + CSVLine(std::string label, std::vector values); + ~CSVLine(){} + + // void updateFilePos(std::streampos filePos){_filePos = filePos;} + void getValues(std::vector &values); + void changeValue(std::vector values); + void writeAtEnd(std::fstream &ioStream); + std::string getLabel(){return _label;} + +private: + // std::streampos _filePos; + std::string _label; + std::vector _values; +}; + +/* +FileType::READ_WRITE : must already exist such fileName +FileType::CLEAR_DUMP : if do not exist such file, will create one +*/ +class CSVTool{ +public: + CSVTool(std::string fileName, FileType type = FileType::READ_WRITE, int precision = 6); + ~CSVTool(){_ioStream.close();} + + bool getLine(std::string label, std::vector &values); + template + bool getLineDirect(std::string label, Args&... values); + + void modifyLine(std::string label, std::vector &values, bool addNew); + template + void modifyLineDirect(std::string label, bool addNew, Args&... values); + + void readFile(); + void saveFile(); + + bool _hasFile; +private: + std::string _fileName; + std::fstream _ioStream; + int _precision; + std::string _lineTemp; + std::map _labels; + std::vector _lines; + +}; + +/*************************/ +/* CSVLine */ +/*************************/ +// CSVLine::CSVLine(std::string lineTemp, std::streampos filePos) +// :_filePos(filePos){ + +// // std::cout << lineTemp << std::endl; +// } + +inline CSVLine::CSVLine(std::string lineTemp){ + // delete all spaces + lineTemp.erase(std::remove(lineTemp.begin(), lineTemp.end(), ' '), lineTemp.end()); + + std::stringstream ss(lineTemp); + std::string stringTemp; + + std::getline(ss, _label, ','); + + while(std::getline(ss, stringTemp, ',')){ + _values.push_back(stod(stringTemp)); + } + + // std::cout << "**********" << std::endl; + // std::cout << "_label: " << _label << std::fixed << std::setprecision(3) << std::endl; + // for(int i(0); i<_values.size(); ++i){ + // std::cout << _values.at(i) << ",,, "; + // } + // std::cout << std::endl; +} + +inline CSVLine::CSVLine(std::string label, std::vector values) + :_label(label), _values(values){ + +} + +inline void CSVLine::changeValue(std::vector values){ + if(values.size() != _values.size()){ + std::cout << "[WARNING] CSVLine::changeValue, the size changed" << std::endl; + } + _values = values; +} + +inline void CSVLine::getValues(std::vector &values){ + values = _values; +} + +inline void CSVLine::writeAtEnd(std::fstream &ioStream){ + ioStream << _label << ", "; + + for(int i(0); i<_values.size(); ++i){ + ioStream << _values.at(i) << ", "; + } + + ioStream << std::endl; +} + + +/*************************/ +/* CSVTool */ +/*************************/ +inline CSVTool::CSVTool(std::string fileName, FileType type, int precision) + : _fileName(fileName), _precision(precision){ + + if(type == FileType::READ_WRITE){ + _ioStream.open(_fileName, std::fstream::ate | std::fstream::in | std::fstream::out); + + if(!_ioStream.is_open()){ + std::cout << "[ERROR] CSVTool open file: " << fileName << " failed!" << std::endl; + // exit(-1); + _hasFile = false; + }else{ + readFile(); + _hasFile = true; + } + + } + else if(type == FileType::CLEAR_DUMP){ + _ioStream.open(_fileName, std::fstream::out); + } + +} + +inline void CSVTool::readFile(){ + if(!_ioStream.is_open()){ + // _ioStream.open(_fileName, std::fstream::ate | std::fstream::in | std::fstream::out); + std::cout << "[ERROR] CSVTool::readFile, file: " << _fileName << " has not been opened!" << std::endl; + return; + } + + _lines.clear(); + _labels.clear(); + + _ioStream.seekg(0, std::fstream::beg); + size_t lineNum = 0; + while(_ioStream && _ioStream.tellg() != std::fstream::end && getline(_ioStream, _lineTemp)){ + _lines.push_back( new CSVLine(_lineTemp) ); + + if(_labels.count(_lines.at(lineNum)->getLabel()) == 0){ + _labels.insert(std::pair(_lines.at(lineNum)->getLabel(), lineNum)); + ++lineNum; + }else{ + std::cout << "[ERROR] CSVTool::readFile, the label " + << _lines.at(lineNum)->getLabel() << " is repeated" << std::endl; + exit(-1); + } + } +} + +inline bool CSVTool::getLine(std::string label, std::vector &values){ + if(_labels.count(label) == 0){ + std::cout << "[ERROR] No such label: " << label << std::endl; + return false; + }else{ + _lines.at(_labels[label])->getValues(values); + return true; + } +} + +template +inline bool CSVTool::getLineDirect(std::string label, Args&... values){ + std::vector vec; + if(getLine(label, vec)){ + typeTrans::extractVector(vec, values...); + return true; + }else{ + return false; + } +} + +template +inline void CSVTool::modifyLineDirect(std::string label, bool addNew, Args&... values){ + std::vector vec; + typeTrans::combineToVector(vec, values...); + +// std::cout << "CSVTool::modifyLineDirect------" << std::endl; +// std::cout << "label: " << label << std::endl; +// std::cout << "vec: "; +// for(int i(0); iwriteAtEnd(_ioStream); + } + + _ioStream.close(); + _ioStream.open(_fileName, std::fstream::ate | std::fstream::in | std::fstream::out); +} + +inline void CSVTool::modifyLine(std::string label, std::vector &values, bool addNew =false){ + if(_labels.count(label) == 0){ + if(addNew){ + _labels.insert(std::pair(label, _labels.size())); + _lines.push_back(new CSVLine(label, values)); + }else{ + std::cout << "[ERROR] CSVTool::modifyLine, label " << label << "does not exist" << std::endl; + exit(-1); + } + }else{ + _lines.at(_labels[label])->changeValue(values); + } +} + + #endif // CSVTOOL_H \ No newline at end of file diff --git a/include/common/utilities/loop.h b/include/common/utilities/loop.h old mode 100644 new mode 100755 diff --git a/include/common/utilities/typeTrans.h b/include/common/utilities/typeTrans.h index 0f422e8..8096676 100755 --- a/include/common/utilities/typeTrans.h +++ b/include/common/utilities/typeTrans.h @@ -1,75 +1,75 @@ -#ifndef TYPETRANS_H -#define TYPETRANS_H - -#include -#include -#include - -namespace typeTrans{ - -inline void addValue(std::vector &vec, double value){ - vec.push_back(value); -} - -inline double getValue(std::vector &vec, double value){ - value = vec.at(0); - std::vector::iterator begin = vec.begin(); - vec.erase(begin); - - return value; -} - -inline void addValue(std::vector &vec, Eigen::MatrixXd value){ - for(int i(0); i &vec, Eigen::MatrixXd value){ - std::vector::iterator begin = vec.begin(); - std::vector::iterator end = begin; - - for(int i(0); i -inline void combineToVector(std::vector &vec, T value){ - addValue(vec, value); -} - -template -inline void combineToVector(std::vector &vec, const T t, const Args... rest){ - combineToVector(vec, t); - - combineToVector(vec, rest...); -} - - -/* extract different type variables from vector */ -template -inline void extractVector(std::vector &vec, T &value){ - value = getValue(vec, value); -} - -template -inline void extractVector(std::vector &vec, T &t, Args&... rest){ - extractVector(vec, t); - - extractVector(vec, rest...); -} - -} - +#ifndef TYPETRANS_H +#define TYPETRANS_H + +#include +#include +#include + +namespace typeTrans{ + +inline void addValue(std::vector &vec, double value){ + vec.push_back(value); +} + +inline double getValue(std::vector &vec, double value){ + value = vec.at(0); + std::vector::iterator begin = vec.begin(); + vec.erase(begin); + + return value; +} + +inline void addValue(std::vector &vec, Eigen::MatrixXd value){ + for(int i(0); i &vec, Eigen::MatrixXd value){ + std::vector::iterator begin = vec.begin(); + std::vector::iterator end = begin; + + for(int i(0); i +inline void combineToVector(std::vector &vec, T value){ + addValue(vec, value); +} + +template +inline void combineToVector(std::vector &vec, const T t, const Args... rest){ + combineToVector(vec, t); + + combineToVector(vec, rest...); +} + + +/* extract different type variables from vector */ +template +inline void extractVector(std::vector &vec, T &value){ + value = getValue(vec, value); +} + +template +inline void extractVector(std::vector &vec, T &t, Args&... rest){ + extractVector(vec, t); + + extractVector(vec, rest...); +} + +} + #endif // TYPETRANS_H \ No newline at end of file diff --git a/include/control/CtrlComponents.h b/include/control/CtrlComponents.h index 6b4e242..9829ba0 100755 --- a/include/control/CtrlComponents.h +++ b/include/control/CtrlComponents.h @@ -1,53 +1,53 @@ -#ifndef CTRLCOMPONENTS_H -#define CTRLCOMPONENTS_H - -#include -#include -#include "common/utilities/loop.h" -#include "message/arm_common.h" -#include "message/LowlevelCmd.h" -#include "message/LowlevelState.h" -#include "common/utilities/CSVTool.h" -#include "model/ArmModel.h" -#include "interface/IOUDP.h" -#include "interface/IOROS.h" -#include "control/armSDK.h" - -using namespace std; - -struct CtrlComponents{ -public: - CtrlComponents(int argc, char**argv); - ~CtrlComponents(); - - std::string armConfigPath; - CmdPanel *cmdPanel; - IOInterface *ioInter; - Z1Model *armModel; - CSVTool *stateCSV; - - SendCmd sendCmd; // cmd that receive from SDK - RecvState recvState;// state that send to SDK - - //config - double dt; - bool *running; - Control ctrl = Control::SDK; - bool hasGripper; - bool isCollisionOpen; - double collisionTLimit; - bool isPlot; - int trajChoose = 1; - size_t armType = 36; - - void geneObj(); - void writeData(); -private: - void configProcess(int argc, char** argv); - - std::string ctrl_IP; - uint ctrl_port; - double _loadWeight; -}; - +#ifndef CTRLCOMPONENTS_H +#define CTRLCOMPONENTS_H + +#include +#include +#include "common/utilities/loop.h" +#include "message/arm_common.h" +#include "message/LowlevelCmd.h" +#include "message/LowlevelState.h" +#include "common/utilities/CSVTool.h" +#include "model/ArmModel.h" +#include "interface/IOUDP.h" +#include "interface/IOROS.h" +#include "control/armSDK.h" + +using namespace std; + +struct CtrlComponents{ +public: + CtrlComponents(int argc, char**argv); + ~CtrlComponents(); + + std::string armConfigPath; + CmdPanel *cmdPanel; + IOInterface *ioInter; + Z1Model *armModel; + CSVTool *stateCSV; + + SendCmd sendCmd; // cmd that receive from SDK + RecvState recvState;// state that send to SDK + + //config + double dt; + bool *running; + Control ctrl = Control::SDK; + bool hasGripper; + bool isCollisionOpen; + double collisionTLimit; + bool isPlot; + int trajChoose = 1; + size_t armType = 36; + + void geneObj(); + void writeData(); +private: + void configProcess(int argc, char** argv); + + std::string ctrl_IP; + uint ctrl_port; + double _loadWeight; +}; + #endif // CTRLCOMPONENTS_H \ No newline at end of file diff --git a/include/control/armSDK.h b/include/control/armSDK.h index bd3d72a..b60c215 100644 --- a/include/control/armSDK.h +++ b/include/control/armSDK.h @@ -7,7 +7,7 @@ class ARMSDK : public CmdPanel{ public: ARMSDK(std::vector events, - EmptyAction emptyAction, const char* IP, uint toport, uint ownport, double dt = 0.002); + EmptyAction emptyAction, const char* IP, uint port, double dt = 0.002); ~ARMSDK(); SendCmd getSendCmd(); int getState(size_t channelID = 0); diff --git a/include/control/cmdPanel.h b/include/control/cmdPanel.h index f4efa46..147b03f 100644 --- a/include/control/cmdPanel.h +++ b/include/control/cmdPanel.h @@ -76,7 +76,7 @@ private: double _dV = 0.0; //delta value per delta time double _dt = 0.0; double _dVdt = 0.0; // delta value per second - double _dVdtf = 0.0; // delta value per second after filter + double _dVdtf = 0.0; // delta value per second after fliter double _lim1, _lim2; bool _hasLim = false; bool _hasGoZero = false; diff --git a/include/interface/IOInterface.h b/include/interface/IOInterface.h index 9af2a71..444471d 100755 --- a/include/interface/IOInterface.h +++ b/include/interface/IOInterface.h @@ -1,28 +1,28 @@ -#ifndef IOINTERFACE_H -#define IOINTERFACE_H - -#include -#include "message/LowlevelCmd.h" -#include "message/LowlevelState.h" -#include "control/keyboard.h" -#include "common/math/robotics.h" - -class IOInterface{ -public: - IOInterface(){} - ~IOInterface(){ - delete lowCmd; - delete lowState; - }; - virtual bool sendRecv(const LowlevelCmd *cmd, LowlevelState *state) = 0; - virtual bool calibration(){return false;}; - bool checkGripper(){return hasGripper;}; - LowlevelCmd *lowCmd; - LowlevelState *lowState; - virtual bool isDisconnect(){ return false;}; - bool hasErrorState; -protected: - bool hasGripper; -}; - +#ifndef IOINTERFACE_H +#define IOINTERFACE_H + +#include +#include "message/LowlevelCmd.h" +#include "message/LowlevelState.h" +#include "control/keyboard.h" +#include "common/math/robotics.h" + +class IOInterface{ +public: + IOInterface(){} + ~IOInterface(){ + delete lowCmd; + delete lowState; + }; + virtual bool sendRecv(const LowlevelCmd *cmd, LowlevelState *state) = 0; + virtual bool calibration(){return false;}; + bool checkGripper(){return hasGripper;}; + LowlevelCmd *lowCmd; + LowlevelState *lowState; + virtual bool isDisconnect(){ return false;}; + bool hasErrorState; +protected: + bool hasGripper; +}; + #endif //IOINTERFACE_H \ No newline at end of file diff --git a/include/interface/IOROS.h b/include/interface/IOROS.h old mode 100755 new mode 100644 diff --git a/include/interface/IOUDP.h b/include/interface/IOUDP.h index 0b4fa05..1164ce5 100644 --- a/include/interface/IOUDP.h +++ b/include/interface/IOUDP.h @@ -1,26 +1,26 @@ -#ifndef IOUDP_H -#define IOUDP_H - -#include "interface/IOInterface.h" - -class IOUDP : public IOInterface{ -public: - IOUDP(const char* IP, uint port, size_t timeOutUs = 100000, bool showInfo = true); - ~IOUDP(); - - bool sendRecv(const LowlevelCmd *cmd, LowlevelState *state); - bool calibration(); - bool isDisconnect(){ return _ioPort->isDisConnect;} -private: - IOPort *_ioPort; - - UDPSendCmd _cmd; - UDPRecvState _state; - UDPRecvStateOld _stateOld; - size_t _motorNum; - size_t _jointNum; - uint8_t _singleState; - uint8_t _selfCheck[10]; -}; - +#ifndef IOUDP_H +#define IOUDP_H + +#include "interface/IOInterface.h" + +class IOUDP : public IOInterface{ +public: + IOUDP(const char* IP, uint port, size_t timeOutUs = 100000, bool showInfo = true); + ~IOUDP(); + + bool sendRecv(const LowlevelCmd *cmd, LowlevelState *state); + bool calibration(); + bool isDisconnect(){ return _ioPort->isDisConnect;} +private: + IOPort *_ioPort; + + UDPSendCmd _cmd; + UDPRecvState _state; + UDPRecvStateOld _stateOld; + size_t _motorNum; + size_t _jointNum; + uint8_t _singleState; + uint8_t _selfCheck[10]; +}; + #endif // IOUDP_H \ No newline at end of file diff --git a/include/message/LowlevelCmd.h b/include/message/LowlevelCmd.h index ac8ae44..24bda49 100755 --- a/include/message/LowlevelCmd.h +++ b/include/message/LowlevelCmd.h @@ -1,56 +1,56 @@ -#ifndef LOWLEVELCMD_H -#define LOWLEVELCMD_H - -#include "common/math/mathTypes.h" -#include "common/math/mathTools.h" -#include -#include - -struct LowlevelCmd{ -public: - std::vector q; - std::vector dq; - std::vector tau; - std::vector kp; - std::vector kd; - - std::vector> q_data; - std::vector> dq_data; - std::vector> tauf_data; - std::vector> tau_data; - - LowlevelCmd(); - ~LowlevelCmd(){} - - void setZeroDq(); - void setZeroTau(); - void setZeroKp(); - void setZeroKd(); - void setQ(VecX qInput); - void setQd(VecX qDInput); - void setTau(VecX tauInput); - - void setControlGain(); - void setControlGain(std::vector KP, std::vector KW); - void setPassive(); - - void setGripperGain(); - void setGripperGain(float KP, float KW); - void setGripperZeroGain(); - void setGripperQ(double qInput); - double getGripperQ(); - void setGripperQd(double qdInput); - double getGripperQd(); - void setGripperTau(double tauInput); - double getGripperTau(); - - Vec6 getQ(); - Vec6 getQd(); - - void resizeGripper(); -private: - size_t _dof = 6; -}; - - -#endif //LOWLEVELCMD_H +#ifndef LOWLEVELCMD_H +#define LOWLEVELCMD_H + +#include "common/math/mathTypes.h" +#include "common/math/mathTools.h" +#include +#include + +struct LowlevelCmd{ +public: + std::vector q; + std::vector dq; + std::vector tau; + std::vector kp; + std::vector kd; + + std::vector> q_data; + std::vector> dq_data; + std::vector> tauf_data; + std::vector> tau_data; + + LowlevelCmd(); + ~LowlevelCmd(){} + + void setZeroDq(); + void setZeroTau(); + void setZeroKp(); + void setZeroKd(); + void setQ(VecX qInput); + void setQd(VecX qDInput); + void setTau(VecX tauInput); + + void setControlGain(); + void setControlGain(std::vector KP, std::vector KW); + void setPassive(); + + void setGripperGain(); + void setGripperGain(float KP, float KW); + void setGripperZeroGain(); + void setGripperQ(double qInput); + double getGripperQ(); + void setGripperQd(double qdInput); + double getGripperQd(); + void setGripperTau(double tauInput); + double getGripperTau(); + + Vec6 getQ(); + Vec6 getQd(); + + void resizeGripper(); +private: + size_t _dof = 6; +}; + + +#endif //LOWLEVELCMD_H diff --git a/include/message/LowlevelState.h b/include/message/LowlevelState.h index 5a60dfd..935a47d 100755 --- a/include/message/LowlevelState.h +++ b/include/message/LowlevelState.h @@ -1,61 +1,61 @@ -#ifndef LOWLEVELSTATE_HPP -#define LOWLEVELSTATE_HPP - -#include -#include -#include "common/math/mathTools.h" -#include "common/enumClass.h" -#include "common/math/Filter.h" - -struct LowlevelState{ -public: - LowlevelState(double dt); - ~LowlevelState(); - - std::vector q; - std::vector dq; - std::vector ddq; - std::vector tau; - - std::vector> q_data; - std::vector> dq_data; - std::vector> ddq_data; - std::vector> tau_data; - - std::vector temperature; - std::vector errorstate; - std::vector isMotorConnected; - - std::vector qFiltered; - std::vector dqFiltered; - std::vector ddqFiltered; - std::vector tauFiltered; - - LPFilter *qFilter; - LPFilter *dqFilter; - LPFilter *ddqFilter; - LPFilter *tauFilter; - - void resizeGripper(double dt); - void runFilter(); - bool checkError(); - Vec6 getQ(); - Vec6 getQd(); - Vec6 getQdd(); - Vec6 getTau(); - Vec6 getQFiltered(); - Vec6 getQdFiltered(); - Vec6 getQddFiltered(); - Vec6 getTauFiltered(); - double getGripperQ(); - double getGripperQd(); - double getGripperTau(); - double getGripperTauFiltered(); -private: - size_t _dof = 6; - int temporatureLimit = 80.0;// centigrade - std::vector _isMotorConnectedCnt; - std::vector _isMotorLostConnection; -}; - -#endif //LOWLEVELSTATE_HPP +#ifndef LOWLEVELSTATE_HPP +#define LOWLEVELSTATE_HPP + +#include +#include +#include "common/math/mathTools.h" +#include "common/enumClass.h" +#include "common/math/Filter.h" + +struct LowlevelState{ +public: + LowlevelState(double dt); + ~LowlevelState(); + + std::vector q; + std::vector dq; + std::vector ddq; + std::vector tau; + + std::vector> q_data; + std::vector> dq_data; + std::vector> ddq_data; + std::vector> tau_data; + + std::vector temperature; + std::vector errorstate; + std::vector isMotorConnected; + + std::vector qFiltered; + std::vector dqFiltered; + std::vector ddqFiltered; + std::vector tauFiltered; + + LPFilter *qFilter; + LPFilter *dqFilter; + LPFilter *ddqFilter; + LPFilter *tauFilter; + + void resizeGripper(double dt); + void runFilter(); + bool checkError(); + Vec6 getQ(); + Vec6 getQd(); + Vec6 getQdd(); + Vec6 getTau(); + Vec6 getQFiltered(); + Vec6 getQdFiltered(); + Vec6 getQddFiltered(); + Vec6 getTauFiltered(); + double getGripperQ(); + double getGripperQd(); + double getGripperTau(); + double getGripperTauFiltered(); +private: + size_t _dof = 6; + int temporatureLimit = 80.0;// centigrade + std::vector _isMotorConnectedCnt; + std::vector _isMotorLostConnection; +}; + +#endif //LOWLEVELSTATE_HPP diff --git a/include/message/MotorCmd.h b/include/message/MotorCmd.h index 9efff2d..b5d90c9 100644 --- a/include/message/MotorCmd.h +++ b/include/message/MotorCmd.h @@ -1,261 +1,261 @@ -// Generated by gencpp from file unitree_legged_msgs/MotorCmd.msg -// DO NOT EDIT! - - -#ifndef UNITREE_LEGGED_MSGS_MESSAGE_MOTORCMD_H -#define UNITREE_LEGGED_MSGS_MESSAGE_MOTORCMD_H - - -#include -#include -#include - -#include -#include -#include -#include - - -namespace unitree_legged_msgs -{ -template -struct MotorCmd_ -{ - typedef MotorCmd_ Type; - - MotorCmd_() - : mode(0) - , q(0.0) - , dq(0.0) - , tau(0.0) - , Kp(0.0) - , Kd(0.0) - , reserve() { - reserve.assign(0); - } - MotorCmd_(const ContainerAllocator& _alloc) - : mode(0) - , q(0.0) - , dq(0.0) - , tau(0.0) - , Kp(0.0) - , Kd(0.0) - , reserve() { - (void)_alloc; - reserve.assign(0); - } - - - - typedef uint8_t _mode_type; - _mode_type mode; - - typedef float _q_type; - _q_type q; - - typedef float _dq_type; - _dq_type dq; - - typedef float _tau_type; - _tau_type tau; - - typedef float _Kp_type; - _Kp_type Kp; - - typedef float _Kd_type; - _Kd_type Kd; - - typedef boost::array _reserve_type; - _reserve_type reserve; - - - - - - typedef boost::shared_ptr< ::unitree_legged_msgs::MotorCmd_ > Ptr; - typedef boost::shared_ptr< ::unitree_legged_msgs::MotorCmd_ const> ConstPtr; - -}; // struct MotorCmd_ - -typedef ::unitree_legged_msgs::MotorCmd_ > MotorCmd; - -typedef boost::shared_ptr< ::unitree_legged_msgs::MotorCmd > MotorCmdPtr; -typedef boost::shared_ptr< ::unitree_legged_msgs::MotorCmd const> MotorCmdConstPtr; - -// constants requiring out of line definition - - - -template -std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::MotorCmd_ & v) -{ -ros::message_operations::Printer< ::unitree_legged_msgs::MotorCmd_ >::stream(s, "", v); -return s; -} - - -template -bool operator==(const ::unitree_legged_msgs::MotorCmd_ & lhs, const ::unitree_legged_msgs::MotorCmd_ & rhs) -{ - return lhs.mode == rhs.mode && - lhs.q == rhs.q && - lhs.dq == rhs.dq && - lhs.tau == rhs.tau && - lhs.Kp == rhs.Kp && - lhs.Kd == rhs.Kd && - lhs.reserve == rhs.reserve; -} - -template -bool operator!=(const ::unitree_legged_msgs::MotorCmd_ & lhs, const ::unitree_legged_msgs::MotorCmd_ & rhs) -{ - return !(lhs == rhs); -} - - -} // namespace unitree_legged_msgs - -namespace ros -{ -namespace message_traits -{ - - - - - -template -struct IsFixedSize< ::unitree_legged_msgs::MotorCmd_ > - : TrueType - { }; - -template -struct IsFixedSize< ::unitree_legged_msgs::MotorCmd_ const> - : TrueType - { }; - -template -struct IsMessage< ::unitree_legged_msgs::MotorCmd_ > - : TrueType - { }; - -template -struct IsMessage< ::unitree_legged_msgs::MotorCmd_ const> - : TrueType - { }; - -template -struct HasHeader< ::unitree_legged_msgs::MotorCmd_ > - : FalseType - { }; - -template -struct HasHeader< ::unitree_legged_msgs::MotorCmd_ const> - : FalseType - { }; - - -template -struct MD5Sum< ::unitree_legged_msgs::MotorCmd_ > -{ - static const char* value() - { - return "bbb3b7d91319c3a1b99055f0149ba221"; - } - - static const char* value(const ::unitree_legged_msgs::MotorCmd_&) { return value(); } - static const uint64_t static_value1 = 0xbbb3b7d91319c3a1ULL; - static const uint64_t static_value2 = 0xb99055f0149ba221ULL; -}; - -template -struct DataType< ::unitree_legged_msgs::MotorCmd_ > -{ - static const char* value() - { - return "unitree_legged_msgs/MotorCmd"; - } - - static const char* value(const ::unitree_legged_msgs::MotorCmd_&) { return value(); } -}; - -template -struct Definition< ::unitree_legged_msgs::MotorCmd_ > -{ - static const char* value() - { - return "uint8 mode # motor target mode\n" -"float32 q # motor target position\n" -"float32 dq # motor target velocity\n" -"float32 tau # motor target torque\n" -"float32 Kp # motor spring stiffness coefficient\n" -"float32 Kd # motor damper coefficient\n" -"uint32[3] reserve # motor target torque\n" -; - } - - static const char* value(const ::unitree_legged_msgs::MotorCmd_&) { return value(); } -}; - -} // namespace message_traits -} // namespace ros - -namespace ros -{ -namespace serialization -{ - - template struct Serializer< ::unitree_legged_msgs::MotorCmd_ > - { - template inline static void allInOne(Stream& stream, T m) - { - stream.next(m.mode); - stream.next(m.q); - stream.next(m.dq); - stream.next(m.tau); - stream.next(m.Kp); - stream.next(m.Kd); - stream.next(m.reserve); - } - - ROS_DECLARE_ALLINONE_SERIALIZER - }; // struct MotorCmd_ - -} // namespace serialization -} // namespace ros - -namespace ros -{ -namespace message_operations -{ - -template -struct Printer< ::unitree_legged_msgs::MotorCmd_ > -{ - template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::MotorCmd_& v) - { - s << indent << "mode: "; - Printer::stream(s, indent + " ", v.mode); - s << indent << "q: "; - Printer::stream(s, indent + " ", v.q); - s << indent << "dq: "; - Printer::stream(s, indent + " ", v.dq); - s << indent << "tau: "; - Printer::stream(s, indent + " ", v.tau); - s << indent << "Kp: "; - Printer::stream(s, indent + " ", v.Kp); - s << indent << "Kd: "; - Printer::stream(s, indent + " ", v.Kd); - s << indent << "reserve[]" << std::endl; - for (size_t i = 0; i < v.reserve.size(); ++i) - { - s << indent << " reserve[" << i << "]: "; - Printer::stream(s, indent + " ", v.reserve[i]); - } - } -}; - -} // namespace message_operations -} // namespace ros - -#endif // UNITREE_LEGGED_MSGS_MESSAGE_MOTORCMD_H +// Generated by gencpp from file unitree_legged_msgs/MotorCmd.msg +// DO NOT EDIT! + + +#ifndef UNITREE_LEGGED_MSGS_MESSAGE_MOTORCMD_H +#define UNITREE_LEGGED_MSGS_MESSAGE_MOTORCMD_H + + +#include +#include +#include + +#include +#include +#include +#include + + +namespace unitree_legged_msgs +{ +template +struct MotorCmd_ +{ + typedef MotorCmd_ Type; + + MotorCmd_() + : mode(0) + , q(0.0) + , dq(0.0) + , tau(0.0) + , Kp(0.0) + , Kd(0.0) + , reserve() { + reserve.assign(0); + } + MotorCmd_(const ContainerAllocator& _alloc) + : mode(0) + , q(0.0) + , dq(0.0) + , tau(0.0) + , Kp(0.0) + , Kd(0.0) + , reserve() { + (void)_alloc; + reserve.assign(0); + } + + + + typedef uint8_t _mode_type; + _mode_type mode; + + typedef float _q_type; + _q_type q; + + typedef float _dq_type; + _dq_type dq; + + typedef float _tau_type; + _tau_type tau; + + typedef float _Kp_type; + _Kp_type Kp; + + typedef float _Kd_type; + _Kd_type Kd; + + typedef boost::array _reserve_type; + _reserve_type reserve; + + + + + + typedef boost::shared_ptr< ::unitree_legged_msgs::MotorCmd_ > Ptr; + typedef boost::shared_ptr< ::unitree_legged_msgs::MotorCmd_ const> ConstPtr; + +}; // struct MotorCmd_ + +typedef ::unitree_legged_msgs::MotorCmd_ > MotorCmd; + +typedef boost::shared_ptr< ::unitree_legged_msgs::MotorCmd > MotorCmdPtr; +typedef boost::shared_ptr< ::unitree_legged_msgs::MotorCmd const> MotorCmdConstPtr; + +// constants requiring out of line definition + + + +template +std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::MotorCmd_ & v) +{ +ros::message_operations::Printer< ::unitree_legged_msgs::MotorCmd_ >::stream(s, "", v); +return s; +} + + +template +bool operator==(const ::unitree_legged_msgs::MotorCmd_ & lhs, const ::unitree_legged_msgs::MotorCmd_ & rhs) +{ + return lhs.mode == rhs.mode && + lhs.q == rhs.q && + lhs.dq == rhs.dq && + lhs.tau == rhs.tau && + lhs.Kp == rhs.Kp && + lhs.Kd == rhs.Kd && + lhs.reserve == rhs.reserve; +} + +template +bool operator!=(const ::unitree_legged_msgs::MotorCmd_ & lhs, const ::unitree_legged_msgs::MotorCmd_ & rhs) +{ + return !(lhs == rhs); +} + + +} // namespace unitree_legged_msgs + +namespace ros +{ +namespace message_traits +{ + + + + + +template +struct IsFixedSize< ::unitree_legged_msgs::MotorCmd_ > + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::MotorCmd_ const> + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::MotorCmd_ > + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::MotorCmd_ const> + : TrueType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::MotorCmd_ > + : FalseType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::MotorCmd_ const> + : FalseType + { }; + + +template +struct MD5Sum< ::unitree_legged_msgs::MotorCmd_ > +{ + static const char* value() + { + return "bbb3b7d91319c3a1b99055f0149ba221"; + } + + static const char* value(const ::unitree_legged_msgs::MotorCmd_&) { return value(); } + static const uint64_t static_value1 = 0xbbb3b7d91319c3a1ULL; + static const uint64_t static_value2 = 0xb99055f0149ba221ULL; +}; + +template +struct DataType< ::unitree_legged_msgs::MotorCmd_ > +{ + static const char* value() + { + return "unitree_legged_msgs/MotorCmd"; + } + + static const char* value(const ::unitree_legged_msgs::MotorCmd_&) { return value(); } +}; + +template +struct Definition< ::unitree_legged_msgs::MotorCmd_ > +{ + static const char* value() + { + return "uint8 mode # motor target mode\n" +"float32 q # motor target position\n" +"float32 dq # motor target velocity\n" +"float32 tau # motor target torque\n" +"float32 Kp # motor spring stiffness coefficient\n" +"float32 Kd # motor damper coefficient\n" +"uint32[3] reserve # motor target torque\n" +; + } + + static const char* value(const ::unitree_legged_msgs::MotorCmd_&) { return value(); } +}; + +} // namespace message_traits +} // namespace ros + +namespace ros +{ +namespace serialization +{ + + template struct Serializer< ::unitree_legged_msgs::MotorCmd_ > + { + template inline static void allInOne(Stream& stream, T m) + { + stream.next(m.mode); + stream.next(m.q); + stream.next(m.dq); + stream.next(m.tau); + stream.next(m.Kp); + stream.next(m.Kd); + stream.next(m.reserve); + } + + ROS_DECLARE_ALLINONE_SERIALIZER + }; // struct MotorCmd_ + +} // namespace serialization +} // namespace ros + +namespace ros +{ +namespace message_operations +{ + +template +struct Printer< ::unitree_legged_msgs::MotorCmd_ > +{ + template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::MotorCmd_& v) + { + s << indent << "mode: "; + Printer::stream(s, indent + " ", v.mode); + s << indent << "q: "; + Printer::stream(s, indent + " ", v.q); + s << indent << "dq: "; + Printer::stream(s, indent + " ", v.dq); + s << indent << "tau: "; + Printer::stream(s, indent + " ", v.tau); + s << indent << "Kp: "; + Printer::stream(s, indent + " ", v.Kp); + s << indent << "Kd: "; + Printer::stream(s, indent + " ", v.Kd); + s << indent << "reserve[]" << std::endl; + for (size_t i = 0; i < v.reserve.size(); ++i) + { + s << indent << " reserve[" << i << "]: "; + Printer::stream(s, indent + " ", v.reserve[i]); + } + } +}; + +} // namespace message_operations +} // namespace ros + +#endif // UNITREE_LEGGED_MSGS_MESSAGE_MOTORCMD_H diff --git a/include/message/MotorState.h b/include/message/MotorState.h index e7183e0..8dcfd42 100644 --- a/include/message/MotorState.h +++ b/include/message/MotorState.h @@ -1,291 +1,291 @@ -// Generated by gencpp from file unitree_legged_msgs/MotorState.msg -// DO NOT EDIT! - - -#ifndef UNITREE_LEGGED_MSGS_MESSAGE_MOTORSTATE_H -#define UNITREE_LEGGED_MSGS_MESSAGE_MOTORSTATE_H - - -#include -#include -#include - -#include -#include -#include -#include - - -namespace unitree_legged_msgs -{ -template -struct MotorState_ -{ - typedef MotorState_ Type; - - MotorState_() - : mode(0) - , q(0.0) - , dq(0.0) - , ddq(0.0) - , tauEst(0.0) - , q_raw(0.0) - , dq_raw(0.0) - , ddq_raw(0.0) - , temperature(0) - , reserve() { - reserve.assign(0); - } - MotorState_(const ContainerAllocator& _alloc) - : mode(0) - , q(0.0) - , dq(0.0) - , ddq(0.0) - , tauEst(0.0) - , q_raw(0.0) - , dq_raw(0.0) - , ddq_raw(0.0) - , temperature(0) - , reserve() { - (void)_alloc; - reserve.assign(0); - } - - - - typedef uint8_t _mode_type; - _mode_type mode; - - typedef float _q_type; - _q_type q; - - typedef float _dq_type; - _dq_type dq; - - typedef float _ddq_type; - _ddq_type ddq; - - typedef float _tauEst_type; - _tauEst_type tauEst; - - typedef float _q_raw_type; - _q_raw_type q_raw; - - typedef float _dq_raw_type; - _dq_raw_type dq_raw; - - typedef float _ddq_raw_type; - _ddq_raw_type ddq_raw; - - typedef int8_t _temperature_type; - _temperature_type temperature; - - typedef boost::array _reserve_type; - _reserve_type reserve; - - - - - - typedef boost::shared_ptr< ::unitree_legged_msgs::MotorState_ > Ptr; - typedef boost::shared_ptr< ::unitree_legged_msgs::MotorState_ const> ConstPtr; - -}; // struct MotorState_ - -typedef ::unitree_legged_msgs::MotorState_ > MotorState; - -typedef boost::shared_ptr< ::unitree_legged_msgs::MotorState > MotorStatePtr; -typedef boost::shared_ptr< ::unitree_legged_msgs::MotorState const> MotorStateConstPtr; - -// constants requiring out of line definition - - - -template -std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::MotorState_ & v) -{ -ros::message_operations::Printer< ::unitree_legged_msgs::MotorState_ >::stream(s, "", v); -return s; -} - - -template -bool operator==(const ::unitree_legged_msgs::MotorState_ & lhs, const ::unitree_legged_msgs::MotorState_ & rhs) -{ - return lhs.mode == rhs.mode && - lhs.q == rhs.q && - lhs.dq == rhs.dq && - lhs.ddq == rhs.ddq && - lhs.tauEst == rhs.tauEst && - lhs.q_raw == rhs.q_raw && - lhs.dq_raw == rhs.dq_raw && - lhs.ddq_raw == rhs.ddq_raw && - lhs.temperature == rhs.temperature && - lhs.reserve == rhs.reserve; -} - -template -bool operator!=(const ::unitree_legged_msgs::MotorState_ & lhs, const ::unitree_legged_msgs::MotorState_ & rhs) -{ - return !(lhs == rhs); -} - - -} // namespace unitree_legged_msgs - -namespace ros -{ -namespace message_traits -{ - - - - - -template -struct IsFixedSize< ::unitree_legged_msgs::MotorState_ > - : TrueType - { }; - -template -struct IsFixedSize< ::unitree_legged_msgs::MotorState_ const> - : TrueType - { }; - -template -struct IsMessage< ::unitree_legged_msgs::MotorState_ > - : TrueType - { }; - -template -struct IsMessage< ::unitree_legged_msgs::MotorState_ const> - : TrueType - { }; - -template -struct HasHeader< ::unitree_legged_msgs::MotorState_ > - : FalseType - { }; - -template -struct HasHeader< ::unitree_legged_msgs::MotorState_ const> - : FalseType - { }; - - -template -struct MD5Sum< ::unitree_legged_msgs::MotorState_ > -{ - static const char* value() - { - return "94c55ee3b7852be2bd437b20ce12a254"; - } - - static const char* value(const ::unitree_legged_msgs::MotorState_&) { return value(); } - static const uint64_t static_value1 = 0x94c55ee3b7852be2ULL; - static const uint64_t static_value2 = 0xbd437b20ce12a254ULL; -}; - -template -struct DataType< ::unitree_legged_msgs::MotorState_ > -{ - static const char* value() - { - return "unitree_legged_msgs/MotorState"; - } - - static const char* value(const ::unitree_legged_msgs::MotorState_&) { return value(); } -}; - -template -struct Definition< ::unitree_legged_msgs::MotorState_ > -{ - static const char* value() - { - return "uint8 mode # motor current mode \n" -"float32 q # motor current position(rad)\n" -"float32 dq # motor current speed(rad/s)\n" -"float32 ddq # motor current speed(rad/s)\n" -"float32 tauEst # current estimated output torque(N*m)\n" -"float32 q_raw # motor current position(rad)\n" -"float32 dq_raw # motor current speed(rad/s)\n" -"float32 ddq_raw # motor current speed(rad/s)\n" -"int8 temperature # motor temperature(slow conduction of temperature leads to lag)\n" -"uint32[2] reserve\n" -; - } - - static const char* value(const ::unitree_legged_msgs::MotorState_&) { return value(); } -}; - -} // namespace message_traits -} // namespace ros - -namespace ros -{ -namespace serialization -{ - - template struct Serializer< ::unitree_legged_msgs::MotorState_ > - { - template inline static void allInOne(Stream& stream, T m) - { - stream.next(m.mode); - stream.next(m.q); - stream.next(m.dq); - stream.next(m.ddq); - stream.next(m.tauEst); - stream.next(m.q_raw); - stream.next(m.dq_raw); - stream.next(m.ddq_raw); - stream.next(m.temperature); - stream.next(m.reserve); - } - - ROS_DECLARE_ALLINONE_SERIALIZER - }; // struct MotorState_ - -} // namespace serialization -} // namespace ros - -namespace ros -{ -namespace message_operations -{ - -template -struct Printer< ::unitree_legged_msgs::MotorState_ > -{ - template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::MotorState_& v) - { - s << indent << "mode: "; - Printer::stream(s, indent + " ", v.mode); - s << indent << "q: "; - Printer::stream(s, indent + " ", v.q); - s << indent << "dq: "; - Printer::stream(s, indent + " ", v.dq); - s << indent << "ddq: "; - Printer::stream(s, indent + " ", v.ddq); - s << indent << "tauEst: "; - Printer::stream(s, indent + " ", v.tauEst); - s << indent << "q_raw: "; - Printer::stream(s, indent + " ", v.q_raw); - s << indent << "dq_raw: "; - Printer::stream(s, indent + " ", v.dq_raw); - s << indent << "ddq_raw: "; - Printer::stream(s, indent + " ", v.ddq_raw); - s << indent << "temperature: "; - Printer::stream(s, indent + " ", v.temperature); - s << indent << "reserve[]" << std::endl; - for (size_t i = 0; i < v.reserve.size(); ++i) - { - s << indent << " reserve[" << i << "]: "; - Printer::stream(s, indent + " ", v.reserve[i]); - } - } -}; - -} // namespace message_operations -} // namespace ros - -#endif // UNITREE_LEGGED_MSGS_MESSAGE_MOTORSTATE_H +// Generated by gencpp from file unitree_legged_msgs/MotorState.msg +// DO NOT EDIT! + + +#ifndef UNITREE_LEGGED_MSGS_MESSAGE_MOTORSTATE_H +#define UNITREE_LEGGED_MSGS_MESSAGE_MOTORSTATE_H + + +#include +#include +#include + +#include +#include +#include +#include + + +namespace unitree_legged_msgs +{ +template +struct MotorState_ +{ + typedef MotorState_ Type; + + MotorState_() + : mode(0) + , q(0.0) + , dq(0.0) + , ddq(0.0) + , tauEst(0.0) + , q_raw(0.0) + , dq_raw(0.0) + , ddq_raw(0.0) + , temperature(0) + , reserve() { + reserve.assign(0); + } + MotorState_(const ContainerAllocator& _alloc) + : mode(0) + , q(0.0) + , dq(0.0) + , ddq(0.0) + , tauEst(0.0) + , q_raw(0.0) + , dq_raw(0.0) + , ddq_raw(0.0) + , temperature(0) + , reserve() { + (void)_alloc; + reserve.assign(0); + } + + + + typedef uint8_t _mode_type; + _mode_type mode; + + typedef float _q_type; + _q_type q; + + typedef float _dq_type; + _dq_type dq; + + typedef float _ddq_type; + _ddq_type ddq; + + typedef float _tauEst_type; + _tauEst_type tauEst; + + typedef float _q_raw_type; + _q_raw_type q_raw; + + typedef float _dq_raw_type; + _dq_raw_type dq_raw; + + typedef float _ddq_raw_type; + _ddq_raw_type ddq_raw; + + typedef int8_t _temperature_type; + _temperature_type temperature; + + typedef boost::array _reserve_type; + _reserve_type reserve; + + + + + + typedef boost::shared_ptr< ::unitree_legged_msgs::MotorState_ > Ptr; + typedef boost::shared_ptr< ::unitree_legged_msgs::MotorState_ const> ConstPtr; + +}; // struct MotorState_ + +typedef ::unitree_legged_msgs::MotorState_ > MotorState; + +typedef boost::shared_ptr< ::unitree_legged_msgs::MotorState > MotorStatePtr; +typedef boost::shared_ptr< ::unitree_legged_msgs::MotorState const> MotorStateConstPtr; + +// constants requiring out of line definition + + + +template +std::ostream& operator<<(std::ostream& s, const ::unitree_legged_msgs::MotorState_ & v) +{ +ros::message_operations::Printer< ::unitree_legged_msgs::MotorState_ >::stream(s, "", v); +return s; +} + + +template +bool operator==(const ::unitree_legged_msgs::MotorState_ & lhs, const ::unitree_legged_msgs::MotorState_ & rhs) +{ + return lhs.mode == rhs.mode && + lhs.q == rhs.q && + lhs.dq == rhs.dq && + lhs.ddq == rhs.ddq && + lhs.tauEst == rhs.tauEst && + lhs.q_raw == rhs.q_raw && + lhs.dq_raw == rhs.dq_raw && + lhs.ddq_raw == rhs.ddq_raw && + lhs.temperature == rhs.temperature && + lhs.reserve == rhs.reserve; +} + +template +bool operator!=(const ::unitree_legged_msgs::MotorState_ & lhs, const ::unitree_legged_msgs::MotorState_ & rhs) +{ + return !(lhs == rhs); +} + + +} // namespace unitree_legged_msgs + +namespace ros +{ +namespace message_traits +{ + + + + + +template +struct IsFixedSize< ::unitree_legged_msgs::MotorState_ > + : TrueType + { }; + +template +struct IsFixedSize< ::unitree_legged_msgs::MotorState_ const> + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::MotorState_ > + : TrueType + { }; + +template +struct IsMessage< ::unitree_legged_msgs::MotorState_ const> + : TrueType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::MotorState_ > + : FalseType + { }; + +template +struct HasHeader< ::unitree_legged_msgs::MotorState_ const> + : FalseType + { }; + + +template +struct MD5Sum< ::unitree_legged_msgs::MotorState_ > +{ + static const char* value() + { + return "94c55ee3b7852be2bd437b20ce12a254"; + } + + static const char* value(const ::unitree_legged_msgs::MotorState_&) { return value(); } + static const uint64_t static_value1 = 0x94c55ee3b7852be2ULL; + static const uint64_t static_value2 = 0xbd437b20ce12a254ULL; +}; + +template +struct DataType< ::unitree_legged_msgs::MotorState_ > +{ + static const char* value() + { + return "unitree_legged_msgs/MotorState"; + } + + static const char* value(const ::unitree_legged_msgs::MotorState_&) { return value(); } +}; + +template +struct Definition< ::unitree_legged_msgs::MotorState_ > +{ + static const char* value() + { + return "uint8 mode # motor current mode \n" +"float32 q # motor current position(rad)\n" +"float32 dq # motor current speed(rad/s)\n" +"float32 ddq # motor current speed(rad/s)\n" +"float32 tauEst # current estimated output torque(N*m)\n" +"float32 q_raw # motor current position(rad)\n" +"float32 dq_raw # motor current speed(rad/s)\n" +"float32 ddq_raw # motor current speed(rad/s)\n" +"int8 temperature # motor temperature(slow conduction of temperature leads to lag)\n" +"uint32[2] reserve\n" +; + } + + static const char* value(const ::unitree_legged_msgs::MotorState_&) { return value(); } +}; + +} // namespace message_traits +} // namespace ros + +namespace ros +{ +namespace serialization +{ + + template struct Serializer< ::unitree_legged_msgs::MotorState_ > + { + template inline static void allInOne(Stream& stream, T m) + { + stream.next(m.mode); + stream.next(m.q); + stream.next(m.dq); + stream.next(m.ddq); + stream.next(m.tauEst); + stream.next(m.q_raw); + stream.next(m.dq_raw); + stream.next(m.ddq_raw); + stream.next(m.temperature); + stream.next(m.reserve); + } + + ROS_DECLARE_ALLINONE_SERIALIZER + }; // struct MotorState_ + +} // namespace serialization +} // namespace ros + +namespace ros +{ +namespace message_operations +{ + +template +struct Printer< ::unitree_legged_msgs::MotorState_ > +{ + template static void stream(Stream& s, const std::string& indent, const ::unitree_legged_msgs::MotorState_& v) + { + s << indent << "mode: "; + Printer::stream(s, indent + " ", v.mode); + s << indent << "q: "; + Printer::stream(s, indent + " ", v.q); + s << indent << "dq: "; + Printer::stream(s, indent + " ", v.dq); + s << indent << "ddq: "; + Printer::stream(s, indent + " ", v.ddq); + s << indent << "tauEst: "; + Printer::stream(s, indent + " ", v.tauEst); + s << indent << "q_raw: "; + Printer::stream(s, indent + " ", v.q_raw); + s << indent << "dq_raw: "; + Printer::stream(s, indent + " ", v.dq_raw); + s << indent << "ddq_raw: "; + Printer::stream(s, indent + " ", v.ddq_raw); + s << indent << "temperature: "; + Printer::stream(s, indent + " ", v.temperature); + s << indent << "reserve[]" << std::endl; + for (size_t i = 0; i < v.reserve.size(); ++i) + { + s << indent << " reserve[" << i << "]: "; + Printer::stream(s, indent + " ", v.reserve[i]); + } + } +}; + +} // namespace message_operations +} // namespace ros + +#endif // UNITREE_LEGGED_MSGS_MESSAGE_MOTORSTATE_H diff --git a/include/message/arm_common.h b/include/message/arm_common.h old mode 100644 new mode 100755 diff --git a/include/thirdparty/quadProgpp/Array.hh b/include/thirdparty/quadProgpp/Array.hh old mode 100644 new mode 100755 index 29e494d..53ab624 --- a/include/thirdparty/quadProgpp/Array.hh +++ b/include/thirdparty/quadProgpp/Array.hh @@ -1,2532 +1,2532 @@ -// $Id: Array.hh 249 2008-11-20 09:58:23Z schaerf $ -// This file is part of EasyLocalpp: a C++ Object-Oriented framework -// aimed at easing the development of Local Search algorithms. -// Copyright (C) 2001--2008 Andrea Schaerf, Luca Di Gaspero. -// -// This software may be modified and distributed under the terms -// of the MIT license. See the LICENSE file for details. - -#if !defined(_ARRAY_HH) -#define _ARRAY_HH - -#include -#include -#include -#include -#include -#include - -namespace quadprogpp { - -enum MType { DIAG }; - -template -class Vector -{ -public: - Vector(); - Vector(const unsigned int n); - Vector(const T& a, const unsigned int n); //initialize to constant value - Vector(const T* a, const unsigned int n); // Initialize to array - Vector(const Vector &rhs); // copy constructor - ~Vector(); // destructor - - inline void set(const T* a, const unsigned int n); - Vector extract(const std::set& indexes) const; - inline T& operator[](const unsigned int& i); //i-th element - inline const T& operator[](const unsigned int& i) const; - - inline unsigned int size() const; - inline void resize(const unsigned int n); - inline void resize(const T& a, const unsigned int n); - - Vector& operator=(const Vector& rhs); //assignment - Vector& operator=(const T& a); //assign a to every element - inline Vector& operator+=(const Vector& rhs); - inline Vector& operator-=(const Vector& rhs); - inline Vector& operator*=(const Vector& rhs); - inline Vector& operator/=(const Vector& rhs); - inline Vector& operator^=(const Vector& rhs); - inline Vector& operator+=(const T& a); - inline Vector& operator-=(const T& a); - inline Vector& operator*=(const T& a); - inline Vector& operator/=(const T& a); - inline Vector& operator^=(const T& a); -private: - unsigned int n; // size of array. upper index is n-1 - T* v; // storage for data -}; - -template -Vector::Vector() - : n(0), v(0) -{} - -template -Vector::Vector(const unsigned int n) - : v(new T[n]) -{ - this->n = n; -} - -template -Vector::Vector(const T& a, const unsigned int n) - : v(new T[n]) -{ - this->n = n; - for (unsigned int i = 0; i < n; i++) - v[i] = a; -} - -template -Vector::Vector(const T* a, const unsigned int n) - : v(new T[n]) -{ - this->n = n; - for (unsigned int i = 0; i < n; i++) - v[i] = *a++; -} - -template -Vector::Vector(const Vector& rhs) - : v(new T[rhs.n]) -{ - this->n = rhs.n; - for (unsigned int i = 0; i < n; i++) - v[i] = rhs[i]; -} - -template -Vector::~Vector() -{ - if (v != 0) - delete[] (v); -} - -template -void Vector::resize(const unsigned int n) -{ - if (n == this->n) - return; - if (v != 0) - delete[] (v); - v = new T[n]; - this->n = n; -} - -template -void Vector::resize(const T& a, const unsigned int n) -{ - resize(n); - for (unsigned int i = 0; i < n; i++) - v[i] = a; -} - - -template -inline Vector& Vector::operator=(const Vector& rhs) -// postcondition: normal assignment via copying has been performed; -// if vector and rhs were different sizes, vector -// has been resized to match the size of rhs -{ - if (this != &rhs) - { - resize(rhs.n); - for (unsigned int i = 0; i < n; i++) - v[i] = rhs[i]; - } - return *this; -} - -template -inline Vector & Vector::operator=(const T& a) //assign a to every element -{ - for (unsigned int i = 0; i < n; i++) - v[i] = a; - return *this; -} - -template -inline T & Vector::operator[](const unsigned int& i) //subscripting -{ - return v[i]; -} - -template -inline const T& Vector::operator[](const unsigned int& i) const //subscripting -{ - return v[i]; -} - -template -inline unsigned int Vector::size() const -{ - return n; -} - -template -inline void Vector::set(const T* a, unsigned int n) -{ - resize(n); - for (unsigned int i = 0; i < n; i++) - v[i] = a[i]; -} - -template -inline Vector Vector::extract(const std::set& indexes) const -{ - Vector tmp(indexes.size()); - unsigned int i = 0; - - for (std::set::const_iterator el = indexes.begin(); el != indexes.end(); el++) - { - if (*el >= n) - throw std::logic_error("Error extracting subvector: the indexes are out of vector bounds"); - tmp[i++] = v[*el]; - } - - return tmp; -} - -template -inline Vector& Vector::operator+=(const Vector& rhs) -{ - if (this->size() != rhs.size()) - throw std::logic_error("Operator+=: vectors have different sizes"); - for (unsigned int i = 0; i < n; i++) - v[i] += rhs[i]; - - return *this; -} - - -template -inline Vector& Vector::operator+=(const T& a) -{ - for (unsigned int i = 0; i < n; i++) - v[i] += a; - - return *this; -} - -template -inline Vector operator+(const Vector& rhs) -{ - return rhs; -} - -template -inline Vector operator+(const Vector& lhs, const Vector& rhs) -{ - if (lhs.size() != rhs.size()) - throw std::logic_error("Operator+: vectors have different sizes"); - Vector tmp(lhs.size()); - for (unsigned int i = 0; i < lhs.size(); i++) - tmp[i] = lhs[i] + rhs[i]; - - return tmp; -} - -template -inline Vector operator+(const Vector& lhs, const T& a) -{ - Vector tmp(lhs.size()); - for (unsigned int i = 0; i < lhs.size(); i++) - tmp[i] = lhs[i] + a; - - return tmp; -} - -template -inline Vector operator+(const T& a, const Vector& rhs) -{ - Vector tmp(rhs.size()); - for (unsigned int i = 0; i < rhs.size(); i++) - tmp[i] = a + rhs[i]; - - return tmp; -} - -template -inline Vector& Vector::operator-=(const Vector& rhs) -{ - if (this->size() != rhs.size()) - throw std::logic_error("Operator-=: vectors have different sizes"); - for (unsigned int i = 0; i < n; i++) - v[i] -= rhs[i]; - - return *this; -} - - -template -inline Vector& Vector::operator-=(const T& a) -{ - for (unsigned int i = 0; i < n; i++) - v[i] -= a; - - return *this; -} - -template -inline Vector operator-(const Vector& rhs) -{ - return (T)(-1) * rhs; -} - -template -inline Vector operator-(const Vector& lhs, const Vector& rhs) -{ - if (lhs.size() != rhs.size()) - throw std::logic_error("Operator-: vectors have different sizes"); - Vector tmp(lhs.size()); - for (unsigned int i = 0; i < lhs.size(); i++) - tmp[i] = lhs[i] - rhs[i]; - - return tmp; -} - -template -inline Vector operator-(const Vector& lhs, const T& a) -{ - Vector tmp(lhs.size()); - for (unsigned int i = 0; i < lhs.size(); i++) - tmp[i] = lhs[i] - a; - - return tmp; -} - -template -inline Vector operator-(const T& a, const Vector& rhs) -{ - Vector tmp(rhs.size()); - for (unsigned int i = 0; i < rhs.size(); i++) - tmp[i] = a - rhs[i]; - - return tmp; -} - -template -inline Vector& Vector::operator*=(const Vector& rhs) -{ - if (this->size() != rhs.size()) - throw std::logic_error("Operator*=: vectors have different sizes"); - for (unsigned int i = 0; i < n; i++) - v[i] *= rhs[i]; - - return *this; -} - - -template -inline Vector& Vector::operator*=(const T& a) -{ - for (unsigned int i = 0; i < n; i++) - v[i] *= a; - - return *this; -} - -template -inline Vector operator*(const Vector& lhs, const Vector& rhs) -{ - if (lhs.size() != rhs.size()) - throw std::logic_error("Operator*: vectors have different sizes"); - Vector tmp(lhs.size()); - for (unsigned int i = 0; i < lhs.size(); i++) - tmp[i] = lhs[i] * rhs[i]; - - return tmp; -} - -template -inline Vector operator*(const Vector& lhs, const T& a) -{ - Vector tmp(lhs.size()); - for (unsigned int i = 0; i < lhs.size(); i++) - tmp[i] = lhs[i] * a; - - return tmp; -} - -template -inline Vector operator*(const T& a, const Vector& rhs) -{ - Vector tmp(rhs.size()); - for (unsigned int i = 0; i < rhs.size(); i++) - tmp[i] = a * rhs[i]; - - return tmp; -} - -template -inline Vector& Vector::operator/=(const Vector& rhs) -{ - if (this->size() != rhs.size()) - throw std::logic_error("Operator/=: vectors have different sizes"); - for (unsigned int i = 0; i < n; i++) - v[i] /= rhs[i]; - - return *this; -} - - -template -inline Vector& Vector::operator/=(const T& a) -{ - for (unsigned int i = 0; i < n; i++) - v[i] /= a; - - return *this; -} - -template -inline Vector operator/(const Vector& lhs, const Vector& rhs) -{ - if (lhs.size() != rhs.size()) - throw std::logic_error("Operator/: vectors have different sizes"); - Vector tmp(lhs.size()); - for (unsigned int i = 0; i < lhs.size(); i++) - tmp[i] = lhs[i] / rhs[i]; - - return tmp; -} - -template -inline Vector operator/(const Vector& lhs, const T& a) -{ - Vector tmp(lhs.size()); - for (unsigned int i = 0; i < lhs.size(); i++) - tmp[i] = lhs[i] / a; - - return tmp; -} - -template -inline Vector operator/(const T& a, const Vector& rhs) -{ - Vector tmp(rhs.size()); - for (unsigned int i = 0; i < rhs.size(); i++) - tmp[i] = a / rhs[i]; - - return tmp; -} - -template -inline Vector operator^(const Vector& lhs, const Vector& rhs) -{ - if (lhs.size() != rhs.size()) - throw std::logic_error("Operator^: vectors have different sizes"); - Vector tmp(lhs.size()); - for (unsigned int i = 0; i < lhs.size(); i++) - tmp[i] = pow(lhs[i], rhs[i]); - - return tmp; -} - -template -inline Vector operator^(const Vector& lhs, const T& a) -{ - Vector tmp(lhs.size()); - for (unsigned int i = 0; i < lhs.size(); i++) - tmp[i] = pow(lhs[i], a); - - return tmp; -} - -template -inline Vector operator^(const T& a, const Vector& rhs) -{ - Vector tmp(rhs.size()); - for (unsigned int i = 0; i < rhs.size(); i++) - tmp[i] = pow(a, rhs[i]); - - return tmp; -} - -template -inline Vector& Vector::operator^=(const Vector& rhs) -{ - if (this->size() != rhs.size()) - throw std::logic_error("Operator^=: vectors have different sizes"); - for (unsigned int i = 0; i < n; i++) - v[i] = pow(v[i], rhs[i]); - - return *this; -} - -template -inline Vector& Vector::operator^=(const T& a) -{ - for (unsigned int i = 0; i < n; i++) - v[i] = pow(v[i], a); - - return *this; -} - -template -inline bool operator==(const Vector& v, const Vector& w) -{ - if (v.size() != w.size()) - throw std::logic_error("Vectors of different size are not confrontable"); - for (unsigned i = 0; i < v.size(); i++) - if (v[i] != w[i]) - return false; - return true; -} - -template -inline bool operator!=(const Vector& v, const Vector& w) -{ - if (v.size() != w.size()) - throw std::logic_error("Vectors of different size are not confrontable"); - for (unsigned i = 0; i < v.size(); i++) - if (v[i] != w[i]) - return true; - return false; -} - -template -inline bool operator<(const Vector& v, const Vector& w) -{ - if (v.size() != w.size()) - throw std::logic_error("Vectors of different size are not confrontable"); - for (unsigned i = 0; i < v.size(); i++) - if (v[i] >= w[i]) - return false; - return true; -} - -template -inline bool operator<=(const Vector& v, const Vector& w) -{ - if (v.size() != w.size()) - throw std::logic_error("Vectors of different size are not confrontable"); - for (unsigned i = 0; i < v.size(); i++) - if (v[i] > w[i]) - return false; - return true; -} - -template -inline bool operator>(const Vector& v, const Vector& w) -{ - if (v.size() != w.size()) - throw std::logic_error("Vectors of different size are not confrontable"); - for (unsigned i = 0; i < v.size(); i++) - if (v[i] <= w[i]) - return false; - return true; -} - -template -inline bool operator>=(const Vector& v, const Vector& w) -{ - if (v.size() != w.size()) - throw std::logic_error("Vectors of different size are not confrontable"); - for (unsigned i = 0; i < v.size(); i++) - if (v[i] < w[i]) - return false; - return true; -} - -/** - Input/Output -*/ -template -inline std::ostream& operator<<(std::ostream& os, const Vector& v) -{ - os << std::endl << v.size() << std::endl; - for (unsigned int i = 0; i < v.size() - 1; i++) - os << std::setw(20) << std::setprecision(16) << v[i] << ", "; - os << std::setw(20) << std::setprecision(16) << v[v.size() - 1] << std::endl; - - return os; -} - -template -std::istream& operator>>(std::istream& is, Vector& v) -{ - int elements; - char comma; - is >> elements; - v.resize(elements); - for (unsigned int i = 0; i < elements; i++) - is >> v[i] >> comma; - - return is; -} - -/** - Index utilities -*/ - -std::set seq(unsigned int s, unsigned int e); - -std::set singleton(unsigned int i); - -template -class CanonicalBaseVector : public Vector -{ -public: - CanonicalBaseVector(unsigned int i, unsigned int n); - inline void reset(unsigned int i); -private: - unsigned int e; -}; - -template -CanonicalBaseVector::CanonicalBaseVector(unsigned int i, unsigned int n) - : Vector((T)0, n), e(i) -{ (*this)[e] = (T)1; } - -template -inline void CanonicalBaseVector::reset(unsigned int i) -{ - (*this)[e] = (T)0; - e = i; - (*this)[e] = (T)1; -} - -#include - -template -inline T sum(const Vector& v) -{ - T tmp = (T)0; - for (unsigned int i = 0; i < v.size(); i++) - tmp += v[i]; - - return tmp; -} - -template -inline T prod(const Vector& v) -{ - T tmp = (T)1; - for (unsigned int i = 0; i < v.size(); i++) - tmp *= v[i]; - - return tmp; -} - -template -inline T mean(const Vector& v) -{ - T sum = (T)0; - for (unsigned int i = 0; i < v.size(); i++) - sum += v[i]; - return sum / v.size(); -} - -template -inline T median(const Vector& v) -{ - Vector tmp = sort(v); - if (v.size() % 2 == 1) // it is an odd-sized vector - return tmp[v.size() / 2]; - else - return 0.5 * (tmp[v.size() / 2 - 1] + tmp[v.size() / 2]); -} - -template -inline T stdev(const Vector& v, bool sample_correction = false) -{ - return sqrt(var(v, sample_correction)); -} - -template -inline T var(const Vector& v, bool sample_correction = false) -{ - T sum = (T)0, ssum = (T)0; - unsigned int n = v.size(); - for (unsigned int i = 0; i < n; i++) - { - sum += v[i]; - ssum += (v[i] * v[i]); - } - if (!sample_correction) - return (ssum / n) - (sum / n) * (sum / n); - else - return n * ((ssum / n) - (sum / n) * (sum / n)) / (n - 1); -} - -template -inline T max(const Vector& v) -{ - T value = v[0]; - for (unsigned int i = 1; i < v.size(); i++) - value = std::max(v[i], value); - - return value; -} - -template -inline T min(const Vector& v) -{ - T value = v[0]; - for (unsigned int i = 1; i < v.size(); i++) - value = std::min(v[i], value); - - return value; -} - -template -inline unsigned int index_max(const Vector& v) -{ - unsigned int max = 0; - for (unsigned int i = 1; i < v.size(); i++) - if (v[i] > v[max]) - max = i; - - return max; -} - -template -inline unsigned int index_min(const Vector& v) -{ - unsigned int min = 0; - for (unsigned int i = 1; i < v.size(); i++) - if (v[i] < v[min]) - min = i; - - return min; -} - - -template -inline T dot_prod(const Vector& a, const Vector& b) -{ - T sum = (T)0; - if (a.size() != b.size()) - throw std::logic_error("Dotprod error: the vectors are not the same size"); - for (unsigned int i = 0; i < a.size(); i++) - sum += a[i] * b[i]; - - return sum; -} - -/** - Single element mathematical functions -*/ - -template -inline Vector exp(const Vector& v) -{ - Vector tmp(v.size()); - for (unsigned int i = 0; i < v.size(); i++) - tmp[i] = exp(v[i]); - - return tmp; -} - -template -inline Vector log(const Vector& v) -{ - Vector tmp(v.size()); - for (unsigned int i = 0; i < v.size(); i++) - tmp[i] = log(v[i]); - - return tmp; -} - -template -inline Vector vec_sqrt(const Vector& v) -{ - Vector tmp(v.size()); - for (unsigned int i = 0; i < v.size(); i++) - tmp[i] = sqrt(v[i]); - - return tmp; -} - -template -inline Vector pow(const Vector& v, double a) -{ - Vector tmp(v.size()); - for (unsigned int i = 0; i < v.size(); i++) - tmp[i] = pow(v[i], a); - - return tmp; -} - -template -inline Vector abs(const Vector& v) -{ - Vector tmp(v.size()); - for (unsigned int i = 0; i < v.size(); i++) - tmp[i] = (T)fabs(v[i]); - - return tmp; -} - -template -inline Vector sign(const Vector& v) -{ - Vector tmp(v.size()); - for (unsigned int i = 0; i < v.size(); i++) - tmp[i] = v[i] > 0 ? +1 : v[i] == 0 ? 0 : -1; - - return tmp; -} - -template -inline unsigned int partition(Vector& v, unsigned int begin, unsigned int end) -{ - unsigned int i = begin + 1, j = begin + 1; - T pivot = v[begin]; - while (j <= end) - { - if (v[j] < pivot) { - std::swap(v[i], v[j]); - i++; - } - j++; - } - v[begin] = v[i - 1]; - v[i - 1] = pivot; - return i - 2; -} - - -template -inline void quicksort(Vector& v, unsigned int begin, unsigned int end) -{ - if (end > begin) - { - unsigned int index = partition(v, begin, end); - quicksort(v, begin, index); - quicksort(v, index + 2, end); - } -} - -template -inline Vector sort(const Vector& v) -{ - Vector tmp(v); - - quicksort(tmp, 0, tmp.size() - 1); - - return tmp; -} - -template -inline Vector rank(const Vector& v) -{ - Vector tmp(v); - Vector tmp_rank(0.0, v.size()); - - for (unsigned int i = 0; i < tmp.size(); i++) - { - unsigned int smaller = 0, equal = 0; - for (unsigned int j = 0; j < tmp.size(); j++) - if (i == j) - continue; - else - if (tmp[j] < tmp[i]) - smaller++; - else if (tmp[j] == tmp[i]) - equal++; - tmp_rank[i] = smaller + 1; - if (equal > 0) - { - for (unsigned int j = 1; j <= equal; j++) - tmp_rank[i] += smaller + 1 + j; - tmp_rank[i] /= (double)(equal + 1); - } - } - - return tmp_rank; -} - -//enum MType { DIAG }; - -template -class Matrix -{ -public: - Matrix(); // Default constructor - Matrix(const unsigned int n, const unsigned int m); // Construct a n x m matrix - Matrix(const T& a, const unsigned int n, const unsigned int m); // Initialize the content to constant a - Matrix(MType t, const T& a, const T& o, const unsigned int n, const unsigned int m); - Matrix(MType t, const Vector& v, const T& o, const unsigned int n, const unsigned int m); - Matrix(const T* a, const unsigned int n, const unsigned int m); // Initialize to array - Matrix(const Matrix& rhs); // Copy constructor - ~Matrix(); // destructor - - inline T* operator[](const unsigned int& i) { return v[i]; } // Subscripting: row i - inline const T* operator[](const unsigned int& i) const { return v[i]; }; // const subsctipting - - inline void resize(const unsigned int n, const unsigned int m); - inline void resize(const T& a, const unsigned int n, const unsigned int m); - - - inline Vector extractRow(const unsigned int i) const; - inline Vector extractColumn(const unsigned int j) const; - inline Vector extractDiag() const; - inline Matrix extractRows(const std::set& indexes) const; - inline Matrix extractColumns(const std::set& indexes) const; - inline Matrix extract(const std::set& r_indexes, const std::set& c_indexes) const; - - inline void set(const T* a, unsigned int n, unsigned int m); - inline void set(const std::set& r_indexes, const std::set& c_indexes, const Matrix& m); - inline void setRow(const unsigned int index, const Vector& v); - inline void setRow(const unsigned int index, const Matrix& v); - inline void setRows(const std::set& indexes, const Matrix& m); - inline void setColumn(const unsigned int index, const Vector& v); - inline void setColumn(const unsigned int index, const Matrix& v); - inline void setColumns(const std::set& indexes, const Matrix& m); - - - inline unsigned int nrows() const { return n; } // number of rows - inline unsigned int ncols() const { return m; } // number of columns - - inline Matrix& operator=(const Matrix& rhs); // Assignment operator - inline Matrix& operator=(const T& a); // Assign to every element value a - inline Matrix& operator+=(const Matrix& rhs); - inline Matrix& operator-=(const Matrix& rhs); - inline Matrix& operator*=(const Matrix& rhs); - inline Matrix& operator/=(const Matrix& rhs); - inline Matrix& operator^=(const Matrix& rhs); - inline Matrix& operator+=(const T& a); - inline Matrix& operator-=(const T& a); - inline Matrix& operator*=(const T& a); - inline Matrix& operator/=(const T& a); - inline Matrix& operator^=(const T& a); - inline operator Vector(); -private: - unsigned int n; // number of rows - unsigned int m; // number of columns - T **v; // storage for data -}; - -template -Matrix::Matrix() - : n(0), m(0), v(0) -{} - -template -Matrix::Matrix(unsigned int n, unsigned int m) - : v(new T*[n]) -{ - this->n = n; this->m = m; - v[0] = new T[m * n]; - for (unsigned int i = 1; i < n; i++) - v[i] = v[i - 1] + m; -} - -template -Matrix::Matrix(const T& a, unsigned int n, unsigned int m) - : v(new T*[n]) -{ - this->n = n; this->m = m; - v[0] = new T[m * n]; - for (unsigned int i = 1; i < n; i++) - v[i] = v[i - 1] + m; - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] = a; -} - -template -Matrix::Matrix(const T* a, unsigned int n, unsigned int m) - : v(new T*[n]) -{ - this->n = n; this->m = m; - v[0] = new T[m * n]; - for (unsigned int i = 1; i < n; i++) - v[i] = v[i - 1] + m; - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] = *a++; -} - -template -Matrix::Matrix(MType t, const T& a, const T& o, unsigned int n, unsigned int m) - : v(new T*[n]) -{ - this->n = n; this->m = m; - v[0] = new T[m * n]; - for (unsigned int i = 1; i < n; i++) - v[i] = v[i - 1] + m; - switch (t) - { - case DIAG: - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - if (i != j) - v[i][j] = o; - else - v[i][j] = a; - break; - default: - throw std::logic_error("Matrix type not supported"); - } -} - -template -Matrix::Matrix(MType t, const Vector& a, const T& o, unsigned int n, unsigned int m) - : v(new T*[n]) -{ - this->n = n; this->m = m; - v[0] = new T[m * n]; - for (unsigned int i = 1; i < n; i++) - v[i] = v[i - 1] + m; - switch (t) - { - case DIAG: - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - if (i != j) - v[i][j] = o; - else - v[i][j] = a[i]; - break; - default: - throw std::logic_error("Matrix type not supported"); - } -} - -template -Matrix::Matrix(const Matrix& rhs) - : v(new T*[rhs.n]) -{ - n = rhs.n; m = rhs.m; - v[0] = new T[m * n]; - for (unsigned int i = 1; i < n; i++) - v[i] = v[i - 1] + m; - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] = rhs[i][j]; -} - -template -Matrix::~Matrix() -{ - if (v != 0) { - delete[] (v[0]); - delete[] (v); - } -} - -template -inline Matrix& Matrix::operator=(const Matrix &rhs) -// postcondition: normal assignment via copying has been performed; -// if matrix and rhs were different sizes, matrix -// has been resized to match the size of rhs -{ - if (this != &rhs) - { - resize(rhs.n, rhs.m); - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] = rhs[i][j]; - } - return *this; -} - -template -inline Matrix& Matrix::operator=(const T& a) // assign a to every element -{ - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] = a; - return *this; -} - - -template -inline void Matrix::resize(const unsigned int n, const unsigned int m) -{ - if (n == this->n && m == this->m) - return; - if (v != 0) - { - delete[] (v[0]); - delete[] (v); - } - this->n = n; this->m = m; - v = new T*[n]; - v[0] = new T[m * n]; - for (unsigned int i = 1; i < n; i++) - v[i] = v[i - 1] + m; -} - -template -inline void Matrix::resize(const T& a, const unsigned int n, const unsigned int m) -{ - resize(n, m); - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] = a; -} - - - -template -inline Vector Matrix::extractRow(const unsigned int i) const -{ - if (i >= n) - throw std::logic_error("Error in extractRow: trying to extract a row out of matrix bounds"); - Vector tmp(v[i], m); - - return tmp; -} - -template -inline Vector Matrix::extractColumn(const unsigned int j) const -{ - if (j >= m) - throw std::logic_error("Error in extractRow: trying to extract a row out of matrix bounds"); - Vector tmp(n); - - for (unsigned int i = 0; i < n; i++) - tmp[i] = v[i][j]; - - return tmp; -} - -template -inline Vector Matrix::extractDiag() const -{ - unsigned int d = std::min(n, m); - - Vector tmp(d); - - for (unsigned int i = 0; i < d; i++) - tmp[i] = v[i][i]; - - return tmp; - -} - -template -inline Matrix Matrix::extractRows(const std::set& indexes) const -{ - Matrix tmp(indexes.size(), m); - unsigned int i = 0; - - for (std::set::const_iterator el = indexes.begin(); el != indexes.end(); el++) - { - for (unsigned int j = 0; j < m; j++) - { - if (*el >= n) - throw std::logic_error("Error extracting rows: the indexes are out of matrix bounds"); - tmp[i][j] = v[*el][j]; - } - i++; - } - - return tmp; -} - -template -inline Matrix Matrix::extractColumns(const std::set& indexes) const -{ - Matrix tmp(n, indexes.size()); - unsigned int j = 0; - - for (std::set::const_iterator el = indexes.begin(); el != indexes.end(); el++) - { - for (unsigned int i = 0; i < n; i++) - { - if (*el >= m) - throw std::logic_error("Error extracting columns: the indexes are out of matrix bounds"); - tmp[i][j] = v[i][*el]; - } - j++; - } - - return tmp; -} - -template -inline Matrix Matrix::extract(const std::set& r_indexes, const std::set& c_indexes) const -{ - Matrix tmp(r_indexes.size(), c_indexes.size()); - unsigned int i = 0, j; - - for (std::set::const_iterator r_el = r_indexes.begin(); r_el != r_indexes.end(); r_el++) - { - if (*r_el >= n) - throw std::logic_error("Error extracting submatrix: the indexes are out of matrix bounds"); - j = 0; - for (std::set::const_iterator c_el = c_indexes.begin(); c_el != c_indexes.end(); c_el++) - { - if (*c_el >= m) - throw std::logic_error("Error extracting rows: the indexes are out of matrix bounds"); - tmp[i][j] = v[*r_el][*c_el]; - j++; - } - i++; - } - - return tmp; -} - -template -inline void Matrix::setRow(unsigned int i, const Vector& a) -{ - if (i >= n) - throw std::logic_error("Error in setRow: trying to set a row out of matrix bounds"); - if (this->m != a.size()) - throw std::logic_error("Error setting matrix row: ranges are not compatible"); - for (unsigned int j = 0; j < ncols(); j++) - v[i][j] = a[j]; -} - -template -inline void Matrix::setRow(unsigned int i, const Matrix& a) -{ - if (i >= n) - throw std::logic_error("Error in setRow: trying to set a row out of matrix bounds"); - if (this->m != a.ncols()) - throw std::logic_error("Error setting matrix column: ranges are not compatible"); - if (a.nrows() != 1) - throw std::logic_error("Error setting matrix column with a non-row matrix"); - for (unsigned int j = 0; j < ncols(); j++) - v[i][j] = a[0][j]; -} - -template -inline void Matrix::setRows(const std::set& indexes, const Matrix& m) -{ - unsigned int i = 0; - - if (indexes.size() != m.nrows() || this->m != m.ncols()) - throw std::logic_error("Error setting matrix rows: ranges are not compatible"); - for (std::set::const_iterator el = indexes.begin(); el != indexes.end(); el++) - { - for (unsigned int j = 0; j < ncols(); j++) - { - if (*el >= n) - throw std::logic_error("Error in setRows: trying to set a row out of matrix bounds"); - v[*el][j] = m[i][j]; - } - i++; - } -} - -template -inline void Matrix::setColumn(unsigned int j, const Vector& a) -{ - if (j >= m) - throw std::logic_error("Error in setColumn: trying to set a column out of matrix bounds"); - if (this->n != a.size()) - throw std::logic_error("Error setting matrix column: ranges are not compatible"); - for (unsigned int i = 0; i < nrows(); i++) - v[i][j] = a[i]; -} - -template -inline void Matrix::setColumn(unsigned int j, const Matrix& a) -{ - if (j >= m) - throw std::logic_error("Error in setColumn: trying to set a column out of matrix bounds"); - if (this->n != a.nrows()) - throw std::logic_error("Error setting matrix column: ranges are not compatible"); - if (a.ncols() != 1) - throw std::logic_error("Error setting matrix column with a non-column matrix"); - for (unsigned int i = 0; i < nrows(); i++) - v[i][j] = a[i][0]; -} - - -template -inline void Matrix::setColumns(const std::set& indexes, const Matrix& a) -{ - unsigned int j = 0; - - if (indexes.size() != a.ncols() || this->n != a.nrows()) - throw std::logic_error("Error setting matrix columns: ranges are not compatible"); - for (std::set::const_iterator el = indexes.begin(); el != indexes.end(); el++) - { - for (unsigned int i = 0; i < nrows(); i++) - { - if (*el >= m) - throw std::logic_error("Error in setColumns: trying to set a column out of matrix bounds"); - v[i][*el] = a[i][j]; - } - j++; - } -} - -template -inline void Matrix::set(const std::set& r_indexes, const std::set& c_indexes, const Matrix& a) -{ - unsigned int i = 0, j; - if (c_indexes.size() != a.ncols() || r_indexes.size() != a.nrows()) - throw std::logic_error("Error setting matrix elements: ranges are not compatible"); - - for (std::set::const_iterator r_el = r_indexes.begin(); r_el != r_indexes.end(); r_el++) - { - if (*r_el >= n) - throw std::logic_error("Error in set: trying to set a row out of matrix bounds"); - j = 0; - for (std::set::const_iterator c_el = c_indexes.begin(); c_el != c_indexes.end(); c_el++) - { - if (*c_el >= m) - throw std::logic_error("Error in set: trying to set a column out of matrix bounds"); - v[*r_el][*c_el] = a[i][j]; - j++; - } - i++; - } -} - -template -inline void Matrix::set(const T* a, unsigned int n, unsigned int m) -{ - if (this->n != n || this->m != m) - resize(n, m); - unsigned int k = 0; - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] = a[k++]; -} - - -template -Matrix operator+(const Matrix& rhs) -{ - return rhs; -} - -template -Matrix operator+(const Matrix& lhs, const Matrix& rhs) -{ - if (lhs.ncols() != rhs.ncols() || lhs.nrows() != rhs.nrows()) - throw std::logic_error("Operator+: matrices have different sizes"); - Matrix tmp(lhs.nrows(), lhs.ncols()); - for (unsigned int i = 0; i < lhs.nrows(); i++) - for (unsigned int j = 0; j < lhs.ncols(); j++) - tmp[i][j] = lhs[i][j] + rhs[i][j]; - - return tmp; -} - -template -Matrix operator+(const Matrix& lhs, const T& a) -{ - Matrix tmp(lhs.nrows(), lhs.ncols()); - for (unsigned int i = 0; i < lhs.nrows(); i++) - for (unsigned int j = 0; j < lhs.ncols(); j++) - tmp[i][j] = lhs[i][j] + a; - - return tmp; -} - -template -Matrix operator+(const T& a, const Matrix& rhs) -{ - Matrix tmp(rhs.nrows(), rhs.ncols()); - for (unsigned int i = 0; i < rhs.nrows(); i++) - for (unsigned int j = 0; j < rhs.ncols(); j++) - tmp[i][j] = a + rhs[i][j]; - - return tmp; -} - -template -inline Matrix& Matrix::operator+=(const Matrix& rhs) -{ - if (m != rhs.ncols() || n != rhs.nrows()) - throw std::logic_error("Operator+=: matrices have different sizes"); - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] += rhs[i][j]; - - return *this; -} - -template -inline Matrix& Matrix::operator+=(const T& a) -{ - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] += a; - - return *this; -} - -template -Matrix operator-(const Matrix& rhs) -{ - return (T)(-1) * rhs; -} - -template -Matrix operator-(const Matrix& lhs, const Matrix& rhs) -{ - if (lhs.ncols() != rhs.ncols() || lhs.nrows() != rhs.nrows()) - throw std::logic_error("Operator-: matrices have different sizes"); - Matrix tmp(lhs.nrows(), lhs.ncols()); - for (unsigned int i = 0; i < lhs.nrows(); i++) - for (unsigned int j = 0; j < lhs.ncols(); j++) - tmp[i][j] = lhs[i][j] - rhs[i][j]; - - return tmp; -} - -template -Matrix operator-(const Matrix& lhs, const T& a) -{ - Matrix tmp(lhs.nrows(), lhs.ncols()); - for (unsigned int i = 0; i < lhs.nrows(); i++) - for (unsigned int j = 0; j < lhs.ncols(); j++) - tmp[i][j] = lhs[i][j] - a; - - return tmp; -} - -template -Matrix operator-(const T& a, const Matrix& rhs) -{ - Matrix tmp(rhs.nrows(), rhs.ncols()); - for (unsigned int i = 0; i < rhs.nrows(); i++) - for (unsigned int j = 0; j < rhs.ncols(); j++) - tmp[i][j] = a - rhs[i][j]; - - return tmp; -} - -template -inline Matrix& Matrix::operator-=(const Matrix& rhs) -{ - if (m != rhs.ncols() || n != rhs.nrows()) - throw std::logic_error("Operator-=: matrices have different sizes"); - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] -= rhs[i][j]; - - return *this; -} - -template -inline Matrix& Matrix::operator-=(const T& a) -{ - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] -= a; - - return *this; -} - -template -Matrix operator*(const Matrix& lhs, const Matrix& rhs) -{ - if (lhs.ncols() != rhs.ncols() || lhs.nrows() != rhs.nrows()) - throw std::logic_error("Operator*: matrices have different sizes"); - Matrix tmp(lhs.nrows(), lhs.ncols()); - for (unsigned int i = 0; i < lhs.nrows(); i++) - for (unsigned int j = 0; j < lhs.ncols(); j++) - tmp[i][j] = lhs[i][j] * rhs[i][j]; - - return tmp; -} - -template -Matrix operator*(const Matrix& lhs, const T& a) -{ - Matrix tmp(lhs.nrows(), lhs.ncols()); - for (unsigned int i = 0; i < lhs.nrows(); i++) - for (unsigned int j = 0; j < lhs.ncols(); j++) - tmp[i][j] = lhs[i][j] * a; - - return tmp; -} - -template -Matrix operator*(const T& a, const Matrix& rhs) -{ - Matrix tmp(rhs.nrows(), rhs.ncols()); - for (unsigned int i = 0; i < rhs.nrows(); i++) - for (unsigned int j = 0; j < rhs.ncols(); j++) - tmp[i][j] = a * rhs[i][j]; - - return tmp; -} - -template -inline Matrix& Matrix::operator*=(const Matrix& rhs) -{ - if (m != rhs.ncols() || n != rhs.nrows()) - throw std::logic_error("Operator*=: matrices have different sizes"); - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] *= rhs[i][j]; - - return *this; -} - -template -inline Matrix& Matrix::operator*=(const T& a) -{ - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] *= a; - - return *this; -} - -template -Matrix operator/(const Matrix& lhs, const Matrix& rhs) -{ - if (lhs.ncols() != rhs.ncols() || lhs.nrows() != rhs.nrows()) - throw std::logic_error("Operator+: matrices have different sizes"); - Matrix tmp(lhs.nrows(), lhs.ncols()); - for (unsigned int i = 0; i < lhs.nrows(); i++) - for (unsigned int j = 0; j < lhs.ncols(); j++) - tmp[i][j] = lhs[i][j] / rhs[i][j]; - - return tmp; -} - -template -Matrix operator/(const Matrix& lhs, const T& a) -{ - Matrix tmp(lhs.nrows(), lhs.ncols()); - for (unsigned int i = 0; i < lhs.nrows(); i++) - for (unsigned int j = 0; j < lhs.ncols(); j++) - tmp[i][j] = lhs[i][j] / a; - - return tmp; -} - -template -Matrix operator/(const T& a, const Matrix& rhs) -{ - Matrix tmp(rhs.nrows(), rhs.ncols()); - for (unsigned int i = 0; i < rhs.nrows(); i++) - for (unsigned int j = 0; j < rhs.ncols(); j++) - tmp[i][j] = a / rhs[i][j]; - - return tmp; -} - -template -inline Matrix& Matrix::operator/=(const Matrix& rhs) -{ - if (m != rhs.ncols() || n != rhs.nrows()) - throw std::logic_error("Operator+=: matrices have different sizes"); - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] /= rhs[i][j]; - - return *this; -} - -template -inline Matrix& Matrix::operator/=(const T& a) -{ - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] /= a; - - return *this; -} - -template -Matrix operator^(const Matrix& lhs, const T& a) -{ - Matrix tmp(lhs.nrows(), lhs.ncols()); - for (unsigned int i = 0; i < lhs.nrows(); i++) - for (unsigned int j = 0; j < lhs.ncols(); j++) - tmp[i][j] = pow(lhs[i][j], a); - - return tmp; -} - -template -inline Matrix& Matrix::operator^=(const Matrix& rhs) -{ - if (m != rhs.ncols() || n != rhs.nrows()) - throw std::logic_error("Operator^=: matrices have different sizes"); - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] = pow(v[i][j], rhs[i][j]); - - return *this; -} - - -template -inline Matrix& Matrix::operator^=(const T& a) -{ - for (unsigned int i = 0; i < n; i++) - for (unsigned int j = 0; j < m; j++) - v[i][j] = pow(v[i][j], a); - - return *this; -} - -template -inline Matrix::operator Vector() -{ - if (n > 1 && m > 1) - throw std::logic_error("Error matrix cast to vector: trying to cast a multi-dimensional matrix"); - if (n == 1) - return extractRow(0); - else - return extractColumn(0); -} - -template -inline bool operator==(const Matrix& a, const Matrix& b) -{ - if (a.nrows() != b.nrows() || a.ncols() != b.ncols()) - throw std::logic_error("Matrices of different size are not confrontable"); - for (unsigned i = 0; i < a.nrows(); i++) - for (unsigned j = 0; j < a.ncols(); j++) - if (a[i][j] != b[i][j]) - return false; - return true; -} - -template -inline bool operator!=(const Matrix& a, const Matrix& b) -{ - if (a.nrows() != b.nrows() || a.ncols() != b.ncols()) - throw std::logic_error("Matrices of different size are not confrontable"); - for (unsigned i = 0; i < a.nrows(); i++) - for (unsigned j = 0; j < a.ncols(); j++) - if (a[i][j] != b[i][j]) - return true; - return false; -} - - - -/** - Input/Output -*/ -template -std::ostream& operator<<(std::ostream& os, const Matrix& m) -{ - os << std::endl << m.nrows() << " " << m.ncols() << std::endl; - for (unsigned int i = 0; i < m.nrows(); i++) - { - for (unsigned int j = 0; j < m.ncols() - 1; j++) - os << std::setw(20) << std::setprecision(16) << m[i][j] << ", "; - os << std::setw(20) << std::setprecision(16) << m[i][m.ncols() - 1] << std::endl; - } - - return os; -} - -template -std::istream& operator>>(std::istream& is, Matrix& m) -{ - int rows, cols; - char comma; - is >> rows >> cols; - m.resize(rows, cols); - for (unsigned int i = 0; i < rows; i++) - for (unsigned int j = 0; j < cols; j++) - is >> m[i][j] >> comma; - - return is; -} - -template -T sign(const T& v) -{ - if (v >= (T)0.0) - return (T)1.0; - else - return (T)-1.0; -} - -template -T dist(const T& a, const T& b) -{ - T abs_a = (T)fabs(a), abs_b = (T)fabs(b); - if (abs_a > abs_b) - return abs_a * sqrt((T)1.0 + (abs_b / abs_a) * (abs_b / abs_a)); - else - return (abs_b == (T)0.0 ? (T)0.0 : abs_b * sqrt((T)1.0 + (abs_a / abs_b) * (abs_a / abs_b))); -} - -template -void svd(const Matrix& A, Matrix& U, Vector& W, Matrix& V) -{ - int m = A.nrows(), n = A.ncols(), i, j, k, l, jj, nm; - const unsigned int max_its = 30; - bool flag; - Vector rv1(n); - U = A; - W.resize(n); - V.resize(n, n); - T anorm, c, f, g, h, s, scale, x, y, z; - g = scale = anorm = (T)0.0; - - // Householder reduction to bidiagonal form - for (i = 0; i < n; i++) - { - l = i + 1; - rv1[i] = scale * g; - g = s = scale = (T)0.0; - if (i < m) - { - for (k = i; k < m; k++) - scale += fabs(U[k][i]); - if (scale != (T)0.0) - { - for (k = i; k < m; k++) - { - U[k][i] /= scale; - s += U[k][i] * U[k][i]; - } - f = U[i][i]; - g = -sign(f) * sqrt(s); - h = f * g - s; - U[i][i] = f - g; - for (j = l; j < n; j++) - { - s = (T)0.0; - for (k = i; k < m; k++) - s += U[k][i] * U[k][j]; - f = s / h; - for (k = i; k < m; k++) - U[k][j] += f * U[k][i]; - } - for (k = i; k < m; k++) - U[k][i] *= scale; - } - } - W[i] = scale * g; - g = s = scale = (T)0.0; - if (i < m && i != n - 1) - { - for (k = l; k < n; k++) - scale += fabs(U[i][k]); - if (scale != (T)0.0) - { - for (k = l; k < n; k++) - { - U[i][k] /= scale; - s += U[i][k] * U[i][k]; - } - f = U[i][l]; - g = -sign(f) * sqrt(s); - h = f * g - s; - U[i][l] = f - g; - for (k = l; k = 0; i--) - { - if (i < n - 1) - { - if (g != (T)0.0) - { - for (j = l; j < n; j++) - V[j][i] = (U[i][j] / U[i][l]) / g; - for (j = l; j < n; j++) - { - s = (T)0.0; - for (k = l; k < n; k++) - s += U[i][k] * V[k][j]; - for (k = l; k < n; k++) - V[k][j] += s * V[k][i]; - } - } - for (j = l; j < n; j++) - V[i][j] = V[j][i] = (T)0.0; - } - V[i][i] = (T)1.0; - g = rv1[i]; - l = i; - } - // Accumulation of left-hand transformations - for (i = std::min(m, n) - 1; i >= 0; i--) - { - l = i + 1; - g = W[i]; - for (j = l; j < n; j++) - U[i][j] = (T)0.0; - if (g != (T)0.0) - { - g = (T)1.0 / g; - for (j = l; j < n; j++) - { - s = (T)0.0; - for (k = l; k < m; k++) - s += U[k][i] * U[k][j]; - f = (s / U[i][i]) * g; - for (k = i; k < m; k++) - U[k][j] += f * U[k][i]; - } - for (j = i; j < m; j++) - U[j][i] *= g; - } - else - for (j = i; j < m; j++) - U[j][i] = (T)0.0; - U[i][i]++; - } - // Diagonalization of the bidiagonal form: loop over singular values, and over allowed iterations. - for (k = n - 1; k >= 0; k--) - { - for (unsigned int its = 0; its < max_its; its++) - { - flag = true; - for (l = k; l >= 0; l--) - { // Test for splitting - nm = l - 1; // Note that rV[0] is always zero - if ((T)(fabs(rv1[l]) + anorm) == anorm) - { - flag = false; - break; - } - if ((T)(fabs(W[nm]) + anorm) == anorm) - break; - } - if (flag) - { - // Cancellation of rv1[l], if l > 0 FIXME: it was l > 1 in NR - c = (T)0.0; - s = (T)1.0; - for (i = l; i <= k; i++) - { - f = s * rv1[i]; - rv1[i] *= c; - if ((T)(fabs(f) + anorm) == anorm) - break; - g = W[i]; - h = dist(f, g); - W[i] = h; - h = (T)1.0 / h; - c = g * h; - s = -f * h; - for (j = 0; j < m; j++) - { - y = U[j][nm]; - z = U[j][i]; - U[j][nm] = y * c + z * s; - U[j][i] = z * c - y * s; - } - } - } - z = W[k]; - if (l == k) - { // Convergence - if (z < (T)0.0) - { // Singular value is made nonnegative - W[k] = -z; - for (j = 0; j < n; j++) - V[j][k] = -V[j][k]; - } - break; - } - if (its == max_its) - throw std::logic_error("Error svd: no convergence in the maximum number of iterations"); - x = W[l]; - nm = k - 1; - y = W[nm]; - g = rv1[nm]; - h = rv1[k]; - f = ((y - z) * (y + z) + (g - h) * (g + h)) / (2.0 * h * y); - g = dist(f, (T)1.0); - f = ((x - z) * (x + z) + h * ((y / (f + sign(f)*fabs(g))) - h)) / x; - c = s = (T)1.0; // Next QR transformation - for (j = l; j <= nm; j++) - { - i = j + 1; - g = rv1[i]; - y = W[i]; - h = s * g; - g *= c; - z = dist(f, h); - rv1[j] = z; - c = f / z; - s = h / z; - f = x * c + g * s; - g = g * c - x * s; - h = y * s; - y *= c; - for (jj = 0; jj < n; jj++) - { - x = V[jj][j]; - z = V[jj][i]; - V[jj][j] = x * c + z * s; - V[jj][i] = z * c - x * s; - } - z = dist(f, h); - W[j] = z; - if (z != 0) // Rotation can be arbitrary if z = 0 - { - z = (T)1.0 / z; - c = f * z; - s = h * z; - } - f = c * g + s * y; - x = c * y - s * g; - for (jj = 0; jj < m; jj++) - { - y = U[jj][j]; - z = U[jj][i]; - U[jj][j] = y * c + z * s; - U[jj][i] = z * c - y * s; - } - } - rv1[l] = (T)0.0; - rv1[k] = f; - W[k] = x; - } - } -} - -template -Matrix pinv(const Matrix& A) -{ - Matrix U, V, x, tmp(A.ncols(), A.nrows()); - Vector W; - CanonicalBaseVector e(0, A.nrows()); - svd(A, U, W, V); - for (unsigned int i = 0; i < A.nrows(); i++) - { - e.reset(i); - tmp.setColumn(i, dot_prod(dot_prod(dot_prod(V, Matrix(DIAG, 1.0 / W, 0.0, W.size(), W.size())), t(U)), e)); - } - - return tmp; -} - -template -int lu(const Matrix& A, Matrix& LU, Vector& index) -{ - if (A.ncols() != A.nrows()) - throw std::logic_error("Error in LU decomposition: matrix must be squared"); - int i, p, j, k, n = A.ncols(), ex; - T val, tmp; - Vector d(n); - LU = A; - index.resize(n); - - ex = 1; - for (i = 0; i < n; i++) - { - index[i] = i; - val = (T)0.0; - for (j = 0; j < n; j++) - val = std::max(val, (T)fabs(LU[i][j])); - if (val == (T)0.0) - std::logic_error("Error in LU decomposition: matrix was singular"); - d[i] = val; - } - - for (k = 0; k < n - 1; k++) - { - p = k; - val = fabs(LU[k][k]) / d[k]; - for (i = k + 1; i < n; i++) - { - tmp = fabs(LU[i][k]) / d[i]; - if (tmp > val) - { - val = tmp; - p = i; - } - } - if (val == (T)0.0) - std::logic_error("Error in LU decomposition: matrix was singular"); - if (p > k) - { - ex = -ex; - std::swap(index[k], index[p]); - std::swap(d[k], d[p]); - for (j = 0; j < n; j++) - std::swap(LU[k][j], LU[p][j]); - } - - for (i = k + 1; i < n; i++) - { - LU[i][k] /= LU[k][k]; - for (j = k + 1; j < n; j++) - LU[i][j] -= LU[i][k] * LU[k][j]; - } - } - if (LU[n - 1][n - 1] == (T)0.0) - std::logic_error("Error in LU decomposition: matrix was singular"); - - return ex; -} - -template -Vector lu_solve(const Matrix& LU, const Vector& b, Vector& index) -{ - if (LU.ncols() != LU.nrows()) - throw std::logic_error("Error in LU solve: LU matrix should be squared"); - unsigned int n = LU.ncols(); - if (b.size() != n) - throw std::logic_error("Error in LU solve: b vector must be of the same dimensions of LU matrix"); - Vector x((T)0.0, n); - int i, j, p; - T sum; - - p = index[0]; - x[0] = b[p]; - - for (i = 1; i < n; i++) - { - sum = (T)0.0; - for (j = 0; j < i; j++) - sum += LU[i][j] * x[j]; - p = index[i]; - x[i] = b[p] - sum; - } - x[n - 1] /= LU[n - 1][n - 1]; - for (i = n - 2; i >= 0; i--) - { - sum = (T)0.0; - for (j = i + 1; j < n; j++) - sum += LU[i][j] * x[j]; - x[i] = (x[i] - sum) / LU[i][i]; - } - return x; -} - -template -void lu_solve(const Matrix& LU, Vector& x, const Vector& b, Vector& index) -{ - x = lu_solve(LU, b, index); -} - -template -Matrix lu_inverse(const Matrix& A) -{ - if (A.ncols() != A.nrows()) - throw std::logic_error("Error in LU invert: matrix must be squared"); - unsigned int n = A.ncols(); - Matrix A1(n, n), LU; - Vector index; - - lu(A, LU, index); - CanonicalBaseVector e(0, n); - for (unsigned i = 0; i < n; i++) - { - e.reset(i); - A1.setColumn(i, lu_solve(LU, e, index)); - } - - return A1; -} - -template -T lu_det(const Matrix& A) -{ - if (A.ncols() != A.nrows()) - throw std::logic_error("Error in LU determinant: matrix must be squared"); - unsigned int d; - Matrix LU; - Vector index; - - d = lu(A, LU, index); - - return d * prod(LU.extractDiag()); -} - -template -void cholesky(const Matrix A, Matrix& LL) -{ - if (A.ncols() != A.nrows()) - throw std::logic_error("Error in Cholesky decomposition: matrix must be squared"); - int n = A.ncols(); - double sum; - LL = A; - - for (unsigned int i = 0; i < n; i++) - { - for (unsigned int j = i; j < n; j++) - { - sum = LL[i][j]; - for (int k = i - 1; k >= 0; k--) - sum -= LL[i][k] * LL[j][k]; - if (i == j) - { - if (sum <= 0.0) - throw std::logic_error("Error in Cholesky decomposition: matrix is not postive definite"); - LL[i][i] = sqrt(sum); - } - else - LL[j][i] = sum / LL[i][i]; - } - for (unsigned int k = i + 1; k < n; k++) - LL[i][k] = LL[k][i]; - } -} - -template -Matrix cholesky(const Matrix A) -{ - Matrix LL; - cholesky(A, LL); - - return LL; -} - -template -Vector cholesky_solve(const Matrix& LL, const Vector& b) -{ - if (LL.ncols() != LL.nrows()) - throw std::logic_error("Error in Cholesky solve: matrix must be squared"); - unsigned int n = LL.ncols(); - if (b.size() != n) - throw std::logic_error("Error in Cholesky decomposition: b vector must be of the same dimensions of LU matrix"); - Vector x, y; - - /* Solve L * y = b */ - forward_elimination(LL, y, b); - /* Solve L^T * x = y */ - backward_elimination(LL, x, y); - - return x; -} - -template -void cholesky_solve(const Matrix& LL, Vector& x, const Vector& b) -{ - x = cholesky_solve(LL, b); -} - -template -void forward_elimination(const Matrix& L, Vector& y, const Vector b) -{ - if (L.ncols() != L.nrows()) - throw std::logic_error("Error in Forward elimination: matrix must be squared (lower triangular)"); - if (b.size() != L.nrows()) - throw std::logic_error("Error in Forward elimination: b vector must be of the same dimensions of L matrix"); - unsigned int n = b.size(); - y.resize(n); - - y[0] = b[0] / L[0][0]; - for (unsigned int i = 1; i < n; i++) - { - y[i] = b[i]; - for (unsigned int j = 0; j < i; j++) - y[i] -= L[i][j] * y[j]; - y[i] = y[i] / L[i][i]; - } -} - -template -Vector forward_elimination(const Matrix& L, const Vector b) -{ - Vector y; - forward_elimination(L, y, b); - - return y; -} - -template -void backward_elimination(const Matrix& U, Vector& x, const Vector& y) -{ - if (U.ncols() != U.nrows()) - throw std::logic_error("Error in Backward elimination: matrix must be squared (upper triangular)"); - if (y.size() != U.nrows()) - throw std::logic_error("Error in Backward elimination: b vector must be of the same dimensions of U matrix"); - int n = y.size(); - x.resize(n); - - x[n - 1] = y[n - 1] / U[n - 1][n - 1]; - for (int i = n - 2; i >= 0; i--) - { - x[i] = y[i]; - for (int j = i + 1; j < n; j++) - x[i] -= U[i][j] * x[j]; - x[i] = x[i] / U[i][i]; - } -} - -template -Vector backward_elimination(const Matrix& U, const Vector y) -{ - Vector x; - forward_elimination(U, x, y); - - return x; -} - -/* Setting default linear systems machinery */ - -// #define det lu_det -// #define inverse lu_inverse -// #define solve lu_solve - -/* Random */ - -template -void random(Matrix& m) -{ - for (unsigned int i = 0; i < m.nrows(); i++) - for (unsigned int j = 0; j < m.ncols(); j++) - m[i][j] = (T)(rand() / double(RAND_MAX)); -} - -/** - Aggregate functions -*/ - -template -Vector sum(const Matrix& m) -{ - Vector tmp((T)0, m.ncols()); - for (unsigned int j = 0; j < m.ncols(); j++) - for (unsigned int i = 0; i < m.nrows(); i++) - tmp[j] += m[i][j]; - return tmp; -} - -template -Vector r_sum(const Matrix& m) -{ - Vector tmp((T)0, m.nrows()); - for (unsigned int i = 0; i < m.nrows(); i++) - for (unsigned int j = 0; j < m.ncols(); j++) - tmp[i] += m[i][j]; - return tmp; -} - -template -T all_sum(const Matrix& m) -{ - T tmp = (T)0; - for (unsigned int i = 0; i < m.nrows(); i++) - for (unsigned int j = 0; j < m.ncols(); j++) - tmp += m[i][j]; - return tmp; -} - -template -Vector prod(const Matrix& m) -{ - Vector tmp((T)1, m.ncols()); - for (unsigned int j = 0; j < m.ncols(); j++) - for (unsigned int i = 0; i < m.nrows(); i++) - tmp[j] *= m[i][j]; - return tmp; -} - -template -Vector r_prod(const Matrix& m) -{ - Vector tmp((T)1, m.nrows()); - for (unsigned int i = 0; i < m.nrows(); i++) - for (unsigned int j = 0; j < m.ncols(); j++) - tmp[i] *= m[i][j]; - return tmp; -} - -template -T all_prod(const Matrix& m) -{ - T tmp = (T)1; - for (unsigned int i = 0; i < m.nrows(); i++) - for (unsigned int j = 0; j < m.ncols(); j++) - tmp *= m[i][j]; - return tmp; -} - -template -Vector mean(const Matrix& m) -{ - Vector res((T)0, m.ncols()); - for (unsigned int j = 0; j < m.ncols(); j++) - { - for (unsigned int i = 0; i < m.nrows(); i++) - res[j] += m[i][j]; - res[j] /= m.nrows(); - } - - return res; -} - -template -Vector r_mean(const Matrix& m) -{ - Vector res((T)0, m.rows()); - for (unsigned int i = 0; i < m.nrows(); i++) - { - for (unsigned int j = 0; j < m.ncols(); j++) - res[i] += m[i][j]; - res[i] /= m.nrows(); - } - - return res; -} - -template -T all_mean(const Matrix& m) -{ - T tmp = (T)0; - for (unsigned int i = 0; i < m.nrows(); i++) - for (unsigned int j = 0; j < m.ncols(); j++) - tmp += m[i][j]; - return tmp / (m.nrows() * m.ncols()); -} - -template -Vector var(const Matrix& m, bool sample_correction = false) -{ - Vector res((T)0, m.ncols()); - unsigned int n = m.nrows(); - double sum, ssum; - for (unsigned int j = 0; j < m.ncols(); j++) - { - sum = (T)0.0; ssum = (T)0.0; - for (unsigned int i = 0; i < m.nrows(); i++) - { - sum += m[i][j]; - ssum += (m[i][j] * m[i][j]); - } - if (!sample_correction) - res[j] = (ssum / n) - (sum / n) * (sum / n); - else - res[j] = n * ((ssum / n) - (sum / n) * (sum / n)) / (n - 1); - } - - return res; -} - -template -Vector stdev(const Matrix& m, bool sample_correction = false) -{ - return vec_sqrt(var(m, sample_correction)); -} - -template -Vector r_var(const Matrix& m, bool sample_correction = false) -{ - Vector res((T)0, m.nrows()); - double sum, ssum; - unsigned int n = m.ncols(); - for (unsigned int i = 0; i < m.nrows(); i++) - { - sum = 0.0; ssum = 0.0; - for (unsigned int j = 0; j < m.ncols(); j++) - { - sum += m[i][j]; - ssum += (m[i][j] * m[i][j]); - } - if (!sample_correction) - res[i] = (ssum / n) - (sum / n) * (sum / n); - else - res[i] = n * ((ssum / n) - (sum / n) * (sum / n)) / (n - 1); - } - - return res; -} - -template -Vector r_stdev(const Matrix& m, bool sample_correction = false) -{ - return vec_sqrt(r_var(m, sample_correction)); -} - -template -Vector max(const Matrix& m) -{ - Vector res(m.ncols()); - double value; - for (unsigned int j = 0; j < m.ncols(); j++) - { - value = m[0][j]; - for (unsigned int i = 1; i < m.nrows(); i++) - value = std::max(m[i][j], value); - res[j] = value; - } - - return res; -} - -template -Vector r_max(const Matrix& m) -{ - Vector res(m.nrows()); - double value; - for (unsigned int i = 0; i < m.nrows(); i++) - { - value = m[i][0]; - for (unsigned int j = 1; j < m.ncols(); j++) - value = std::max(m[i][j], value); - res[i] = value; - } - - return res; -} - -template -Vector min(const Matrix& m) -{ - Vector res(m.ncols()); - double value; - for (unsigned int j = 0; j < m.ncols(); j++) - { - value = m[0][j]; - for (unsigned int i = 1; i < m.nrows(); i++) - value = std::min(m[i][j], value); - res[j] = value; - } - - return res; -} - -template -Vector r_min(const Matrix& m) -{ - Vector res(m.nrows()); - double value; - for (unsigned int i = 0; i < m.nrows(); i++) - { - value = m[i][0]; - for (unsigned int j = 1; j < m.ncols(); j++) - value = std::min(m[i][j], value); - res[i] = value; - } - - return res; -} - - - -/** - Single element mathematical functions -*/ - -template -Matrix exp(const Matrix&m) -{ - Matrix tmp(m.nrows(), m.ncols()); - - for (unsigned int i = 0; i < m.nrows(); i++) - for (unsigned int j = 0; j < m.ncols(); j++) - tmp[i][j] = exp(m[i][j]); - - return tmp; -} - -template -Matrix mat_sqrt(const Matrix&m) -{ - Matrix tmp(m.nrows(), m.ncols()); - - for (unsigned int i = 0; i < m.nrows(); i++) - for (unsigned int j = 0; j < m.ncols(); j++) - tmp[i][j] = sqrt(m[i][j]); - - return tmp; -} - -/** - Matrix operators -*/ - -template -Matrix kron(const Vector& b, const Vector& a) -{ - Matrix tmp(b.size(), a.size()); - for (unsigned int i = 0; i < b.size(); i++) - for (unsigned int j = 0; j < a.size(); j++) - tmp[i][j] = a[j] * b[i]; - - return tmp; -} - -template -Matrix t(const Matrix& a) -{ - Matrix tmp(a.ncols(), a.nrows()); - for (unsigned int i = 0; i < a.nrows(); i++) - for (unsigned int j = 0; j < a.ncols(); j++) - tmp[j][i] = a[i][j]; - - return tmp; -} - -template -Matrix dot_prod(const Matrix& a, const Matrix& b) -{ - if (a.ncols() != b.nrows()) - throw std::logic_error("Error matrix dot product: dimensions of the matrices are not compatible"); - Matrix tmp(a.nrows(), b.ncols()); - for (unsigned int i = 0; i < tmp.nrows(); i++) - for (unsigned int j = 0; j < tmp.ncols(); j++) - { - tmp[i][j] = (T)0; - for (unsigned int k = 0; k < a.ncols(); k++) - tmp[i][j] += a[i][k] * b[k][j]; - } - - return tmp; -} - -template -Matrix dot_prod(const Matrix& a, const Vector& b) -{ - if (a.ncols() != b.size()) - throw std::logic_error("Error matrix dot product: dimensions of the matrix and the vector are not compatible"); - Matrix tmp(a.nrows(), 1); - for (unsigned int i = 0; i < tmp.nrows(); i++) - { - tmp[i][0] = (T)0; - for (unsigned int k = 0; k < a.ncols(); k++) - tmp[i][0] += a[i][k] * b[k]; - } - - return tmp; -} - -template -Matrix dot_prod(const Vector& a, const Matrix& b) -{ - if (a.size() != b.nrows()) - throw std::logic_error("Error matrix dot product: dimensions of the vector and matrix are not compatible"); - Matrix tmp(1, b.ncols()); - for (unsigned int j = 0; j < tmp.ncols(); j++) - { - tmp[0][j] = (T)0; - for (unsigned int k = 0; k < a.size(); k++) - tmp[0][j] += a[k] * b[k][j]; - } - - return tmp; -} - -template -inline Matrix rank(const Matrix m) -{ - Matrix tmp(m.nrows(), m.ncols()); - for (unsigned int j = 0; j < m.ncols(); j++) - tmp.setColumn(j, rank(m.extractColumn(j))); - - return tmp; -} - -template -inline Matrix r_rank(const Matrix m) -{ - Matrix tmp(m.nrows(), m.ncols()); - for (unsigned int i = 0; i < m.nrows(); i++) - tmp.setRow(i, rank(m.extractRow(i))); - - return tmp; -} - -} // namespace quadprogpp - -#endif // define _ARRAY_HH_ +// $Id: Array.hh 249 2008-11-20 09:58:23Z schaerf $ +// This file is part of EasyLocalpp: a C++ Object-Oriented framework +// aimed at easing the development of Local Search algorithms. +// Copyright (C) 2001--2008 Andrea Schaerf, Luca Di Gaspero. +// +// This software may be modified and distributed under the terms +// of the MIT license. See the LICENSE file for details. + +#if !defined(_ARRAY_HH) +#define _ARRAY_HH + +#include +#include +#include +#include +#include +#include + +namespace quadprogpp { + +enum MType { DIAG }; + +template +class Vector +{ +public: + Vector(); + Vector(const unsigned int n); + Vector(const T& a, const unsigned int n); //initialize to constant value + Vector(const T* a, const unsigned int n); // Initialize to array + Vector(const Vector &rhs); // copy constructor + ~Vector(); // destructor + + inline void set(const T* a, const unsigned int n); + Vector extract(const std::set& indexes) const; + inline T& operator[](const unsigned int& i); //i-th element + inline const T& operator[](const unsigned int& i) const; + + inline unsigned int size() const; + inline void resize(const unsigned int n); + inline void resize(const T& a, const unsigned int n); + + Vector& operator=(const Vector& rhs); //assignment + Vector& operator=(const T& a); //assign a to every element + inline Vector& operator+=(const Vector& rhs); + inline Vector& operator-=(const Vector& rhs); + inline Vector& operator*=(const Vector& rhs); + inline Vector& operator/=(const Vector& rhs); + inline Vector& operator^=(const Vector& rhs); + inline Vector& operator+=(const T& a); + inline Vector& operator-=(const T& a); + inline Vector& operator*=(const T& a); + inline Vector& operator/=(const T& a); + inline Vector& operator^=(const T& a); +private: + unsigned int n; // size of array. upper index is n-1 + T* v; // storage for data +}; + +template +Vector::Vector() + : n(0), v(0) +{} + +template +Vector::Vector(const unsigned int n) + : v(new T[n]) +{ + this->n = n; +} + +template +Vector::Vector(const T& a, const unsigned int n) + : v(new T[n]) +{ + this->n = n; + for (unsigned int i = 0; i < n; i++) + v[i] = a; +} + +template +Vector::Vector(const T* a, const unsigned int n) + : v(new T[n]) +{ + this->n = n; + for (unsigned int i = 0; i < n; i++) + v[i] = *a++; +} + +template +Vector::Vector(const Vector& rhs) + : v(new T[rhs.n]) +{ + this->n = rhs.n; + for (unsigned int i = 0; i < n; i++) + v[i] = rhs[i]; +} + +template +Vector::~Vector() +{ + if (v != 0) + delete[] (v); +} + +template +void Vector::resize(const unsigned int n) +{ + if (n == this->n) + return; + if (v != 0) + delete[] (v); + v = new T[n]; + this->n = n; +} + +template +void Vector::resize(const T& a, const unsigned int n) +{ + resize(n); + for (unsigned int i = 0; i < n; i++) + v[i] = a; +} + + +template +inline Vector& Vector::operator=(const Vector& rhs) +// postcondition: normal assignment via copying has been performed; +// if vector and rhs were different sizes, vector +// has been resized to match the size of rhs +{ + if (this != &rhs) + { + resize(rhs.n); + for (unsigned int i = 0; i < n; i++) + v[i] = rhs[i]; + } + return *this; +} + +template +inline Vector & Vector::operator=(const T& a) //assign a to every element +{ + for (unsigned int i = 0; i < n; i++) + v[i] = a; + return *this; +} + +template +inline T & Vector::operator[](const unsigned int& i) //subscripting +{ + return v[i]; +} + +template +inline const T& Vector::operator[](const unsigned int& i) const //subscripting +{ + return v[i]; +} + +template +inline unsigned int Vector::size() const +{ + return n; +} + +template +inline void Vector::set(const T* a, unsigned int n) +{ + resize(n); + for (unsigned int i = 0; i < n; i++) + v[i] = a[i]; +} + +template +inline Vector Vector::extract(const std::set& indexes) const +{ + Vector tmp(indexes.size()); + unsigned int i = 0; + + for (std::set::const_iterator el = indexes.begin(); el != indexes.end(); el++) + { + if (*el >= n) + throw std::logic_error("Error extracting subvector: the indexes are out of vector bounds"); + tmp[i++] = v[*el]; + } + + return tmp; +} + +template +inline Vector& Vector::operator+=(const Vector& rhs) +{ + if (this->size() != rhs.size()) + throw std::logic_error("Operator+=: vectors have different sizes"); + for (unsigned int i = 0; i < n; i++) + v[i] += rhs[i]; + + return *this; +} + + +template +inline Vector& Vector::operator+=(const T& a) +{ + for (unsigned int i = 0; i < n; i++) + v[i] += a; + + return *this; +} + +template +inline Vector operator+(const Vector& rhs) +{ + return rhs; +} + +template +inline Vector operator+(const Vector& lhs, const Vector& rhs) +{ + if (lhs.size() != rhs.size()) + throw std::logic_error("Operator+: vectors have different sizes"); + Vector tmp(lhs.size()); + for (unsigned int i = 0; i < lhs.size(); i++) + tmp[i] = lhs[i] + rhs[i]; + + return tmp; +} + +template +inline Vector operator+(const Vector& lhs, const T& a) +{ + Vector tmp(lhs.size()); + for (unsigned int i = 0; i < lhs.size(); i++) + tmp[i] = lhs[i] + a; + + return tmp; +} + +template +inline Vector operator+(const T& a, const Vector& rhs) +{ + Vector tmp(rhs.size()); + for (unsigned int i = 0; i < rhs.size(); i++) + tmp[i] = a + rhs[i]; + + return tmp; +} + +template +inline Vector& Vector::operator-=(const Vector& rhs) +{ + if (this->size() != rhs.size()) + throw std::logic_error("Operator-=: vectors have different sizes"); + for (unsigned int i = 0; i < n; i++) + v[i] -= rhs[i]; + + return *this; +} + + +template +inline Vector& Vector::operator-=(const T& a) +{ + for (unsigned int i = 0; i < n; i++) + v[i] -= a; + + return *this; +} + +template +inline Vector operator-(const Vector& rhs) +{ + return (T)(-1) * rhs; +} + +template +inline Vector operator-(const Vector& lhs, const Vector& rhs) +{ + if (lhs.size() != rhs.size()) + throw std::logic_error("Operator-: vectors have different sizes"); + Vector tmp(lhs.size()); + for (unsigned int i = 0; i < lhs.size(); i++) + tmp[i] = lhs[i] - rhs[i]; + + return tmp; +} + +template +inline Vector operator-(const Vector& lhs, const T& a) +{ + Vector tmp(lhs.size()); + for (unsigned int i = 0; i < lhs.size(); i++) + tmp[i] = lhs[i] - a; + + return tmp; +} + +template +inline Vector operator-(const T& a, const Vector& rhs) +{ + Vector tmp(rhs.size()); + for (unsigned int i = 0; i < rhs.size(); i++) + tmp[i] = a - rhs[i]; + + return tmp; +} + +template +inline Vector& Vector::operator*=(const Vector& rhs) +{ + if (this->size() != rhs.size()) + throw std::logic_error("Operator*=: vectors have different sizes"); + for (unsigned int i = 0; i < n; i++) + v[i] *= rhs[i]; + + return *this; +} + + +template +inline Vector& Vector::operator*=(const T& a) +{ + for (unsigned int i = 0; i < n; i++) + v[i] *= a; + + return *this; +} + +template +inline Vector operator*(const Vector& lhs, const Vector& rhs) +{ + if (lhs.size() != rhs.size()) + throw std::logic_error("Operator*: vectors have different sizes"); + Vector tmp(lhs.size()); + for (unsigned int i = 0; i < lhs.size(); i++) + tmp[i] = lhs[i] * rhs[i]; + + return tmp; +} + +template +inline Vector operator*(const Vector& lhs, const T& a) +{ + Vector tmp(lhs.size()); + for (unsigned int i = 0; i < lhs.size(); i++) + tmp[i] = lhs[i] * a; + + return tmp; +} + +template +inline Vector operator*(const T& a, const Vector& rhs) +{ + Vector tmp(rhs.size()); + for (unsigned int i = 0; i < rhs.size(); i++) + tmp[i] = a * rhs[i]; + + return tmp; +} + +template +inline Vector& Vector::operator/=(const Vector& rhs) +{ + if (this->size() != rhs.size()) + throw std::logic_error("Operator/=: vectors have different sizes"); + for (unsigned int i = 0; i < n; i++) + v[i] /= rhs[i]; + + return *this; +} + + +template +inline Vector& Vector::operator/=(const T& a) +{ + for (unsigned int i = 0; i < n; i++) + v[i] /= a; + + return *this; +} + +template +inline Vector operator/(const Vector& lhs, const Vector& rhs) +{ + if (lhs.size() != rhs.size()) + throw std::logic_error("Operator/: vectors have different sizes"); + Vector tmp(lhs.size()); + for (unsigned int i = 0; i < lhs.size(); i++) + tmp[i] = lhs[i] / rhs[i]; + + return tmp; +} + +template +inline Vector operator/(const Vector& lhs, const T& a) +{ + Vector tmp(lhs.size()); + for (unsigned int i = 0; i < lhs.size(); i++) + tmp[i] = lhs[i] / a; + + return tmp; +} + +template +inline Vector operator/(const T& a, const Vector& rhs) +{ + Vector tmp(rhs.size()); + for (unsigned int i = 0; i < rhs.size(); i++) + tmp[i] = a / rhs[i]; + + return tmp; +} + +template +inline Vector operator^(const Vector& lhs, const Vector& rhs) +{ + if (lhs.size() != rhs.size()) + throw std::logic_error("Operator^: vectors have different sizes"); + Vector tmp(lhs.size()); + for (unsigned int i = 0; i < lhs.size(); i++) + tmp[i] = pow(lhs[i], rhs[i]); + + return tmp; +} + +template +inline Vector operator^(const Vector& lhs, const T& a) +{ + Vector tmp(lhs.size()); + for (unsigned int i = 0; i < lhs.size(); i++) + tmp[i] = pow(lhs[i], a); + + return tmp; +} + +template +inline Vector operator^(const T& a, const Vector& rhs) +{ + Vector tmp(rhs.size()); + for (unsigned int i = 0; i < rhs.size(); i++) + tmp[i] = pow(a, rhs[i]); + + return tmp; +} + +template +inline Vector& Vector::operator^=(const Vector& rhs) +{ + if (this->size() != rhs.size()) + throw std::logic_error("Operator^=: vectors have different sizes"); + for (unsigned int i = 0; i < n; i++) + v[i] = pow(v[i], rhs[i]); + + return *this; +} + +template +inline Vector& Vector::operator^=(const T& a) +{ + for (unsigned int i = 0; i < n; i++) + v[i] = pow(v[i], a); + + return *this; +} + +template +inline bool operator==(const Vector& v, const Vector& w) +{ + if (v.size() != w.size()) + throw std::logic_error("Vectors of different size are not confrontable"); + for (unsigned i = 0; i < v.size(); i++) + if (v[i] != w[i]) + return false; + return true; +} + +template +inline bool operator!=(const Vector& v, const Vector& w) +{ + if (v.size() != w.size()) + throw std::logic_error("Vectors of different size are not confrontable"); + for (unsigned i = 0; i < v.size(); i++) + if (v[i] != w[i]) + return true; + return false; +} + +template +inline bool operator<(const Vector& v, const Vector& w) +{ + if (v.size() != w.size()) + throw std::logic_error("Vectors of different size are not confrontable"); + for (unsigned i = 0; i < v.size(); i++) + if (v[i] >= w[i]) + return false; + return true; +} + +template +inline bool operator<=(const Vector& v, const Vector& w) +{ + if (v.size() != w.size()) + throw std::logic_error("Vectors of different size are not confrontable"); + for (unsigned i = 0; i < v.size(); i++) + if (v[i] > w[i]) + return false; + return true; +} + +template +inline bool operator>(const Vector& v, const Vector& w) +{ + if (v.size() != w.size()) + throw std::logic_error("Vectors of different size are not confrontable"); + for (unsigned i = 0; i < v.size(); i++) + if (v[i] <= w[i]) + return false; + return true; +} + +template +inline bool operator>=(const Vector& v, const Vector& w) +{ + if (v.size() != w.size()) + throw std::logic_error("Vectors of different size are not confrontable"); + for (unsigned i = 0; i < v.size(); i++) + if (v[i] < w[i]) + return false; + return true; +} + +/** + Input/Output +*/ +template +inline std::ostream& operator<<(std::ostream& os, const Vector& v) +{ + os << std::endl << v.size() << std::endl; + for (unsigned int i = 0; i < v.size() - 1; i++) + os << std::setw(20) << std::setprecision(16) << v[i] << ", "; + os << std::setw(20) << std::setprecision(16) << v[v.size() - 1] << std::endl; + + return os; +} + +template +std::istream& operator>>(std::istream& is, Vector& v) +{ + int elements; + char comma; + is >> elements; + v.resize(elements); + for (unsigned int i = 0; i < elements; i++) + is >> v[i] >> comma; + + return is; +} + +/** + Index utilities +*/ + +std::set seq(unsigned int s, unsigned int e); + +std::set singleton(unsigned int i); + +template +class CanonicalBaseVector : public Vector +{ +public: + CanonicalBaseVector(unsigned int i, unsigned int n); + inline void reset(unsigned int i); +private: + unsigned int e; +}; + +template +CanonicalBaseVector::CanonicalBaseVector(unsigned int i, unsigned int n) + : Vector((T)0, n), e(i) +{ (*this)[e] = (T)1; } + +template +inline void CanonicalBaseVector::reset(unsigned int i) +{ + (*this)[e] = (T)0; + e = i; + (*this)[e] = (T)1; +} + +#include + +template +inline T sum(const Vector& v) +{ + T tmp = (T)0; + for (unsigned int i = 0; i < v.size(); i++) + tmp += v[i]; + + return tmp; +} + +template +inline T prod(const Vector& v) +{ + T tmp = (T)1; + for (unsigned int i = 0; i < v.size(); i++) + tmp *= v[i]; + + return tmp; +} + +template +inline T mean(const Vector& v) +{ + T sum = (T)0; + for (unsigned int i = 0; i < v.size(); i++) + sum += v[i]; + return sum / v.size(); +} + +template +inline T median(const Vector& v) +{ + Vector tmp = sort(v); + if (v.size() % 2 == 1) // it is an odd-sized vector + return tmp[v.size() / 2]; + else + return 0.5 * (tmp[v.size() / 2 - 1] + tmp[v.size() / 2]); +} + +template +inline T stdev(const Vector& v, bool sample_correction = false) +{ + return sqrt(var(v, sample_correction)); +} + +template +inline T var(const Vector& v, bool sample_correction = false) +{ + T sum = (T)0, ssum = (T)0; + unsigned int n = v.size(); + for (unsigned int i = 0; i < n; i++) + { + sum += v[i]; + ssum += (v[i] * v[i]); + } + if (!sample_correction) + return (ssum / n) - (sum / n) * (sum / n); + else + return n * ((ssum / n) - (sum / n) * (sum / n)) / (n - 1); +} + +template +inline T max(const Vector& v) +{ + T value = v[0]; + for (unsigned int i = 1; i < v.size(); i++) + value = std::max(v[i], value); + + return value; +} + +template +inline T min(const Vector& v) +{ + T value = v[0]; + for (unsigned int i = 1; i < v.size(); i++) + value = std::min(v[i], value); + + return value; +} + +template +inline unsigned int index_max(const Vector& v) +{ + unsigned int max = 0; + for (unsigned int i = 1; i < v.size(); i++) + if (v[i] > v[max]) + max = i; + + return max; +} + +template +inline unsigned int index_min(const Vector& v) +{ + unsigned int min = 0; + for (unsigned int i = 1; i < v.size(); i++) + if (v[i] < v[min]) + min = i; + + return min; +} + + +template +inline T dot_prod(const Vector& a, const Vector& b) +{ + T sum = (T)0; + if (a.size() != b.size()) + throw std::logic_error("Dotprod error: the vectors are not the same size"); + for (unsigned int i = 0; i < a.size(); i++) + sum += a[i] * b[i]; + + return sum; +} + +/** + Single element mathematical functions +*/ + +template +inline Vector exp(const Vector& v) +{ + Vector tmp(v.size()); + for (unsigned int i = 0; i < v.size(); i++) + tmp[i] = exp(v[i]); + + return tmp; +} + +template +inline Vector log(const Vector& v) +{ + Vector tmp(v.size()); + for (unsigned int i = 0; i < v.size(); i++) + tmp[i] = log(v[i]); + + return tmp; +} + +template +inline Vector vec_sqrt(const Vector& v) +{ + Vector tmp(v.size()); + for (unsigned int i = 0; i < v.size(); i++) + tmp[i] = sqrt(v[i]); + + return tmp; +} + +template +inline Vector pow(const Vector& v, double a) +{ + Vector tmp(v.size()); + for (unsigned int i = 0; i < v.size(); i++) + tmp[i] = pow(v[i], a); + + return tmp; +} + +template +inline Vector abs(const Vector& v) +{ + Vector tmp(v.size()); + for (unsigned int i = 0; i < v.size(); i++) + tmp[i] = (T)fabs(v[i]); + + return tmp; +} + +template +inline Vector sign(const Vector& v) +{ + Vector tmp(v.size()); + for (unsigned int i = 0; i < v.size(); i++) + tmp[i] = v[i] > 0 ? +1 : v[i] == 0 ? 0 : -1; + + return tmp; +} + +template +inline unsigned int partition(Vector& v, unsigned int begin, unsigned int end) +{ + unsigned int i = begin + 1, j = begin + 1; + T pivot = v[begin]; + while (j <= end) + { + if (v[j] < pivot) { + std::swap(v[i], v[j]); + i++; + } + j++; + } + v[begin] = v[i - 1]; + v[i - 1] = pivot; + return i - 2; +} + + +template +inline void quicksort(Vector& v, unsigned int begin, unsigned int end) +{ + if (end > begin) + { + unsigned int index = partition(v, begin, end); + quicksort(v, begin, index); + quicksort(v, index + 2, end); + } +} + +template +inline Vector sort(const Vector& v) +{ + Vector tmp(v); + + quicksort(tmp, 0, tmp.size() - 1); + + return tmp; +} + +template +inline Vector rank(const Vector& v) +{ + Vector tmp(v); + Vector tmp_rank(0.0, v.size()); + + for (unsigned int i = 0; i < tmp.size(); i++) + { + unsigned int smaller = 0, equal = 0; + for (unsigned int j = 0; j < tmp.size(); j++) + if (i == j) + continue; + else + if (tmp[j] < tmp[i]) + smaller++; + else if (tmp[j] == tmp[i]) + equal++; + tmp_rank[i] = smaller + 1; + if (equal > 0) + { + for (unsigned int j = 1; j <= equal; j++) + tmp_rank[i] += smaller + 1 + j; + tmp_rank[i] /= (double)(equal + 1); + } + } + + return tmp_rank; +} + +//enum MType { DIAG }; + +template +class Matrix +{ +public: + Matrix(); // Default constructor + Matrix(const unsigned int n, const unsigned int m); // Construct a n x m matrix + Matrix(const T& a, const unsigned int n, const unsigned int m); // Initialize the content to constant a + Matrix(MType t, const T& a, const T& o, const unsigned int n, const unsigned int m); + Matrix(MType t, const Vector& v, const T& o, const unsigned int n, const unsigned int m); + Matrix(const T* a, const unsigned int n, const unsigned int m); // Initialize to array + Matrix(const Matrix& rhs); // Copy constructor + ~Matrix(); // destructor + + inline T* operator[](const unsigned int& i) { return v[i]; } // Subscripting: row i + inline const T* operator[](const unsigned int& i) const { return v[i]; }; // const subsctipting + + inline void resize(const unsigned int n, const unsigned int m); + inline void resize(const T& a, const unsigned int n, const unsigned int m); + + + inline Vector extractRow(const unsigned int i) const; + inline Vector extractColumn(const unsigned int j) const; + inline Vector extractDiag() const; + inline Matrix extractRows(const std::set& indexes) const; + inline Matrix extractColumns(const std::set& indexes) const; + inline Matrix extract(const std::set& r_indexes, const std::set& c_indexes) const; + + inline void set(const T* a, unsigned int n, unsigned int m); + inline void set(const std::set& r_indexes, const std::set& c_indexes, const Matrix& m); + inline void setRow(const unsigned int index, const Vector& v); + inline void setRow(const unsigned int index, const Matrix& v); + inline void setRows(const std::set& indexes, const Matrix& m); + inline void setColumn(const unsigned int index, const Vector& v); + inline void setColumn(const unsigned int index, const Matrix& v); + inline void setColumns(const std::set& indexes, const Matrix& m); + + + inline unsigned int nrows() const { return n; } // number of rows + inline unsigned int ncols() const { return m; } // number of columns + + inline Matrix& operator=(const Matrix& rhs); // Assignment operator + inline Matrix& operator=(const T& a); // Assign to every element value a + inline Matrix& operator+=(const Matrix& rhs); + inline Matrix& operator-=(const Matrix& rhs); + inline Matrix& operator*=(const Matrix& rhs); + inline Matrix& operator/=(const Matrix& rhs); + inline Matrix& operator^=(const Matrix& rhs); + inline Matrix& operator+=(const T& a); + inline Matrix& operator-=(const T& a); + inline Matrix& operator*=(const T& a); + inline Matrix& operator/=(const T& a); + inline Matrix& operator^=(const T& a); + inline operator Vector(); +private: + unsigned int n; // number of rows + unsigned int m; // number of columns + T **v; // storage for data +}; + +template +Matrix::Matrix() + : n(0), m(0), v(0) +{} + +template +Matrix::Matrix(unsigned int n, unsigned int m) + : v(new T*[n]) +{ + this->n = n; this->m = m; + v[0] = new T[m * n]; + for (unsigned int i = 1; i < n; i++) + v[i] = v[i - 1] + m; +} + +template +Matrix::Matrix(const T& a, unsigned int n, unsigned int m) + : v(new T*[n]) +{ + this->n = n; this->m = m; + v[0] = new T[m * n]; + for (unsigned int i = 1; i < n; i++) + v[i] = v[i - 1] + m; + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] = a; +} + +template +Matrix::Matrix(const T* a, unsigned int n, unsigned int m) + : v(new T*[n]) +{ + this->n = n; this->m = m; + v[0] = new T[m * n]; + for (unsigned int i = 1; i < n; i++) + v[i] = v[i - 1] + m; + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] = *a++; +} + +template +Matrix::Matrix(MType t, const T& a, const T& o, unsigned int n, unsigned int m) + : v(new T*[n]) +{ + this->n = n; this->m = m; + v[0] = new T[m * n]; + for (unsigned int i = 1; i < n; i++) + v[i] = v[i - 1] + m; + switch (t) + { + case DIAG: + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + if (i != j) + v[i][j] = o; + else + v[i][j] = a; + break; + default: + throw std::logic_error("Matrix type not supported"); + } +} + +template +Matrix::Matrix(MType t, const Vector& a, const T& o, unsigned int n, unsigned int m) + : v(new T*[n]) +{ + this->n = n; this->m = m; + v[0] = new T[m * n]; + for (unsigned int i = 1; i < n; i++) + v[i] = v[i - 1] + m; + switch (t) + { + case DIAG: + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + if (i != j) + v[i][j] = o; + else + v[i][j] = a[i]; + break; + default: + throw std::logic_error("Matrix type not supported"); + } +} + +template +Matrix::Matrix(const Matrix& rhs) + : v(new T*[rhs.n]) +{ + n = rhs.n; m = rhs.m; + v[0] = new T[m * n]; + for (unsigned int i = 1; i < n; i++) + v[i] = v[i - 1] + m; + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] = rhs[i][j]; +} + +template +Matrix::~Matrix() +{ + if (v != 0) { + delete[] (v[0]); + delete[] (v); + } +} + +template +inline Matrix& Matrix::operator=(const Matrix &rhs) +// postcondition: normal assignment via copying has been performed; +// if matrix and rhs were different sizes, matrix +// has been resized to match the size of rhs +{ + if (this != &rhs) + { + resize(rhs.n, rhs.m); + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] = rhs[i][j]; + } + return *this; +} + +template +inline Matrix& Matrix::operator=(const T& a) // assign a to every element +{ + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] = a; + return *this; +} + + +template +inline void Matrix::resize(const unsigned int n, const unsigned int m) +{ + if (n == this->n && m == this->m) + return; + if (v != 0) + { + delete[] (v[0]); + delete[] (v); + } + this->n = n; this->m = m; + v = new T*[n]; + v[0] = new T[m * n]; + for (unsigned int i = 1; i < n; i++) + v[i] = v[i - 1] + m; +} + +template +inline void Matrix::resize(const T& a, const unsigned int n, const unsigned int m) +{ + resize(n, m); + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] = a; +} + + + +template +inline Vector Matrix::extractRow(const unsigned int i) const +{ + if (i >= n) + throw std::logic_error("Error in extractRow: trying to extract a row out of matrix bounds"); + Vector tmp(v[i], m); + + return tmp; +} + +template +inline Vector Matrix::extractColumn(const unsigned int j) const +{ + if (j >= m) + throw std::logic_error("Error in extractRow: trying to extract a row out of matrix bounds"); + Vector tmp(n); + + for (unsigned int i = 0; i < n; i++) + tmp[i] = v[i][j]; + + return tmp; +} + +template +inline Vector Matrix::extractDiag() const +{ + unsigned int d = std::min(n, m); + + Vector tmp(d); + + for (unsigned int i = 0; i < d; i++) + tmp[i] = v[i][i]; + + return tmp; + +} + +template +inline Matrix Matrix::extractRows(const std::set& indexes) const +{ + Matrix tmp(indexes.size(), m); + unsigned int i = 0; + + for (std::set::const_iterator el = indexes.begin(); el != indexes.end(); el++) + { + for (unsigned int j = 0; j < m; j++) + { + if (*el >= n) + throw std::logic_error("Error extracting rows: the indexes are out of matrix bounds"); + tmp[i][j] = v[*el][j]; + } + i++; + } + + return tmp; +} + +template +inline Matrix Matrix::extractColumns(const std::set& indexes) const +{ + Matrix tmp(n, indexes.size()); + unsigned int j = 0; + + for (std::set::const_iterator el = indexes.begin(); el != indexes.end(); el++) + { + for (unsigned int i = 0; i < n; i++) + { + if (*el >= m) + throw std::logic_error("Error extracting columns: the indexes are out of matrix bounds"); + tmp[i][j] = v[i][*el]; + } + j++; + } + + return tmp; +} + +template +inline Matrix Matrix::extract(const std::set& r_indexes, const std::set& c_indexes) const +{ + Matrix tmp(r_indexes.size(), c_indexes.size()); + unsigned int i = 0, j; + + for (std::set::const_iterator r_el = r_indexes.begin(); r_el != r_indexes.end(); r_el++) + { + if (*r_el >= n) + throw std::logic_error("Error extracting submatrix: the indexes are out of matrix bounds"); + j = 0; + for (std::set::const_iterator c_el = c_indexes.begin(); c_el != c_indexes.end(); c_el++) + { + if (*c_el >= m) + throw std::logic_error("Error extracting rows: the indexes are out of matrix bounds"); + tmp[i][j] = v[*r_el][*c_el]; + j++; + } + i++; + } + + return tmp; +} + +template +inline void Matrix::setRow(unsigned int i, const Vector& a) +{ + if (i >= n) + throw std::logic_error("Error in setRow: trying to set a row out of matrix bounds"); + if (this->m != a.size()) + throw std::logic_error("Error setting matrix row: ranges are not compatible"); + for (unsigned int j = 0; j < ncols(); j++) + v[i][j] = a[j]; +} + +template +inline void Matrix::setRow(unsigned int i, const Matrix& a) +{ + if (i >= n) + throw std::logic_error("Error in setRow: trying to set a row out of matrix bounds"); + if (this->m != a.ncols()) + throw std::logic_error("Error setting matrix column: ranges are not compatible"); + if (a.nrows() != 1) + throw std::logic_error("Error setting matrix column with a non-row matrix"); + for (unsigned int j = 0; j < ncols(); j++) + v[i][j] = a[0][j]; +} + +template +inline void Matrix::setRows(const std::set& indexes, const Matrix& m) +{ + unsigned int i = 0; + + if (indexes.size() != m.nrows() || this->m != m.ncols()) + throw std::logic_error("Error setting matrix rows: ranges are not compatible"); + for (std::set::const_iterator el = indexes.begin(); el != indexes.end(); el++) + { + for (unsigned int j = 0; j < ncols(); j++) + { + if (*el >= n) + throw std::logic_error("Error in setRows: trying to set a row out of matrix bounds"); + v[*el][j] = m[i][j]; + } + i++; + } +} + +template +inline void Matrix::setColumn(unsigned int j, const Vector& a) +{ + if (j >= m) + throw std::logic_error("Error in setColumn: trying to set a column out of matrix bounds"); + if (this->n != a.size()) + throw std::logic_error("Error setting matrix column: ranges are not compatible"); + for (unsigned int i = 0; i < nrows(); i++) + v[i][j] = a[i]; +} + +template +inline void Matrix::setColumn(unsigned int j, const Matrix& a) +{ + if (j >= m) + throw std::logic_error("Error in setColumn: trying to set a column out of matrix bounds"); + if (this->n != a.nrows()) + throw std::logic_error("Error setting matrix column: ranges are not compatible"); + if (a.ncols() != 1) + throw std::logic_error("Error setting matrix column with a non-column matrix"); + for (unsigned int i = 0; i < nrows(); i++) + v[i][j] = a[i][0]; +} + + +template +inline void Matrix::setColumns(const std::set& indexes, const Matrix& a) +{ + unsigned int j = 0; + + if (indexes.size() != a.ncols() || this->n != a.nrows()) + throw std::logic_error("Error setting matrix columns: ranges are not compatible"); + for (std::set::const_iterator el = indexes.begin(); el != indexes.end(); el++) + { + for (unsigned int i = 0; i < nrows(); i++) + { + if (*el >= m) + throw std::logic_error("Error in setColumns: trying to set a column out of matrix bounds"); + v[i][*el] = a[i][j]; + } + j++; + } +} + +template +inline void Matrix::set(const std::set& r_indexes, const std::set& c_indexes, const Matrix& a) +{ + unsigned int i = 0, j; + if (c_indexes.size() != a.ncols() || r_indexes.size() != a.nrows()) + throw std::logic_error("Error setting matrix elements: ranges are not compatible"); + + for (std::set::const_iterator r_el = r_indexes.begin(); r_el != r_indexes.end(); r_el++) + { + if (*r_el >= n) + throw std::logic_error("Error in set: trying to set a row out of matrix bounds"); + j = 0; + for (std::set::const_iterator c_el = c_indexes.begin(); c_el != c_indexes.end(); c_el++) + { + if (*c_el >= m) + throw std::logic_error("Error in set: trying to set a column out of matrix bounds"); + v[*r_el][*c_el] = a[i][j]; + j++; + } + i++; + } +} + +template +inline void Matrix::set(const T* a, unsigned int n, unsigned int m) +{ + if (this->n != n || this->m != m) + resize(n, m); + unsigned int k = 0; + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] = a[k++]; +} + + +template +Matrix operator+(const Matrix& rhs) +{ + return rhs; +} + +template +Matrix operator+(const Matrix& lhs, const Matrix& rhs) +{ + if (lhs.ncols() != rhs.ncols() || lhs.nrows() != rhs.nrows()) + throw std::logic_error("Operator+: matrices have different sizes"); + Matrix tmp(lhs.nrows(), lhs.ncols()); + for (unsigned int i = 0; i < lhs.nrows(); i++) + for (unsigned int j = 0; j < lhs.ncols(); j++) + tmp[i][j] = lhs[i][j] + rhs[i][j]; + + return tmp; +} + +template +Matrix operator+(const Matrix& lhs, const T& a) +{ + Matrix tmp(lhs.nrows(), lhs.ncols()); + for (unsigned int i = 0; i < lhs.nrows(); i++) + for (unsigned int j = 0; j < lhs.ncols(); j++) + tmp[i][j] = lhs[i][j] + a; + + return tmp; +} + +template +Matrix operator+(const T& a, const Matrix& rhs) +{ + Matrix tmp(rhs.nrows(), rhs.ncols()); + for (unsigned int i = 0; i < rhs.nrows(); i++) + for (unsigned int j = 0; j < rhs.ncols(); j++) + tmp[i][j] = a + rhs[i][j]; + + return tmp; +} + +template +inline Matrix& Matrix::operator+=(const Matrix& rhs) +{ + if (m != rhs.ncols() || n != rhs.nrows()) + throw std::logic_error("Operator+=: matrices have different sizes"); + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] += rhs[i][j]; + + return *this; +} + +template +inline Matrix& Matrix::operator+=(const T& a) +{ + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] += a; + + return *this; +} + +template +Matrix operator-(const Matrix& rhs) +{ + return (T)(-1) * rhs; +} + +template +Matrix operator-(const Matrix& lhs, const Matrix& rhs) +{ + if (lhs.ncols() != rhs.ncols() || lhs.nrows() != rhs.nrows()) + throw std::logic_error("Operator-: matrices have different sizes"); + Matrix tmp(lhs.nrows(), lhs.ncols()); + for (unsigned int i = 0; i < lhs.nrows(); i++) + for (unsigned int j = 0; j < lhs.ncols(); j++) + tmp[i][j] = lhs[i][j] - rhs[i][j]; + + return tmp; +} + +template +Matrix operator-(const Matrix& lhs, const T& a) +{ + Matrix tmp(lhs.nrows(), lhs.ncols()); + for (unsigned int i = 0; i < lhs.nrows(); i++) + for (unsigned int j = 0; j < lhs.ncols(); j++) + tmp[i][j] = lhs[i][j] - a; + + return tmp; +} + +template +Matrix operator-(const T& a, const Matrix& rhs) +{ + Matrix tmp(rhs.nrows(), rhs.ncols()); + for (unsigned int i = 0; i < rhs.nrows(); i++) + for (unsigned int j = 0; j < rhs.ncols(); j++) + tmp[i][j] = a - rhs[i][j]; + + return tmp; +} + +template +inline Matrix& Matrix::operator-=(const Matrix& rhs) +{ + if (m != rhs.ncols() || n != rhs.nrows()) + throw std::logic_error("Operator-=: matrices have different sizes"); + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] -= rhs[i][j]; + + return *this; +} + +template +inline Matrix& Matrix::operator-=(const T& a) +{ + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] -= a; + + return *this; +} + +template +Matrix operator*(const Matrix& lhs, const Matrix& rhs) +{ + if (lhs.ncols() != rhs.ncols() || lhs.nrows() != rhs.nrows()) + throw std::logic_error("Operator*: matrices have different sizes"); + Matrix tmp(lhs.nrows(), lhs.ncols()); + for (unsigned int i = 0; i < lhs.nrows(); i++) + for (unsigned int j = 0; j < lhs.ncols(); j++) + tmp[i][j] = lhs[i][j] * rhs[i][j]; + + return tmp; +} + +template +Matrix operator*(const Matrix& lhs, const T& a) +{ + Matrix tmp(lhs.nrows(), lhs.ncols()); + for (unsigned int i = 0; i < lhs.nrows(); i++) + for (unsigned int j = 0; j < lhs.ncols(); j++) + tmp[i][j] = lhs[i][j] * a; + + return tmp; +} + +template +Matrix operator*(const T& a, const Matrix& rhs) +{ + Matrix tmp(rhs.nrows(), rhs.ncols()); + for (unsigned int i = 0; i < rhs.nrows(); i++) + for (unsigned int j = 0; j < rhs.ncols(); j++) + tmp[i][j] = a * rhs[i][j]; + + return tmp; +} + +template +inline Matrix& Matrix::operator*=(const Matrix& rhs) +{ + if (m != rhs.ncols() || n != rhs.nrows()) + throw std::logic_error("Operator*=: matrices have different sizes"); + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] *= rhs[i][j]; + + return *this; +} + +template +inline Matrix& Matrix::operator*=(const T& a) +{ + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] *= a; + + return *this; +} + +template +Matrix operator/(const Matrix& lhs, const Matrix& rhs) +{ + if (lhs.ncols() != rhs.ncols() || lhs.nrows() != rhs.nrows()) + throw std::logic_error("Operator+: matrices have different sizes"); + Matrix tmp(lhs.nrows(), lhs.ncols()); + for (unsigned int i = 0; i < lhs.nrows(); i++) + for (unsigned int j = 0; j < lhs.ncols(); j++) + tmp[i][j] = lhs[i][j] / rhs[i][j]; + + return tmp; +} + +template +Matrix operator/(const Matrix& lhs, const T& a) +{ + Matrix tmp(lhs.nrows(), lhs.ncols()); + for (unsigned int i = 0; i < lhs.nrows(); i++) + for (unsigned int j = 0; j < lhs.ncols(); j++) + tmp[i][j] = lhs[i][j] / a; + + return tmp; +} + +template +Matrix operator/(const T& a, const Matrix& rhs) +{ + Matrix tmp(rhs.nrows(), rhs.ncols()); + for (unsigned int i = 0; i < rhs.nrows(); i++) + for (unsigned int j = 0; j < rhs.ncols(); j++) + tmp[i][j] = a / rhs[i][j]; + + return tmp; +} + +template +inline Matrix& Matrix::operator/=(const Matrix& rhs) +{ + if (m != rhs.ncols() || n != rhs.nrows()) + throw std::logic_error("Operator+=: matrices have different sizes"); + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] /= rhs[i][j]; + + return *this; +} + +template +inline Matrix& Matrix::operator/=(const T& a) +{ + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] /= a; + + return *this; +} + +template +Matrix operator^(const Matrix& lhs, const T& a) +{ + Matrix tmp(lhs.nrows(), lhs.ncols()); + for (unsigned int i = 0; i < lhs.nrows(); i++) + for (unsigned int j = 0; j < lhs.ncols(); j++) + tmp[i][j] = pow(lhs[i][j], a); + + return tmp; +} + +template +inline Matrix& Matrix::operator^=(const Matrix& rhs) +{ + if (m != rhs.ncols() || n != rhs.nrows()) + throw std::logic_error("Operator^=: matrices have different sizes"); + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] = pow(v[i][j], rhs[i][j]); + + return *this; +} + + +template +inline Matrix& Matrix::operator^=(const T& a) +{ + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < m; j++) + v[i][j] = pow(v[i][j], a); + + return *this; +} + +template +inline Matrix::operator Vector() +{ + if (n > 1 && m > 1) + throw std::logic_error("Error matrix cast to vector: trying to cast a multi-dimensional matrix"); + if (n == 1) + return extractRow(0); + else + return extractColumn(0); +} + +template +inline bool operator==(const Matrix& a, const Matrix& b) +{ + if (a.nrows() != b.nrows() || a.ncols() != b.ncols()) + throw std::logic_error("Matrices of different size are not confrontable"); + for (unsigned i = 0; i < a.nrows(); i++) + for (unsigned j = 0; j < a.ncols(); j++) + if (a[i][j] != b[i][j]) + return false; + return true; +} + +template +inline bool operator!=(const Matrix& a, const Matrix& b) +{ + if (a.nrows() != b.nrows() || a.ncols() != b.ncols()) + throw std::logic_error("Matrices of different size are not confrontable"); + for (unsigned i = 0; i < a.nrows(); i++) + for (unsigned j = 0; j < a.ncols(); j++) + if (a[i][j] != b[i][j]) + return true; + return false; +} + + + +/** + Input/Output +*/ +template +std::ostream& operator<<(std::ostream& os, const Matrix& m) +{ + os << std::endl << m.nrows() << " " << m.ncols() << std::endl; + for (unsigned int i = 0; i < m.nrows(); i++) + { + for (unsigned int j = 0; j < m.ncols() - 1; j++) + os << std::setw(20) << std::setprecision(16) << m[i][j] << ", "; + os << std::setw(20) << std::setprecision(16) << m[i][m.ncols() - 1] << std::endl; + } + + return os; +} + +template +std::istream& operator>>(std::istream& is, Matrix& m) +{ + int rows, cols; + char comma; + is >> rows >> cols; + m.resize(rows, cols); + for (unsigned int i = 0; i < rows; i++) + for (unsigned int j = 0; j < cols; j++) + is >> m[i][j] >> comma; + + return is; +} + +template +T sign(const T& v) +{ + if (v >= (T)0.0) + return (T)1.0; + else + return (T)-1.0; +} + +template +T dist(const T& a, const T& b) +{ + T abs_a = (T)fabs(a), abs_b = (T)fabs(b); + if (abs_a > abs_b) + return abs_a * sqrt((T)1.0 + (abs_b / abs_a) * (abs_b / abs_a)); + else + return (abs_b == (T)0.0 ? (T)0.0 : abs_b * sqrt((T)1.0 + (abs_a / abs_b) * (abs_a / abs_b))); +} + +template +void svd(const Matrix& A, Matrix& U, Vector& W, Matrix& V) +{ + int m = A.nrows(), n = A.ncols(), i, j, k, l, jj, nm; + const unsigned int max_its = 30; + bool flag; + Vector rv1(n); + U = A; + W.resize(n); + V.resize(n, n); + T anorm, c, f, g, h, s, scale, x, y, z; + g = scale = anorm = (T)0.0; + + // Householder reduction to bidiagonal form + for (i = 0; i < n; i++) + { + l = i + 1; + rv1[i] = scale * g; + g = s = scale = (T)0.0; + if (i < m) + { + for (k = i; k < m; k++) + scale += fabs(U[k][i]); + if (scale != (T)0.0) + { + for (k = i; k < m; k++) + { + U[k][i] /= scale; + s += U[k][i] * U[k][i]; + } + f = U[i][i]; + g = -sign(f) * sqrt(s); + h = f * g - s; + U[i][i] = f - g; + for (j = l; j < n; j++) + { + s = (T)0.0; + for (k = i; k < m; k++) + s += U[k][i] * U[k][j]; + f = s / h; + for (k = i; k < m; k++) + U[k][j] += f * U[k][i]; + } + for (k = i; k < m; k++) + U[k][i] *= scale; + } + } + W[i] = scale * g; + g = s = scale = (T)0.0; + if (i < m && i != n - 1) + { + for (k = l; k < n; k++) + scale += fabs(U[i][k]); + if (scale != (T)0.0) + { + for (k = l; k < n; k++) + { + U[i][k] /= scale; + s += U[i][k] * U[i][k]; + } + f = U[i][l]; + g = -sign(f) * sqrt(s); + h = f * g - s; + U[i][l] = f - g; + for (k = l; k = 0; i--) + { + if (i < n - 1) + { + if (g != (T)0.0) + { + for (j = l; j < n; j++) + V[j][i] = (U[i][j] / U[i][l]) / g; + for (j = l; j < n; j++) + { + s = (T)0.0; + for (k = l; k < n; k++) + s += U[i][k] * V[k][j]; + for (k = l; k < n; k++) + V[k][j] += s * V[k][i]; + } + } + for (j = l; j < n; j++) + V[i][j] = V[j][i] = (T)0.0; + } + V[i][i] = (T)1.0; + g = rv1[i]; + l = i; + } + // Accumulation of left-hand transformations + for (i = std::min(m, n) - 1; i >= 0; i--) + { + l = i + 1; + g = W[i]; + for (j = l; j < n; j++) + U[i][j] = (T)0.0; + if (g != (T)0.0) + { + g = (T)1.0 / g; + for (j = l; j < n; j++) + { + s = (T)0.0; + for (k = l; k < m; k++) + s += U[k][i] * U[k][j]; + f = (s / U[i][i]) * g; + for (k = i; k < m; k++) + U[k][j] += f * U[k][i]; + } + for (j = i; j < m; j++) + U[j][i] *= g; + } + else + for (j = i; j < m; j++) + U[j][i] = (T)0.0; + U[i][i]++; + } + // Diagonalization of the bidiagonal form: loop over singular values, and over allowed iterations. + for (k = n - 1; k >= 0; k--) + { + for (unsigned int its = 0; its < max_its; its++) + { + flag = true; + for (l = k; l >= 0; l--) + { // Test for splitting + nm = l - 1; // Note that rV[0] is always zero + if ((T)(fabs(rv1[l]) + anorm) == anorm) + { + flag = false; + break; + } + if ((T)(fabs(W[nm]) + anorm) == anorm) + break; + } + if (flag) + { + // Cancellation of rv1[l], if l > 0 FIXME: it was l > 1 in NR + c = (T)0.0; + s = (T)1.0; + for (i = l; i <= k; i++) + { + f = s * rv1[i]; + rv1[i] *= c; + if ((T)(fabs(f) + anorm) == anorm) + break; + g = W[i]; + h = dist(f, g); + W[i] = h; + h = (T)1.0 / h; + c = g * h; + s = -f * h; + for (j = 0; j < m; j++) + { + y = U[j][nm]; + z = U[j][i]; + U[j][nm] = y * c + z * s; + U[j][i] = z * c - y * s; + } + } + } + z = W[k]; + if (l == k) + { // Convergence + if (z < (T)0.0) + { // Singular value is made nonnegative + W[k] = -z; + for (j = 0; j < n; j++) + V[j][k] = -V[j][k]; + } + break; + } + if (its == max_its) + throw std::logic_error("Error svd: no convergence in the maximum number of iterations"); + x = W[l]; + nm = k - 1; + y = W[nm]; + g = rv1[nm]; + h = rv1[k]; + f = ((y - z) * (y + z) + (g - h) * (g + h)) / (2.0 * h * y); + g = dist(f, (T)1.0); + f = ((x - z) * (x + z) + h * ((y / (f + sign(f)*fabs(g))) - h)) / x; + c = s = (T)1.0; // Next QR transformation + for (j = l; j <= nm; j++) + { + i = j + 1; + g = rv1[i]; + y = W[i]; + h = s * g; + g *= c; + z = dist(f, h); + rv1[j] = z; + c = f / z; + s = h / z; + f = x * c + g * s; + g = g * c - x * s; + h = y * s; + y *= c; + for (jj = 0; jj < n; jj++) + { + x = V[jj][j]; + z = V[jj][i]; + V[jj][j] = x * c + z * s; + V[jj][i] = z * c - x * s; + } + z = dist(f, h); + W[j] = z; + if (z != 0) // Rotation can be arbitrary if z = 0 + { + z = (T)1.0 / z; + c = f * z; + s = h * z; + } + f = c * g + s * y; + x = c * y - s * g; + for (jj = 0; jj < m; jj++) + { + y = U[jj][j]; + z = U[jj][i]; + U[jj][j] = y * c + z * s; + U[jj][i] = z * c - y * s; + } + } + rv1[l] = (T)0.0; + rv1[k] = f; + W[k] = x; + } + } +} + +template +Matrix pinv(const Matrix& A) +{ + Matrix U, V, x, tmp(A.ncols(), A.nrows()); + Vector W; + CanonicalBaseVector e(0, A.nrows()); + svd(A, U, W, V); + for (unsigned int i = 0; i < A.nrows(); i++) + { + e.reset(i); + tmp.setColumn(i, dot_prod(dot_prod(dot_prod(V, Matrix(DIAG, 1.0 / W, 0.0, W.size(), W.size())), t(U)), e)); + } + + return tmp; +} + +template +int lu(const Matrix& A, Matrix& LU, Vector& index) +{ + if (A.ncols() != A.nrows()) + throw std::logic_error("Error in LU decomposition: matrix must be squared"); + int i, p, j, k, n = A.ncols(), ex; + T val, tmp; + Vector d(n); + LU = A; + index.resize(n); + + ex = 1; + for (i = 0; i < n; i++) + { + index[i] = i; + val = (T)0.0; + for (j = 0; j < n; j++) + val = std::max(val, (T)fabs(LU[i][j])); + if (val == (T)0.0) + std::logic_error("Error in LU decomposition: matrix was singular"); + d[i] = val; + } + + for (k = 0; k < n - 1; k++) + { + p = k; + val = fabs(LU[k][k]) / d[k]; + for (i = k + 1; i < n; i++) + { + tmp = fabs(LU[i][k]) / d[i]; + if (tmp > val) + { + val = tmp; + p = i; + } + } + if (val == (T)0.0) + std::logic_error("Error in LU decomposition: matrix was singular"); + if (p > k) + { + ex = -ex; + std::swap(index[k], index[p]); + std::swap(d[k], d[p]); + for (j = 0; j < n; j++) + std::swap(LU[k][j], LU[p][j]); + } + + for (i = k + 1; i < n; i++) + { + LU[i][k] /= LU[k][k]; + for (j = k + 1; j < n; j++) + LU[i][j] -= LU[i][k] * LU[k][j]; + } + } + if (LU[n - 1][n - 1] == (T)0.0) + std::logic_error("Error in LU decomposition: matrix was singular"); + + return ex; +} + +template +Vector lu_solve(const Matrix& LU, const Vector& b, Vector& index) +{ + if (LU.ncols() != LU.nrows()) + throw std::logic_error("Error in LU solve: LU matrix should be squared"); + unsigned int n = LU.ncols(); + if (b.size() != n) + throw std::logic_error("Error in LU solve: b vector must be of the same dimensions of LU matrix"); + Vector x((T)0.0, n); + int i, j, p; + T sum; + + p = index[0]; + x[0] = b[p]; + + for (i = 1; i < n; i++) + { + sum = (T)0.0; + for (j = 0; j < i; j++) + sum += LU[i][j] * x[j]; + p = index[i]; + x[i] = b[p] - sum; + } + x[n - 1] /= LU[n - 1][n - 1]; + for (i = n - 2; i >= 0; i--) + { + sum = (T)0.0; + for (j = i + 1; j < n; j++) + sum += LU[i][j] * x[j]; + x[i] = (x[i] - sum) / LU[i][i]; + } + return x; +} + +template +void lu_solve(const Matrix& LU, Vector& x, const Vector& b, Vector& index) +{ + x = lu_solve(LU, b, index); +} + +template +Matrix lu_inverse(const Matrix& A) +{ + if (A.ncols() != A.nrows()) + throw std::logic_error("Error in LU invert: matrix must be squared"); + unsigned int n = A.ncols(); + Matrix A1(n, n), LU; + Vector index; + + lu(A, LU, index); + CanonicalBaseVector e(0, n); + for (unsigned i = 0; i < n; i++) + { + e.reset(i); + A1.setColumn(i, lu_solve(LU, e, index)); + } + + return A1; +} + +template +T lu_det(const Matrix& A) +{ + if (A.ncols() != A.nrows()) + throw std::logic_error("Error in LU determinant: matrix must be squared"); + unsigned int d; + Matrix LU; + Vector index; + + d = lu(A, LU, index); + + return d * prod(LU.extractDiag()); +} + +template +void cholesky(const Matrix A, Matrix& LL) +{ + if (A.ncols() != A.nrows()) + throw std::logic_error("Error in Cholesky decomposition: matrix must be squared"); + int n = A.ncols(); + double sum; + LL = A; + + for (unsigned int i = 0; i < n; i++) + { + for (unsigned int j = i; j < n; j++) + { + sum = LL[i][j]; + for (int k = i - 1; k >= 0; k--) + sum -= LL[i][k] * LL[j][k]; + if (i == j) + { + if (sum <= 0.0) + throw std::logic_error("Error in Cholesky decomposition: matrix is not postive definite"); + LL[i][i] = sqrt(sum); + } + else + LL[j][i] = sum / LL[i][i]; + } + for (unsigned int k = i + 1; k < n; k++) + LL[i][k] = LL[k][i]; + } +} + +template +Matrix cholesky(const Matrix A) +{ + Matrix LL; + cholesky(A, LL); + + return LL; +} + +template +Vector cholesky_solve(const Matrix& LL, const Vector& b) +{ + if (LL.ncols() != LL.nrows()) + throw std::logic_error("Error in Cholesky solve: matrix must be squared"); + unsigned int n = LL.ncols(); + if (b.size() != n) + throw std::logic_error("Error in Cholesky decomposition: b vector must be of the same dimensions of LU matrix"); + Vector x, y; + + /* Solve L * y = b */ + forward_elimination(LL, y, b); + /* Solve L^T * x = y */ + backward_elimination(LL, x, y); + + return x; +} + +template +void cholesky_solve(const Matrix& LL, Vector& x, const Vector& b) +{ + x = cholesky_solve(LL, b); +} + +template +void forward_elimination(const Matrix& L, Vector& y, const Vector b) +{ + if (L.ncols() != L.nrows()) + throw std::logic_error("Error in Forward elimination: matrix must be squared (lower triangular)"); + if (b.size() != L.nrows()) + throw std::logic_error("Error in Forward elimination: b vector must be of the same dimensions of L matrix"); + unsigned int n = b.size(); + y.resize(n); + + y[0] = b[0] / L[0][0]; + for (unsigned int i = 1; i < n; i++) + { + y[i] = b[i]; + for (unsigned int j = 0; j < i; j++) + y[i] -= L[i][j] * y[j]; + y[i] = y[i] / L[i][i]; + } +} + +template +Vector forward_elimination(const Matrix& L, const Vector b) +{ + Vector y; + forward_elimination(L, y, b); + + return y; +} + +template +void backward_elimination(const Matrix& U, Vector& x, const Vector& y) +{ + if (U.ncols() != U.nrows()) + throw std::logic_error("Error in Backward elimination: matrix must be squared (upper triangular)"); + if (y.size() != U.nrows()) + throw std::logic_error("Error in Backward elimination: b vector must be of the same dimensions of U matrix"); + int n = y.size(); + x.resize(n); + + x[n - 1] = y[n - 1] / U[n - 1][n - 1]; + for (int i = n - 2; i >= 0; i--) + { + x[i] = y[i]; + for (int j = i + 1; j < n; j++) + x[i] -= U[i][j] * x[j]; + x[i] = x[i] / U[i][i]; + } +} + +template +Vector backward_elimination(const Matrix& U, const Vector y) +{ + Vector x; + forward_elimination(U, x, y); + + return x; +} + +/* Setting default linear systems machinery */ + +// #define det lu_det +// #define inverse lu_inverse +// #define solve lu_solve + +/* Random */ + +template +void random(Matrix& m) +{ + for (unsigned int i = 0; i < m.nrows(); i++) + for (unsigned int j = 0; j < m.ncols(); j++) + m[i][j] = (T)(rand() / double(RAND_MAX)); +} + +/** + Aggregate functions +*/ + +template +Vector sum(const Matrix& m) +{ + Vector tmp((T)0, m.ncols()); + for (unsigned int j = 0; j < m.ncols(); j++) + for (unsigned int i = 0; i < m.nrows(); i++) + tmp[j] += m[i][j]; + return tmp; +} + +template +Vector r_sum(const Matrix& m) +{ + Vector tmp((T)0, m.nrows()); + for (unsigned int i = 0; i < m.nrows(); i++) + for (unsigned int j = 0; j < m.ncols(); j++) + tmp[i] += m[i][j]; + return tmp; +} + +template +T all_sum(const Matrix& m) +{ + T tmp = (T)0; + for (unsigned int i = 0; i < m.nrows(); i++) + for (unsigned int j = 0; j < m.ncols(); j++) + tmp += m[i][j]; + return tmp; +} + +template +Vector prod(const Matrix& m) +{ + Vector tmp((T)1, m.ncols()); + for (unsigned int j = 0; j < m.ncols(); j++) + for (unsigned int i = 0; i < m.nrows(); i++) + tmp[j] *= m[i][j]; + return tmp; +} + +template +Vector r_prod(const Matrix& m) +{ + Vector tmp((T)1, m.nrows()); + for (unsigned int i = 0; i < m.nrows(); i++) + for (unsigned int j = 0; j < m.ncols(); j++) + tmp[i] *= m[i][j]; + return tmp; +} + +template +T all_prod(const Matrix& m) +{ + T tmp = (T)1; + for (unsigned int i = 0; i < m.nrows(); i++) + for (unsigned int j = 0; j < m.ncols(); j++) + tmp *= m[i][j]; + return tmp; +} + +template +Vector mean(const Matrix& m) +{ + Vector res((T)0, m.ncols()); + for (unsigned int j = 0; j < m.ncols(); j++) + { + for (unsigned int i = 0; i < m.nrows(); i++) + res[j] += m[i][j]; + res[j] /= m.nrows(); + } + + return res; +} + +template +Vector r_mean(const Matrix& m) +{ + Vector res((T)0, m.rows()); + for (unsigned int i = 0; i < m.nrows(); i++) + { + for (unsigned int j = 0; j < m.ncols(); j++) + res[i] += m[i][j]; + res[i] /= m.nrows(); + } + + return res; +} + +template +T all_mean(const Matrix& m) +{ + T tmp = (T)0; + for (unsigned int i = 0; i < m.nrows(); i++) + for (unsigned int j = 0; j < m.ncols(); j++) + tmp += m[i][j]; + return tmp / (m.nrows() * m.ncols()); +} + +template +Vector var(const Matrix& m, bool sample_correction = false) +{ + Vector res((T)0, m.ncols()); + unsigned int n = m.nrows(); + double sum, ssum; + for (unsigned int j = 0; j < m.ncols(); j++) + { + sum = (T)0.0; ssum = (T)0.0; + for (unsigned int i = 0; i < m.nrows(); i++) + { + sum += m[i][j]; + ssum += (m[i][j] * m[i][j]); + } + if (!sample_correction) + res[j] = (ssum / n) - (sum / n) * (sum / n); + else + res[j] = n * ((ssum / n) - (sum / n) * (sum / n)) / (n - 1); + } + + return res; +} + +template +Vector stdev(const Matrix& m, bool sample_correction = false) +{ + return vec_sqrt(var(m, sample_correction)); +} + +template +Vector r_var(const Matrix& m, bool sample_correction = false) +{ + Vector res((T)0, m.nrows()); + double sum, ssum; + unsigned int n = m.ncols(); + for (unsigned int i = 0; i < m.nrows(); i++) + { + sum = 0.0; ssum = 0.0; + for (unsigned int j = 0; j < m.ncols(); j++) + { + sum += m[i][j]; + ssum += (m[i][j] * m[i][j]); + } + if (!sample_correction) + res[i] = (ssum / n) - (sum / n) * (sum / n); + else + res[i] = n * ((ssum / n) - (sum / n) * (sum / n)) / (n - 1); + } + + return res; +} + +template +Vector r_stdev(const Matrix& m, bool sample_correction = false) +{ + return vec_sqrt(r_var(m, sample_correction)); +} + +template +Vector max(const Matrix& m) +{ + Vector res(m.ncols()); + double value; + for (unsigned int j = 0; j < m.ncols(); j++) + { + value = m[0][j]; + for (unsigned int i = 1; i < m.nrows(); i++) + value = std::max(m[i][j], value); + res[j] = value; + } + + return res; +} + +template +Vector r_max(const Matrix& m) +{ + Vector res(m.nrows()); + double value; + for (unsigned int i = 0; i < m.nrows(); i++) + { + value = m[i][0]; + for (unsigned int j = 1; j < m.ncols(); j++) + value = std::max(m[i][j], value); + res[i] = value; + } + + return res; +} + +template +Vector min(const Matrix& m) +{ + Vector res(m.ncols()); + double value; + for (unsigned int j = 0; j < m.ncols(); j++) + { + value = m[0][j]; + for (unsigned int i = 1; i < m.nrows(); i++) + value = std::min(m[i][j], value); + res[j] = value; + } + + return res; +} + +template +Vector r_min(const Matrix& m) +{ + Vector res(m.nrows()); + double value; + for (unsigned int i = 0; i < m.nrows(); i++) + { + value = m[i][0]; + for (unsigned int j = 1; j < m.ncols(); j++) + value = std::min(m[i][j], value); + res[i] = value; + } + + return res; +} + + + +/** + Single element mathematical functions +*/ + +template +Matrix exp(const Matrix&m) +{ + Matrix tmp(m.nrows(), m.ncols()); + + for (unsigned int i = 0; i < m.nrows(); i++) + for (unsigned int j = 0; j < m.ncols(); j++) + tmp[i][j] = exp(m[i][j]); + + return tmp; +} + +template +Matrix mat_sqrt(const Matrix&m) +{ + Matrix tmp(m.nrows(), m.ncols()); + + for (unsigned int i = 0; i < m.nrows(); i++) + for (unsigned int j = 0; j < m.ncols(); j++) + tmp[i][j] = sqrt(m[i][j]); + + return tmp; +} + +/** + Matrix operators +*/ + +template +Matrix kron(const Vector& b, const Vector& a) +{ + Matrix tmp(b.size(), a.size()); + for (unsigned int i = 0; i < b.size(); i++) + for (unsigned int j = 0; j < a.size(); j++) + tmp[i][j] = a[j] * b[i]; + + return tmp; +} + +template +Matrix t(const Matrix& a) +{ + Matrix tmp(a.ncols(), a.nrows()); + for (unsigned int i = 0; i < a.nrows(); i++) + for (unsigned int j = 0; j < a.ncols(); j++) + tmp[j][i] = a[i][j]; + + return tmp; +} + +template +Matrix dot_prod(const Matrix& a, const Matrix& b) +{ + if (a.ncols() != b.nrows()) + throw std::logic_error("Error matrix dot product: dimensions of the matrices are not compatible"); + Matrix tmp(a.nrows(), b.ncols()); + for (unsigned int i = 0; i < tmp.nrows(); i++) + for (unsigned int j = 0; j < tmp.ncols(); j++) + { + tmp[i][j] = (T)0; + for (unsigned int k = 0; k < a.ncols(); k++) + tmp[i][j] += a[i][k] * b[k][j]; + } + + return tmp; +} + +template +Matrix dot_prod(const Matrix& a, const Vector& b) +{ + if (a.ncols() != b.size()) + throw std::logic_error("Error matrix dot product: dimensions of the matrix and the vector are not compatible"); + Matrix tmp(a.nrows(), 1); + for (unsigned int i = 0; i < tmp.nrows(); i++) + { + tmp[i][0] = (T)0; + for (unsigned int k = 0; k < a.ncols(); k++) + tmp[i][0] += a[i][k] * b[k]; + } + + return tmp; +} + +template +Matrix dot_prod(const Vector& a, const Matrix& b) +{ + if (a.size() != b.nrows()) + throw std::logic_error("Error matrix dot product: dimensions of the vector and matrix are not compatible"); + Matrix tmp(1, b.ncols()); + for (unsigned int j = 0; j < tmp.ncols(); j++) + { + tmp[0][j] = (T)0; + for (unsigned int k = 0; k < a.size(); k++) + tmp[0][j] += a[k] * b[k][j]; + } + + return tmp; +} + +template +inline Matrix rank(const Matrix m) +{ + Matrix tmp(m.nrows(), m.ncols()); + for (unsigned int j = 0; j < m.ncols(); j++) + tmp.setColumn(j, rank(m.extractColumn(j))); + + return tmp; +} + +template +inline Matrix r_rank(const Matrix m) +{ + Matrix tmp(m.nrows(), m.ncols()); + for (unsigned int i = 0; i < m.nrows(); i++) + tmp.setRow(i, rank(m.extractRow(i))); + + return tmp; +} + +} // namespace quadprogpp + +#endif // define _ARRAY_HH_ diff --git a/include/thirdparty/quadProgpp/QuadProg++.hh b/include/thirdparty/quadProgpp/QuadProg++.hh old mode 100644 new mode 100755 index c2954d4..88660e1 --- a/include/thirdparty/quadProgpp/QuadProg++.hh +++ b/include/thirdparty/quadProgpp/QuadProg++.hh @@ -1,77 +1,77 @@ -/* - File $Id: QuadProg++.hh 232 2007-06-21 12:29:00Z digasper $ - - The quadprog_solve() function implements the algorithm of Goldfarb and Idnani - for the solution of a (convex) Quadratic Programming problem - by means of an active-set dual method. - -The problem is in the form: - -min 0.5 * x G x + g0 x -s.t. - CE^T x + ce0 = 0 - CI^T x + ci0 >= 0 - - The matrix and vectors dimensions are as follows: - G: n * n - g0: n - - CE: n * p - ce0: p - - CI: n * m - ci0: m - - x: n - - The function will return the cost of the solution written in the x vector or - std::numeric_limits::infinity() if the problem is infeasible. In the latter case - the value of the x vector is not correct. - - References: D. Goldfarb, A. Idnani. A numerically stable dual method for solving - strictly convex quadratic programs. Mathematical Programming 27 (1983) pp. 1-33. - - Notes: - 1. pay attention in setting up the vectors ce0 and ci0. - If the constraints of your problem are specified in the form - A^T x = b and C^T x >= d, then you should set ce0 = -b and ci0 = -d. - 2. The matrices have column dimension equal to MATRIX_DIM, - a constant set to 20 in this file (by means of a #define macro). - If the matrices are bigger than 20 x 20 the limit could be - increased by means of a -DMATRIX_DIM=n on the compiler command line. - 3. The matrix G is modified within the function since it is used to compute - the G = L^T L cholesky factorization for further computations inside the function. - If you need the original matrix G you should make a copy of it and pass the copy - to the function. - - Author: Luca Di Gaspero - DIEGM - University of Udine, Italy - luca.digaspero@uniud.it - http://www.diegm.uniud.it/digaspero/ - - The author will be grateful if the researchers using this software will - acknowledge the contribution of this function in their research papers. - - Copyright (c) 2007-2016 Luca Di Gaspero - - This software may be modified and distributed under the terms - of the MIT license. See the LICENSE file for details. -*/ - - -#ifndef _QUADPROGPP -#define _QUADPROGPP - -#include "thirdparty/quadProgpp/Array.hh" -#include - -namespace quadprogpp { - -double solve_quadprog(Matrix& G, Vector& g0, - const Matrix& CE, const Vector& ce0, - const Matrix& CI, const Vector& ci0, - Vector& x); - -} // namespace quadprogpp - -#endif // #define _QUADPROGPP +/* + File $Id: QuadProg++.hh 232 2007-06-21 12:29:00Z digasper $ + + The quadprog_solve() function implements the algorithm of Goldfarb and Idnani + for the solution of a (convex) Quadratic Programming problem + by means of an active-set dual method. + +The problem is in the form: + +min 0.5 * x G x + g0 x +s.t. + CE^T x + ce0 = 0 + CI^T x + ci0 >= 0 + + The matrix and vectors dimensions are as follows: + G: n * n + g0: n + + CE: n * p + ce0: p + + CI: n * m + ci0: m + + x: n + + The function will return the cost of the solution written in the x vector or + std::numeric_limits::infinity() if the problem is infeasible. In the latter case + the value of the x vector is not correct. + + References: D. Goldfarb, A. Idnani. A numerically stable dual method for solving + strictly convex quadratic programs. Mathematical Programming 27 (1983) pp. 1-33. + + Notes: + 1. pay attention in setting up the vectors ce0 and ci0. + If the constraints of your problem are specified in the form + A^T x = b and C^T x >= d, then you should set ce0 = -b and ci0 = -d. + 2. The matrices have column dimension equal to MATRIX_DIM, + a constant set to 20 in this file (by means of a #define macro). + If the matrices are bigger than 20 x 20 the limit could be + increased by means of a -DMATRIX_DIM=n on the compiler command line. + 3. The matrix G is modified within the function since it is used to compute + the G = L^T L cholesky factorization for further computations inside the function. + If you need the original matrix G you should make a copy of it and pass the copy + to the function. + + Author: Luca Di Gaspero + DIEGM - University of Udine, Italy + luca.digaspero@uniud.it + http://www.diegm.uniud.it/digaspero/ + + The author will be grateful if the researchers using this software will + acknowledge the contribution of this function in their research papers. + + Copyright (c) 2007-2016 Luca Di Gaspero + + This software may be modified and distributed under the terms + of the MIT license. See the LICENSE file for details. +*/ + + +#ifndef _QUADPROGPP +#define _QUADPROGPP + +#include "thirdparty/quadProgpp/Array.hh" +#include + +namespace quadprogpp { + +double solve_quadprog(Matrix& G, Vector& g0, + const Matrix& CE, const Vector& ce0, + const Matrix& CI, const Vector& ci0, + Vector& x); + +} // namespace quadprogpp + +#endif // #define _QUADPROGPP diff --git a/include/thirdparty/tinyxml/tinystr.h b/include/thirdparty/tinyxml/tinystr.h index 89cca33..c3cac34 100644 --- a/include/thirdparty/tinyxml/tinystr.h +++ b/include/thirdparty/tinyxml/tinystr.h @@ -1,305 +1,305 @@ -/* -www.sourceforge.net/projects/tinyxml - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any -damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must -not claim that you wrote the original software. If you use this -software in a product, an acknowledgment in the product documentation -would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and -must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source -distribution. -*/ - - -#ifndef TIXML_USE_STL - -#ifndef TIXML_STRING_INCLUDED -#define TIXML_STRING_INCLUDED - -#include -#include - -/* The support for explicit isn't that universal, and it isn't really - required - it is used to check that the TiXmlString class isn't incorrectly - used. Be nice to old compilers and macro it here: -*/ -#if defined(_MSC_VER) && (_MSC_VER >= 1200 ) - // Microsoft visual studio, version 6 and higher. - #define TIXML_EXPLICIT explicit -#elif defined(__GNUC__) && (__GNUC__ >= 3 ) - // GCC version 3 and higher.s - #define TIXML_EXPLICIT explicit -#else - #define TIXML_EXPLICIT -#endif - - -/* - TiXmlString is an emulation of a subset of the std::string template. - Its purpose is to allow compiling TinyXML on compilers with no or poor STL support. - Only the member functions relevant to the TinyXML project have been implemented. - The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase - a string and there's no more room, we allocate a buffer twice as big as we need. -*/ -class TiXmlString -{ - public : - // The size type used - typedef size_t size_type; - - // Error value for find primitive - static const size_type npos; // = -1; - - - // TiXmlString empty constructor - TiXmlString () : rep_(&nullrep_) - { - } - - // TiXmlString copy constructor - TiXmlString ( const TiXmlString & copy) : rep_(0) - { - init(copy.length()); - memcpy(start(), copy.data(), length()); - } - - // TiXmlString constructor, based on a string - TIXML_EXPLICIT TiXmlString ( const char * copy) : rep_(0) - { - init( static_cast( strlen(copy) )); - memcpy(start(), copy, length()); - } - - // TiXmlString constructor, based on a string - TIXML_EXPLICIT TiXmlString ( const char * str, size_type len) : rep_(0) - { - init(len); - memcpy(start(), str, len); - } - - // TiXmlString destructor - ~TiXmlString () - { - quit(); - } - - TiXmlString& operator = (const char * copy) - { - return assign( copy, (size_type)strlen(copy)); - } - - TiXmlString& operator = (const TiXmlString & copy) - { - return assign(copy.start(), copy.length()); - } - - - // += operator. Maps to append - TiXmlString& operator += (const char * suffix) - { - return append(suffix, static_cast( strlen(suffix) )); - } - - // += operator. Maps to append - TiXmlString& operator += (char single) - { - return append(&single, 1); - } - - // += operator. Maps to append - TiXmlString& operator += (const TiXmlString & suffix) - { - return append(suffix.data(), suffix.length()); - } - - - // Convert a TiXmlString into a null-terminated char * - const char * c_str () const { return rep_->str; } - - // Convert a TiXmlString into a char * (need not be null terminated). - const char * data () const { return rep_->str; } - - // Return the length of a TiXmlString - size_type length () const { return rep_->size; } - - // Alias for length() - size_type size () const { return rep_->size; } - - // Checks if a TiXmlString is empty - bool empty () const { return rep_->size == 0; } - - // Return capacity of string - size_type capacity () const { return rep_->capacity; } - - - // single char extraction - const char& at (size_type index) const - { - assert( index < length() ); - return rep_->str[ index ]; - } - - // [] operator - char& operator [] (size_type index) const - { - assert( index < length() ); - return rep_->str[ index ]; - } - - // find a char in a string. Return TiXmlString::npos if not found - size_type find (char lookup) const - { - return find(lookup, 0); - } - - // find a char in a string from an offset. Return TiXmlString::npos if not found - size_type find (char tofind, size_type offset) const - { - if (offset >= length()) return npos; - - for (const char* p = c_str() + offset; *p != '\0'; ++p) - { - if (*p == tofind) return static_cast< size_type >( p - c_str() ); - } - return npos; - } - - void clear () - { - //Lee: - //The original was just too strange, though correct: - // TiXmlString().swap(*this); - //Instead use the quit & re-init: - quit(); - init(0,0); - } - - /* Function to reserve a big amount of data when we know we'll need it. Be aware that this - function DOES NOT clear the content of the TiXmlString if any exists. - */ - void reserve (size_type cap); - - TiXmlString& assign (const char* str, size_type len); - - TiXmlString& append (const char* str, size_type len); - - void swap (TiXmlString& other) - { - Rep* r = rep_; - rep_ = other.rep_; - other.rep_ = r; - } - - private: - - void init(size_type sz) { init(sz, sz); } - void set_size(size_type sz) { rep_->str[ rep_->size = sz ] = '\0'; } - char* start() const { return rep_->str; } - char* finish() const { return rep_->str + rep_->size; } - - struct Rep - { - size_type size, capacity; - char str[1]; - }; - - void init(size_type sz, size_type cap) - { - if (cap) - { - // Lee: the original form: - // rep_ = static_cast(operator new(sizeof(Rep) + cap)); - // doesn't work in some cases of new being overloaded. Switching - // to the normal allocation, although use an 'int' for systems - // that are overly picky about structure alignment. - const size_type bytesNeeded = sizeof(Rep) + cap; - const size_type intsNeeded = ( bytesNeeded + sizeof(int) - 1 ) / sizeof( int ); - rep_ = reinterpret_cast( new int[ intsNeeded ] ); - - rep_->str[ rep_->size = sz ] = '\0'; - rep_->capacity = cap; - } - else - { - rep_ = &nullrep_; - } - } - - void quit() - { - if (rep_ != &nullrep_) - { - // The rep_ is really an array of ints. (see the allocator, above). - // Cast it back before delete, so the compiler won't incorrectly call destructors. - delete [] ( reinterpret_cast( rep_ ) ); - } - } - - Rep * rep_; - static Rep nullrep_; - -} ; - - -inline bool operator == (const TiXmlString & a, const TiXmlString & b) -{ - return ( a.length() == b.length() ) // optimization on some platforms - && ( strcmp(a.c_str(), b.c_str()) == 0 ); // actual compare -} -inline bool operator < (const TiXmlString & a, const TiXmlString & b) -{ - return strcmp(a.c_str(), b.c_str()) < 0; -} - -inline bool operator != (const TiXmlString & a, const TiXmlString & b) { return !(a == b); } -inline bool operator > (const TiXmlString & a, const TiXmlString & b) { return b < a; } -inline bool operator <= (const TiXmlString & a, const TiXmlString & b) { return !(b < a); } -inline bool operator >= (const TiXmlString & a, const TiXmlString & b) { return !(a < b); } - -inline bool operator == (const TiXmlString & a, const char* b) { return strcmp(a.c_str(), b) == 0; } -inline bool operator == (const char* a, const TiXmlString & b) { return b == a; } -inline bool operator != (const TiXmlString & a, const char* b) { return !(a == b); } -inline bool operator != (const char* a, const TiXmlString & b) { return !(b == a); } - -TiXmlString operator + (const TiXmlString & a, const TiXmlString & b); -TiXmlString operator + (const TiXmlString & a, const char* b); -TiXmlString operator + (const char* a, const TiXmlString & b); - - -/* - TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString. - Only the operators that we need for TinyXML have been developped. -*/ -class TiXmlOutStream : public TiXmlString -{ -public : - - // TiXmlOutStream << operator. - TiXmlOutStream & operator << (const TiXmlString & in) - { - *this += in; - return *this; - } - - // TiXmlOutStream << operator. - TiXmlOutStream & operator << (const char * in) - { - *this += in; - return *this; - } - -} ; - -#endif // TIXML_STRING_INCLUDED -#endif // TIXML_USE_STL +/* +www.sourceforge.net/projects/tinyxml + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + + +#ifndef TIXML_USE_STL + +#ifndef TIXML_STRING_INCLUDED +#define TIXML_STRING_INCLUDED + +#include +#include + +/* The support for explicit isn't that universal, and it isn't really + required - it is used to check that the TiXmlString class isn't incorrectly + used. Be nice to old compilers and macro it here: +*/ +#if defined(_MSC_VER) && (_MSC_VER >= 1200 ) + // Microsoft visual studio, version 6 and higher. + #define TIXML_EXPLICIT explicit +#elif defined(__GNUC__) && (__GNUC__ >= 3 ) + // GCC version 3 and higher.s + #define TIXML_EXPLICIT explicit +#else + #define TIXML_EXPLICIT +#endif + + +/* + TiXmlString is an emulation of a subset of the std::string template. + Its purpose is to allow compiling TinyXML on compilers with no or poor STL support. + Only the member functions relevant to the TinyXML project have been implemented. + The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase + a string and there's no more room, we allocate a buffer twice as big as we need. +*/ +class TiXmlString +{ + public : + // The size type used + typedef size_t size_type; + + // Error value for find primitive + static const size_type npos; // = -1; + + + // TiXmlString empty constructor + TiXmlString () : rep_(&nullrep_) + { + } + + // TiXmlString copy constructor + TiXmlString ( const TiXmlString & copy) : rep_(0) + { + init(copy.length()); + memcpy(start(), copy.data(), length()); + } + + // TiXmlString constructor, based on a string + TIXML_EXPLICIT TiXmlString ( const char * copy) : rep_(0) + { + init( static_cast( strlen(copy) )); + memcpy(start(), copy, length()); + } + + // TiXmlString constructor, based on a string + TIXML_EXPLICIT TiXmlString ( const char * str, size_type len) : rep_(0) + { + init(len); + memcpy(start(), str, len); + } + + // TiXmlString destructor + ~TiXmlString () + { + quit(); + } + + TiXmlString& operator = (const char * copy) + { + return assign( copy, (size_type)strlen(copy)); + } + + TiXmlString& operator = (const TiXmlString & copy) + { + return assign(copy.start(), copy.length()); + } + + + // += operator. Maps to append + TiXmlString& operator += (const char * suffix) + { + return append(suffix, static_cast( strlen(suffix) )); + } + + // += operator. Maps to append + TiXmlString& operator += (char single) + { + return append(&single, 1); + } + + // += operator. Maps to append + TiXmlString& operator += (const TiXmlString & suffix) + { + return append(suffix.data(), suffix.length()); + } + + + // Convert a TiXmlString into a null-terminated char * + const char * c_str () const { return rep_->str; } + + // Convert a TiXmlString into a char * (need not be null terminated). + const char * data () const { return rep_->str; } + + // Return the length of a TiXmlString + size_type length () const { return rep_->size; } + + // Alias for length() + size_type size () const { return rep_->size; } + + // Checks if a TiXmlString is empty + bool empty () const { return rep_->size == 0; } + + // Return capacity of string + size_type capacity () const { return rep_->capacity; } + + + // single char extraction + const char& at (size_type index) const + { + assert( index < length() ); + return rep_->str[ index ]; + } + + // [] operator + char& operator [] (size_type index) const + { + assert( index < length() ); + return rep_->str[ index ]; + } + + // find a char in a string. Return TiXmlString::npos if not found + size_type find (char lookup) const + { + return find(lookup, 0); + } + + // find a char in a string from an offset. Return TiXmlString::npos if not found + size_type find (char tofind, size_type offset) const + { + if (offset >= length()) return npos; + + for (const char* p = c_str() + offset; *p != '\0'; ++p) + { + if (*p == tofind) return static_cast< size_type >( p - c_str() ); + } + return npos; + } + + void clear () + { + //Lee: + //The original was just too strange, though correct: + // TiXmlString().swap(*this); + //Instead use the quit & re-init: + quit(); + init(0,0); + } + + /* Function to reserve a big amount of data when we know we'll need it. Be aware that this + function DOES NOT clear the content of the TiXmlString if any exists. + */ + void reserve (size_type cap); + + TiXmlString& assign (const char* str, size_type len); + + TiXmlString& append (const char* str, size_type len); + + void swap (TiXmlString& other) + { + Rep* r = rep_; + rep_ = other.rep_; + other.rep_ = r; + } + + private: + + void init(size_type sz) { init(sz, sz); } + void set_size(size_type sz) { rep_->str[ rep_->size = sz ] = '\0'; } + char* start() const { return rep_->str; } + char* finish() const { return rep_->str + rep_->size; } + + struct Rep + { + size_type size, capacity; + char str[1]; + }; + + void init(size_type sz, size_type cap) + { + if (cap) + { + // Lee: the original form: + // rep_ = static_cast(operator new(sizeof(Rep) + cap)); + // doesn't work in some cases of new being overloaded. Switching + // to the normal allocation, although use an 'int' for systems + // that are overly picky about structure alignment. + const size_type bytesNeeded = sizeof(Rep) + cap; + const size_type intsNeeded = ( bytesNeeded + sizeof(int) - 1 ) / sizeof( int ); + rep_ = reinterpret_cast( new int[ intsNeeded ] ); + + rep_->str[ rep_->size = sz ] = '\0'; + rep_->capacity = cap; + } + else + { + rep_ = &nullrep_; + } + } + + void quit() + { + if (rep_ != &nullrep_) + { + // The rep_ is really an array of ints. (see the allocator, above). + // Cast it back before delete, so the compiler won't incorrectly call destructors. + delete [] ( reinterpret_cast( rep_ ) ); + } + } + + Rep * rep_; + static Rep nullrep_; + +} ; + + +inline bool operator == (const TiXmlString & a, const TiXmlString & b) +{ + return ( a.length() == b.length() ) // optimization on some platforms + && ( strcmp(a.c_str(), b.c_str()) == 0 ); // actual compare +} +inline bool operator < (const TiXmlString & a, const TiXmlString & b) +{ + return strcmp(a.c_str(), b.c_str()) < 0; +} + +inline bool operator != (const TiXmlString & a, const TiXmlString & b) { return !(a == b); } +inline bool operator > (const TiXmlString & a, const TiXmlString & b) { return b < a; } +inline bool operator <= (const TiXmlString & a, const TiXmlString & b) { return !(b < a); } +inline bool operator >= (const TiXmlString & a, const TiXmlString & b) { return !(a < b); } + +inline bool operator == (const TiXmlString & a, const char* b) { return strcmp(a.c_str(), b) == 0; } +inline bool operator == (const char* a, const TiXmlString & b) { return b == a; } +inline bool operator != (const TiXmlString & a, const char* b) { return !(a == b); } +inline bool operator != (const char* a, const TiXmlString & b) { return !(b == a); } + +TiXmlString operator + (const TiXmlString & a, const TiXmlString & b); +TiXmlString operator + (const TiXmlString & a, const char* b); +TiXmlString operator + (const char* a, const TiXmlString & b); + + +/* + TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString. + Only the operators that we need for TinyXML have been developped. +*/ +class TiXmlOutStream : public TiXmlString +{ +public : + + // TiXmlOutStream << operator. + TiXmlOutStream & operator << (const TiXmlString & in) + { + *this += in; + return *this; + } + + // TiXmlOutStream << operator. + TiXmlOutStream & operator << (const char * in) + { + *this += in; + return *this; + } + +} ; + +#endif // TIXML_STRING_INCLUDED +#endif // TIXML_USE_STL diff --git a/include/thirdparty/tinyxml/tinyxml.h b/include/thirdparty/tinyxml/tinyxml.h index a3589e5..d051548 100644 --- a/include/thirdparty/tinyxml/tinyxml.h +++ b/include/thirdparty/tinyxml/tinyxml.h @@ -1,1805 +1,1805 @@ -/* -www.sourceforge.net/projects/tinyxml -Original code by Lee Thomason (www.grinninglizard.com) - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any -damages arising from the use of this software. - -Permission is granted to anyone to use this software for any -purpose, including commercial applications, and to alter it and -redistribute it freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must -not claim that you wrote the original software. If you use this -software in a product, an acknowledgment in the product documentation -would be appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and -must not be misrepresented as being the original software. - -3. This notice may not be removed or altered from any source -distribution. -*/ - - -#ifndef TINYXML_INCLUDED -#define TINYXML_INCLUDED - -#ifdef _MSC_VER -#pragma warning( push ) -#pragma warning( disable : 4530 ) -#pragma warning( disable : 4786 ) -#endif - -#include -#include -#include -#include -#include - -// Help out windows: -#if defined( _DEBUG ) && !defined( DEBUG ) -#define DEBUG -#endif - -#ifdef TIXML_USE_STL - #include - #include - #include - #define TIXML_STRING std::string -#else - #include "tinystr.h" - #define TIXML_STRING TiXmlString -#endif - -// Deprecated library function hell. Compilers want to use the -// new safe versions. This probably doesn't fully address the problem, -// but it gets closer. There are too many compilers for me to fully -// test. If you get compilation troubles, undefine TIXML_SAFE -#define TIXML_SAFE - -#ifdef TIXML_SAFE - #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) - // Microsoft visual studio, version 2005 and higher. - #define TIXML_SNPRINTF _snprintf_s - #define TIXML_SSCANF sscanf_s - #elif defined(_MSC_VER) && (_MSC_VER >= 1200 ) - // Microsoft visual studio, version 6 and higher. - //#pragma message( "Using _sn* functions." ) - #define TIXML_SNPRINTF _snprintf - #define TIXML_SSCANF sscanf - #elif defined(__GNUC__) && (__GNUC__ >= 3 ) - // GCC version 3 and higher.s - //#warning( "Using sn* functions." ) - #define TIXML_SNPRINTF snprintf - #define TIXML_SSCANF sscanf - #else - #define TIXML_SNPRINTF snprintf - #define TIXML_SSCANF sscanf - #endif -#endif - -class TiXmlDocument; -class TiXmlElement; -class TiXmlComment; -class TiXmlUnknown; -class TiXmlAttribute; -class TiXmlText; -class TiXmlDeclaration; -class TiXmlParsingData; - -const int TIXML_MAJOR_VERSION = 2; -const int TIXML_MINOR_VERSION = 6; -const int TIXML_PATCH_VERSION = 2; - -/* Internal structure for tracking location of items - in the XML file. -*/ -struct TiXmlCursor -{ - TiXmlCursor() { Clear(); } - void Clear() { row = col = -1; } - - int row; // 0 based. - int col; // 0 based. -}; - - -/** - Implements the interface to the "Visitor pattern" (see the Accept() method.) - If you call the Accept() method, it requires being passed a TiXmlVisitor - class to handle callbacks. For nodes that contain other nodes (Document, Element) - you will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves - are simply called with Visit(). - - If you return 'true' from a Visit method, recursive parsing will continue. If you return - false, no children of this node or its sibilings will be Visited. - - All flavors of Visit methods have a default implementation that returns 'true' (continue - visiting). You need to only override methods that are interesting to you. - - Generally Accept() is called on the TiXmlDocument, although all nodes suppert Visiting. - - You should never change the document from a callback. - - @sa TiXmlNode::Accept() -*/ -class TiXmlVisitor -{ -public: - virtual ~TiXmlVisitor() {} - - /// Visit a document. - virtual bool VisitEnter( const TiXmlDocument& /*doc*/ ) { return true; } - /// Visit a document. - virtual bool VisitExit( const TiXmlDocument& /*doc*/ ) { return true; } - - /// Visit an element. - virtual bool VisitEnter( const TiXmlElement& /*element*/, const TiXmlAttribute* /*firstAttribute*/ ) { return true; } - /// Visit an element. - virtual bool VisitExit( const TiXmlElement& /*element*/ ) { return true; } - - /// Visit a declaration - virtual bool Visit( const TiXmlDeclaration& /*declaration*/ ) { return true; } - /// Visit a text node - virtual bool Visit( const TiXmlText& /*text*/ ) { return true; } - /// Visit a comment node - virtual bool Visit( const TiXmlComment& /*comment*/ ) { return true; } - /// Visit an unknown node - virtual bool Visit( const TiXmlUnknown& /*unknown*/ ) { return true; } -}; - -// Only used by Attribute::Query functions -enum -{ - TIXML_SUCCESS, - TIXML_NO_ATTRIBUTE, - TIXML_WRONG_TYPE -}; - - -// Used by the parsing routines. -enum TiXmlEncoding -{ - TIXML_ENCODING_UNKNOWN, - TIXML_ENCODING_UTF8, - TIXML_ENCODING_LEGACY -}; - -const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN; - -/** TiXmlBase is a base class for every class in TinyXml. - It does little except to establish that TinyXml classes - can be printed and provide some utility functions. - - In XML, the document and elements can contain - other elements and other types of nodes. - - @verbatim - A Document can contain: Element (container or leaf) - Comment (leaf) - Unknown (leaf) - Declaration( leaf ) - - An Element can contain: Element (container or leaf) - Text (leaf) - Attributes (not on tree) - Comment (leaf) - Unknown (leaf) - - A Decleration contains: Attributes (not on tree) - @endverbatim -*/ -class TiXmlBase -{ - friend class TiXmlNode; - friend class TiXmlElement; - friend class TiXmlDocument; - -public: - TiXmlBase() : userData(0) {} - virtual ~TiXmlBase() {} - - /** All TinyXml classes can print themselves to a filestream - or the string class (TiXmlString in non-STL mode, std::string - in STL mode.) Either or both cfile and str can be null. - - This is a formatted print, and will insert - tabs and newlines. - - (For an unformatted stream, use the << operator.) - */ - virtual void Print( FILE* cfile, int depth ) const = 0; - - /** The world does not agree on whether white space should be kept or - not. In order to make everyone happy, these global, static functions - are provided to set whether or not TinyXml will condense all white space - into a single space or not. The default is to condense. Note changing this - value is not thread safe. - */ - static void SetCondenseWhiteSpace( bool condense ) { condenseWhiteSpace = condense; } - - /// Return the current white space setting. - static bool IsWhiteSpaceCondensed() { return condenseWhiteSpace; } - - /** Return the position, in the original source file, of this node or attribute. - The row and column are 1-based. (That is the first row and first column is - 1,1). If the returns values are 0 or less, then the parser does not have - a row and column value. - - Generally, the row and column value will be set when the TiXmlDocument::Load(), - TiXmlDocument::LoadFile(), or any TiXmlNode::Parse() is called. It will NOT be set - when the DOM was created from operator>>. - - The values reflect the initial load. Once the DOM is modified programmatically - (by adding or changing nodes and attributes) the new values will NOT update to - reflect changes in the document. - - There is a minor performance cost to computing the row and column. Computation - can be disabled if TiXmlDocument::SetTabSize() is called with 0 as the value. - - @sa TiXmlDocument::SetTabSize() - */ - int Row() const { return location.row + 1; } - int Column() const { return location.col + 1; } ///< See Row() - - void SetUserData( void* user ) { userData = user; } ///< Set a pointer to arbitrary user data. - void* GetUserData() { return userData; } ///< Get a pointer to arbitrary user data. - const void* GetUserData() const { return userData; } ///< Get a pointer to arbitrary user data. - - // Table that returs, for a given lead byte, the total number of bytes - // in the UTF-8 sequence. - static const int utf8ByteTable[256]; - - virtual const char* Parse( const char* p, - TiXmlParsingData* data, - TiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0; - - /** Expands entities in a string. Note this should not contian the tag's '<', '>', etc, - or they will be transformed into entities! - */ - static void EncodeString( const TIXML_STRING& str, TIXML_STRING* out ); - - enum - { - TIXML_NO_ERROR = 0, - TIXML_ERROR, - TIXML_ERROR_OPENING_FILE, - TIXML_ERROR_PARSING_ELEMENT, - TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, - TIXML_ERROR_READING_ELEMENT_VALUE, - TIXML_ERROR_READING_ATTRIBUTES, - TIXML_ERROR_PARSING_EMPTY, - TIXML_ERROR_READING_END_TAG, - TIXML_ERROR_PARSING_UNKNOWN, - TIXML_ERROR_PARSING_COMMENT, - TIXML_ERROR_PARSING_DECLARATION, - TIXML_ERROR_DOCUMENT_EMPTY, - TIXML_ERROR_EMBEDDED_NULL, - TIXML_ERROR_PARSING_CDATA, - TIXML_ERROR_DOCUMENT_TOP_ONLY, - - TIXML_ERROR_STRING_COUNT - }; - -protected: - - static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding ); - - inline static bool IsWhiteSpace( char c ) - { - return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); - } - inline static bool IsWhiteSpace( int c ) - { - if ( c < 256 ) - return IsWhiteSpace( (char) c ); - return false; // Again, only truly correct for English/Latin...but usually works. - } - - #ifdef TIXML_USE_STL - static bool StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ); - static bool StreamTo( std::istream * in, int character, TIXML_STRING * tag ); - #endif - - /* Reads an XML name into the string provided. Returns - a pointer just past the last character of the name, - or 0 if the function has an error. - */ - static const char* ReadName( const char* p, TIXML_STRING* name, TiXmlEncoding encoding ); - - /* Reads text. Returns a pointer past the given end tag. - Wickedly complex options, but it keeps the (sensitive) code in one place. - */ - static const char* ReadText( const char* in, // where to start - TIXML_STRING* text, // the string read - bool ignoreWhiteSpace, // whether to keep the white space - const char* endTag, // what ends this text - bool ignoreCase, // whether to ignore case in the end tag - TiXmlEncoding encoding ); // the current encoding - - // If an entity has been found, transform it into a character. - static const char* GetEntity( const char* in, char* value, int* length, TiXmlEncoding encoding ); - - // Get a character, while interpreting entities. - // The length can be from 0 to 4 bytes. - inline static const char* GetChar( const char* p, char* _value, int* length, TiXmlEncoding encoding ) - { - assert( p ); - if ( encoding == TIXML_ENCODING_UTF8 ) - { - *length = utf8ByteTable[ *((const unsigned char*)p) ]; - assert( *length >= 0 && *length < 5 ); - } - else - { - *length = 1; - } - - if ( *length == 1 ) - { - if ( *p == '&' ) - return GetEntity( p, _value, length, encoding ); - *_value = *p; - return p+1; - } - else if ( *length ) - { - //strncpy( _value, p, *length ); // lots of compilers don't like this function (unsafe), - // and the null terminator isn't needed - for( int i=0; p[i] && i<*length; ++i ) { - _value[i] = p[i]; - } - return p + (*length); - } - else - { - // Not valid text. - return 0; - } - } - - // Return true if the next characters in the stream are any of the endTag sequences. - // Ignore case only works for english, and should only be relied on when comparing - // to English words: StringEqual( p, "version", true ) is fine. - static bool StringEqual( const char* p, - const char* endTag, - bool ignoreCase, - TiXmlEncoding encoding ); - - static const char* errorString[ TIXML_ERROR_STRING_COUNT ]; - - TiXmlCursor location; - - /// Field containing a generic user pointer - void* userData; - - // None of these methods are reliable for any language except English. - // Good for approximation, not great for accuracy. - static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding ); - static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding ); - inline static int ToLower( int v, TiXmlEncoding encoding ) - { - if ( encoding == TIXML_ENCODING_UTF8 ) - { - if ( v < 128 ) return tolower( v ); - return v; - } - else - { - return tolower( v ); - } - } - static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ); - -private: - TiXmlBase( const TiXmlBase& ); // not implemented. - void operator=( const TiXmlBase& base ); // not allowed. - - struct Entity - { - const char* str; - unsigned int strLength; - char chr; - }; - enum - { - NUM_ENTITY = 5, - MAX_ENTITY_LENGTH = 6 - - }; - static Entity entity[ NUM_ENTITY ]; - static bool condenseWhiteSpace; -}; - - -/** The parent class for everything in the Document Object Model. - (Except for attributes). - Nodes have siblings, a parent, and children. A node can be - in a document, or stand on its own. The type of a TiXmlNode - can be queried, and it can be cast to its more defined type. -*/ -class TiXmlNode : public TiXmlBase -{ - friend class TiXmlDocument; - friend class TiXmlElement; - -public: - #ifdef TIXML_USE_STL - - /** An input stream operator, for every class. Tolerant of newlines and - formatting, but doesn't expect them. - */ - friend std::istream& operator >> (std::istream& in, TiXmlNode& base); - - /** An output stream operator, for every class. Note that this outputs - without any newlines or formatting, as opposed to Print(), which - includes tabs and new lines. - - The operator<< and operator>> are not completely symmetric. Writing - a node to a stream is very well defined. You'll get a nice stream - of output, without any extra whitespace or newlines. - - But reading is not as well defined. (As it always is.) If you create - a TiXmlElement (for example) and read that from an input stream, - the text needs to define an element or junk will result. This is - true of all input streams, but it's worth keeping in mind. - - A TiXmlDocument will read nodes until it reads a root element, and - all the children of that root element. - */ - friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base); - - /// Appends the XML node or attribute to a std::string. - friend std::string& operator<< (std::string& out, const TiXmlNode& base ); - - #endif - - /** The types of XML nodes supported by TinyXml. (All the - unsupported types are picked up by UNKNOWN.) - */ - enum NodeType - { - TINYXML_DOCUMENT, - TINYXML_ELEMENT, - TINYXML_COMMENT, - TINYXML_UNKNOWN, - TINYXML_TEXT, - TINYXML_DECLARATION, - TINYXML_TYPECOUNT - }; - - virtual ~TiXmlNode(); - - /** The meaning of 'value' changes for the specific type of - TiXmlNode. - @verbatim - Document: filename of the xml file - Element: name of the element - Comment: the comment text - Unknown: the tag contents - Text: the text string - @endverbatim - - The subclasses will wrap this function. - */ - const char *Value() const { return value.c_str (); } - - #ifdef TIXML_USE_STL - /** Return Value() as a std::string. If you only use STL, - this is more efficient than calling Value(). - Only available in STL mode. - */ - const std::string& ValueStr() const { return value; } - #endif - - const TIXML_STRING& ValueTStr() const { return value; } - - /** Changes the value of the node. Defined as: - @verbatim - Document: filename of the xml file - Element: name of the element - Comment: the comment text - Unknown: the tag contents - Text: the text string - @endverbatim - */ - void SetValue(const char * _value) { value = _value;} - - #ifdef TIXML_USE_STL - /// STL std::string form. - void SetValue( const std::string& _value ) { value = _value; } - #endif - - /// Delete all the children of this node. Does not affect 'this'. - void Clear(); - - /// One step up the DOM. - TiXmlNode* Parent() { return parent; } - const TiXmlNode* Parent() const { return parent; } - - const TiXmlNode* FirstChild() const { return firstChild; } ///< The first child of this node. Will be null if there are no children. - TiXmlNode* FirstChild() { return firstChild; } - const TiXmlNode* FirstChild( const char * value ) const; ///< The first child of this node with the matching 'value'. Will be null if none found. - /// The first child of this node with the matching 'value'. Will be null if none found. - TiXmlNode* FirstChild( const char * _value ) { - // Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe) - // call the method, cast the return back to non-const. - return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->FirstChild( _value )); - } - const TiXmlNode* LastChild() const { return lastChild; } /// The last child of this node. Will be null if there are no children. - TiXmlNode* LastChild() { return lastChild; } - - const TiXmlNode* LastChild( const char * value ) const; /// The last child of this node matching 'value'. Will be null if there are no children. - TiXmlNode* LastChild( const char * _value ) { - return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value )); - } - - #ifdef TIXML_USE_STL - const TiXmlNode* FirstChild( const std::string& _value ) const { return FirstChild (_value.c_str ()); } ///< STL std::string form. - TiXmlNode* FirstChild( const std::string& _value ) { return FirstChild (_value.c_str ()); } ///< STL std::string form. - const TiXmlNode* LastChild( const std::string& _value ) const { return LastChild (_value.c_str ()); } ///< STL std::string form. - TiXmlNode* LastChild( const std::string& _value ) { return LastChild (_value.c_str ()); } ///< STL std::string form. - #endif - - /** An alternate way to walk the children of a node. - One way to iterate over nodes is: - @verbatim - for( child = parent->FirstChild(); child; child = child->NextSibling() ) - @endverbatim - - IterateChildren does the same thing with the syntax: - @verbatim - child = 0; - while( child = parent->IterateChildren( child ) ) - @endverbatim - - IterateChildren takes the previous child as input and finds - the next one. If the previous child is null, it returns the - first. IterateChildren will return null when done. - */ - const TiXmlNode* IterateChildren( const TiXmlNode* previous ) const; - TiXmlNode* IterateChildren( const TiXmlNode* previous ) { - return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( previous ) ); - } - - /// This flavor of IterateChildren searches for children with a particular 'value' - const TiXmlNode* IterateChildren( const char * value, const TiXmlNode* previous ) const; - TiXmlNode* IterateChildren( const char * _value, const TiXmlNode* previous ) { - return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( _value, previous ) ); - } - - #ifdef TIXML_USE_STL - const TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) const { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. - TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. - #endif - - /** Add a new node related to this. Adds a child past the LastChild. - Returns a pointer to the new object or NULL if an error occured. - */ - TiXmlNode* InsertEndChild( const TiXmlNode& addThis ); - - - /** Add a new node related to this. Adds a child past the LastChild. - - NOTE: the node to be added is passed by pointer, and will be - henceforth owned (and deleted) by tinyXml. This method is efficient - and avoids an extra copy, but should be used with care as it - uses a different memory model than the other insert functions. - - @sa InsertEndChild - */ - TiXmlNode* LinkEndChild( TiXmlNode* addThis ); - - /** Add a new node related to this. Adds a child before the specified child. - Returns a pointer to the new object or NULL if an error occured. - */ - TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ); - - /** Add a new node related to this. Adds a child after the specified child. - Returns a pointer to the new object or NULL if an error occured. - */ - TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ); - - /** Replace a child of this node. - Returns a pointer to the new object or NULL if an error occured. - */ - TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ); - - /// Delete a child of this node. - bool RemoveChild( TiXmlNode* removeThis ); - - /// Navigate to a sibling node. - const TiXmlNode* PreviousSibling() const { return prev; } - TiXmlNode* PreviousSibling() { return prev; } - - /// Navigate to a sibling node. - const TiXmlNode* PreviousSibling( const char * ) const; - TiXmlNode* PreviousSibling( const char *_prev ) { - return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->PreviousSibling( _prev ) ); - } - - #ifdef TIXML_USE_STL - const TiXmlNode* PreviousSibling( const std::string& _value ) const { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. - TiXmlNode* PreviousSibling( const std::string& _value ) { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. - const TiXmlNode* NextSibling( const std::string& _value) const { return NextSibling (_value.c_str ()); } ///< STL std::string form. - TiXmlNode* NextSibling( const std::string& _value) { return NextSibling (_value.c_str ()); } ///< STL std::string form. - #endif - - /// Navigate to a sibling node. - const TiXmlNode* NextSibling() const { return next; } - TiXmlNode* NextSibling() { return next; } - - /// Navigate to a sibling node with the given 'value'. - const TiXmlNode* NextSibling( const char * ) const; - TiXmlNode* NextSibling( const char* _next ) { - return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->NextSibling( _next ) ); - } - - /** Convenience function to get through elements. - Calls NextSibling and ToElement. Will skip all non-Element - nodes. Returns 0 if there is not another element. - */ - const TiXmlElement* NextSiblingElement() const; - TiXmlElement* NextSiblingElement() { - return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement() ); - } - - /** Convenience function to get through elements. - Calls NextSibling and ToElement. Will skip all non-Element - nodes. Returns 0 if there is not another element. - */ - const TiXmlElement* NextSiblingElement( const char * ) const; - TiXmlElement* NextSiblingElement( const char *_next ) { - return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement( _next ) ); - } - - #ifdef TIXML_USE_STL - const TiXmlElement* NextSiblingElement( const std::string& _value) const { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. - TiXmlElement* NextSiblingElement( const std::string& _value) { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. - #endif - - /// Convenience function to get through elements. - const TiXmlElement* FirstChildElement() const; - TiXmlElement* FirstChildElement() { - return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement() ); - } - - /// Convenience function to get through elements. - const TiXmlElement* FirstChildElement( const char * _value ) const; - TiXmlElement* FirstChildElement( const char * _value ) { - return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement( _value ) ); - } - - #ifdef TIXML_USE_STL - const TiXmlElement* FirstChildElement( const std::string& _value ) const { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. - TiXmlElement* FirstChildElement( const std::string& _value ) { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. - #endif - - /** Query the type (as an enumerated value, above) of this node. - The possible types are: TINYXML_DOCUMENT, TINYXML_ELEMENT, TINYXML_COMMENT, - TINYXML_UNKNOWN, TINYXML_TEXT, and TINYXML_DECLARATION. - */ - int Type() const { return type; } - - /** Return a pointer to the Document this node lives in. - Returns null if not in a document. - */ - const TiXmlDocument* GetDocument() const; - TiXmlDocument* GetDocument() { - return const_cast< TiXmlDocument* >( (const_cast< const TiXmlNode* >(this))->GetDocument() ); - } - - /// Returns true if this node has no children. - bool NoChildren() const { return !firstChild; } - - virtual const TiXmlDocument* ToDocument() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlElement* ToElement() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlComment* ToComment() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlUnknown* ToUnknown() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlText* ToText() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual const TiXmlDeclaration* ToDeclaration() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - - virtual TiXmlDocument* ToDocument() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlElement* ToElement() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlComment* ToComment() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlUnknown* ToUnknown() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlText* ToText() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - virtual TiXmlDeclaration* ToDeclaration() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. - - /** Create an exact duplicate of this node and return it. The memory must be deleted - by the caller. - */ - virtual TiXmlNode* Clone() const = 0; - - /** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the - XML tree will be conditionally visited and the host will be called back - via the TiXmlVisitor interface. - - This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse - the XML for the callbacks, so the performance of TinyXML is unchanged by using this - interface versus any other.) - - The interface has been based on ideas from: - - - http://www.saxproject.org/ - - http://c2.com/cgi/wiki?HierarchicalVisitorPattern - - Which are both good references for "visiting". - - An example of using Accept(): - @verbatim - TiXmlPrinter printer; - tinyxmlDoc.Accept( &printer ); - const char* xmlcstr = printer.CStr(); - @endverbatim - */ - virtual bool Accept( TiXmlVisitor* visitor ) const = 0; - -protected: - TiXmlNode( NodeType _type ); - - // Copy to the allocated object. Shared functionality between Clone, Copy constructor, - // and the assignment operator. - void CopyTo( TiXmlNode* target ) const; - - #ifdef TIXML_USE_STL - // The real work of the input operator. - virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0; - #endif - - // Figure out what is at *p, and parse it. Returns null if it is not an xml node. - TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); - - TiXmlNode* parent; - NodeType type; - - TiXmlNode* firstChild; - TiXmlNode* lastChild; - - TIXML_STRING value; - - TiXmlNode* prev; - TiXmlNode* next; - -private: - TiXmlNode( const TiXmlNode& ); // not implemented. - void operator=( const TiXmlNode& base ); // not allowed. -}; - - -/** An attribute is a name-value pair. Elements have an arbitrary - number of attributes, each with a unique name. - - @note The attributes are not TiXmlNodes, since they are not - part of the tinyXML document object model. There are other - suggested ways to look at this problem. -*/ -class TiXmlAttribute : public TiXmlBase -{ - friend class TiXmlAttributeSet; - -public: - /// Construct an empty attribute. - TiXmlAttribute() : TiXmlBase() - { - document = 0; - prev = next = 0; - } - - #ifdef TIXML_USE_STL - /// std::string constructor. - TiXmlAttribute( const std::string& _name, const std::string& _value ) - { - name = _name; - value = _value; - document = 0; - prev = next = 0; - } - #endif - - /// Construct an attribute with a name and value. - TiXmlAttribute( const char * _name, const char * _value ) - { - name = _name; - value = _value; - document = 0; - prev = next = 0; - } - - const char* Name() const { return name.c_str(); } ///< Return the name of this attribute. - const char* Value() const { return value.c_str(); } ///< Return the value of this attribute. - #ifdef TIXML_USE_STL - const std::string& ValueStr() const { return value; } ///< Return the value of this attribute. - #endif - int IntValue() const; ///< Return the value of this attribute, converted to an integer. - double DoubleValue() const; ///< Return the value of this attribute, converted to a double. - - // Get the tinyxml string representation - const TIXML_STRING& NameTStr() const { return name; } - - /** QueryIntValue examines the value string. It is an alternative to the - IntValue() method with richer error checking. - If the value is an integer, it is stored in 'value' and - the call returns TIXML_SUCCESS. If it is not - an integer, it returns TIXML_WRONG_TYPE. - - A specialized but useful call. Note that for success it returns 0, - which is the opposite of almost all other TinyXml calls. - */ - int QueryIntValue( int* _value ) const; - /// QueryDoubleValue examines the value string. See QueryIntValue(). - int QueryDoubleValue( double* _value ) const; - - void SetName( const char* _name ) { name = _name; } ///< Set the name of this attribute. - void SetValue( const char* _value ) { value = _value; } ///< Set the value. - - void SetIntValue( int _value ); ///< Set the value from an integer. - void SetDoubleValue( double _value ); ///< Set the value from a double. - - #ifdef TIXML_USE_STL - /// STL std::string form. - void SetName( const std::string& _name ) { name = _name; } - /// STL std::string form. - void SetValue( const std::string& _value ) { value = _value; } - #endif - - /// Get the next sibling attribute in the DOM. Returns null at end. - const TiXmlAttribute* Next() const; - TiXmlAttribute* Next() { - return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() ); - } - - /// Get the previous sibling attribute in the DOM. Returns null at beginning. - const TiXmlAttribute* Previous() const; - TiXmlAttribute* Previous() { - return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() ); - } - - bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; } - bool operator<( const TiXmlAttribute& rhs ) const { return name < rhs.name; } - bool operator>( const TiXmlAttribute& rhs ) const { return name > rhs.name; } - - /* Attribute parsing starts: first letter of the name - returns: the next char after the value end quote - */ - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - // Prints this Attribute to a FILE stream. - virtual void Print( FILE* cfile, int depth ) const { - Print( cfile, depth, 0 ); - } - void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; - - // [internal use] - // Set the document pointer so the attribute can report errors. - void SetDocument( TiXmlDocument* doc ) { document = doc; } - -private: - TiXmlAttribute( const TiXmlAttribute& ); // not implemented. - void operator=( const TiXmlAttribute& base ); // not allowed. - - TiXmlDocument* document; // A pointer back to a document, for error reporting. - TIXML_STRING name; - TIXML_STRING value; - TiXmlAttribute* prev; - TiXmlAttribute* next; -}; - - -/* A class used to manage a group of attributes. - It is only used internally, both by the ELEMENT and the DECLARATION. - - The set can be changed transparent to the Element and Declaration - classes that use it, but NOT transparent to the Attribute - which has to implement a next() and previous() method. Which makes - it a bit problematic and prevents the use of STL. - - This version is implemented with circular lists because: - - I like circular lists - - it demonstrates some independence from the (typical) doubly linked list. -*/ -class TiXmlAttributeSet -{ -public: - TiXmlAttributeSet(); - ~TiXmlAttributeSet(); - - void Add( TiXmlAttribute* attribute ); - void Remove( TiXmlAttribute* attribute ); - - const TiXmlAttribute* First() const { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } - TiXmlAttribute* First() { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } - const TiXmlAttribute* Last() const { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } - TiXmlAttribute* Last() { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } - - TiXmlAttribute* Find( const char* _name ) const; - TiXmlAttribute* FindOrCreate( const char* _name ); - -# ifdef TIXML_USE_STL - TiXmlAttribute* Find( const std::string& _name ) const; - TiXmlAttribute* FindOrCreate( const std::string& _name ); -# endif - - -private: - //*ME: Because of hidden/disabled copy-construktor in TiXmlAttribute (sentinel-element), - //*ME: this class must be also use a hidden/disabled copy-constructor !!! - TiXmlAttributeSet( const TiXmlAttributeSet& ); // not allowed - void operator=( const TiXmlAttributeSet& ); // not allowed (as TiXmlAttribute) - - TiXmlAttribute sentinel; -}; - - -/** The element is a container class. It has a value, the element name, - and can contain other elements, text, comments, and unknowns. - Elements also contain an arbitrary number of attributes. -*/ -class TiXmlElement : public TiXmlNode -{ -public: - /// Construct an element. - TiXmlElement (const char * in_value); - - #ifdef TIXML_USE_STL - /// std::string constructor. - TiXmlElement( const std::string& _value ); - #endif - - TiXmlElement( const TiXmlElement& ); - - TiXmlElement& operator=( const TiXmlElement& base ); - - virtual ~TiXmlElement(); - - /** Given an attribute name, Attribute() returns the value - for the attribute of that name, or null if none exists. - */ - const char* Attribute( const char* name ) const; - - /** Given an attribute name, Attribute() returns the value - for the attribute of that name, or null if none exists. - If the attribute exists and can be converted to an integer, - the integer value will be put in the return 'i', if 'i' - is non-null. - */ - const char* Attribute( const char* name, int* i ) const; - - /** Given an attribute name, Attribute() returns the value - for the attribute of that name, or null if none exists. - If the attribute exists and can be converted to an double, - the double value will be put in the return 'd', if 'd' - is non-null. - */ - const char* Attribute( const char* name, double* d ) const; - - /** QueryIntAttribute examines the attribute - it is an alternative to the - Attribute() method with richer error checking. - If the attribute is an integer, it is stored in 'value' and - the call returns TIXML_SUCCESS. If it is not - an integer, it returns TIXML_WRONG_TYPE. If the attribute - does not exist, then TIXML_NO_ATTRIBUTE is returned. - */ - int QueryIntAttribute( const char* name, int* _value ) const; - /// QueryUnsignedAttribute examines the attribute - see QueryIntAttribute(). - int QueryUnsignedAttribute( const char* name, unsigned* _value ) const; - /** QueryBoolAttribute examines the attribute - see QueryIntAttribute(). - Note that '1', 'true', or 'yes' are considered true, while '0', 'false' - and 'no' are considered false. - */ - int QueryBoolAttribute( const char* name, bool* _value ) const; - /// QueryDoubleAttribute examines the attribute - see QueryIntAttribute(). - int QueryDoubleAttribute( const char* name, double* _value ) const; - /// QueryFloatAttribute examines the attribute - see QueryIntAttribute(). - int QueryFloatAttribute( const char* name, float* _value ) const { - double d; - int result = QueryDoubleAttribute( name, &d ); - if ( result == TIXML_SUCCESS ) { - *_value = (float)d; - } - return result; - } - - #ifdef TIXML_USE_STL - /// QueryStringAttribute examines the attribute - see QueryIntAttribute(). - int QueryStringAttribute( const char* name, std::string* _value ) const { - const char* cstr = Attribute( name ); - if ( cstr ) { - *_value = std::string( cstr ); - return TIXML_SUCCESS; - } - return TIXML_NO_ATTRIBUTE; - } - - /** Template form of the attribute query which will try to read the - attribute into the specified type. Very easy, very powerful, but - be careful to make sure to call this with the correct type. - - NOTE: This method doesn't work correctly for 'string' types that contain spaces. - - @return TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE - */ - template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const - { - const TiXmlAttribute* node = attributeSet.Find( name ); - if ( !node ) - return TIXML_NO_ATTRIBUTE; - - std::stringstream sstream( node->ValueStr() ); - sstream >> *outValue; - if ( !sstream.fail() ) - return TIXML_SUCCESS; - return TIXML_WRONG_TYPE; - } - - int QueryValueAttribute( const std::string& name, std::string* outValue ) const - { - const TiXmlAttribute* node = attributeSet.Find( name ); - if ( !node ) - return TIXML_NO_ATTRIBUTE; - *outValue = node->ValueStr(); - return TIXML_SUCCESS; - } - #endif - - /** Sets an attribute of name to a given value. The attribute - will be created if it does not exist, or changed if it does. - */ - void SetAttribute( const char* name, const char * _value ); - - #ifdef TIXML_USE_STL - const std::string* Attribute( const std::string& name ) const; - const std::string* Attribute( const std::string& name, int* i ) const; - const std::string* Attribute( const std::string& name, double* d ) const; - int QueryIntAttribute( const std::string& name, int* _value ) const; - int QueryDoubleAttribute( const std::string& name, double* _value ) const; - - /// STL std::string form. - void SetAttribute( const std::string& name, const std::string& _value ); - ///< STL std::string form. - void SetAttribute( const std::string& name, int _value ); - ///< STL std::string form. - void SetDoubleAttribute( const std::string& name, double value ); - #endif - - /** Sets an attribute of name to a given value. The attribute - will be created if it does not exist, or changed if it does. - */ - void SetAttribute( const char * name, int value ); - - /** Sets an attribute of name to a given value. The attribute - will be created if it does not exist, or changed if it does. - */ - void SetDoubleAttribute( const char * name, double value ); - - /** Deletes an attribute with the given name. - */ - void RemoveAttribute( const char * name ); - #ifdef TIXML_USE_STL - void RemoveAttribute( const std::string& name ) { RemoveAttribute (name.c_str ()); } ///< STL std::string form. - #endif - - const TiXmlAttribute* FirstAttribute() const { return attributeSet.First(); } ///< Access the first attribute in this element. - TiXmlAttribute* FirstAttribute() { return attributeSet.First(); } - const TiXmlAttribute* LastAttribute() const { return attributeSet.Last(); } ///< Access the last attribute in this element. - TiXmlAttribute* LastAttribute() { return attributeSet.Last(); } - - /** Convenience function for easy access to the text inside an element. Although easy - and concise, GetText() is limited compared to getting the TiXmlText child - and accessing it directly. - - If the first child of 'this' is a TiXmlText, the GetText() - returns the character string of the Text node, else null is returned. - - This is a convenient method for getting the text of simple contained text: - @verbatim - This is text - const char* str = fooElement->GetText(); - @endverbatim - - 'str' will be a pointer to "This is text". - - Note that this function can be misleading. If the element foo was created from - this XML: - @verbatim - This is text - @endverbatim - - then the value of str would be null. The first child node isn't a text node, it is - another element. From this XML: - @verbatim - This is text - @endverbatim - GetText() will return "This is ". - - WARNING: GetText() accesses a child node - don't become confused with the - similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are - safe type casts on the referenced node. - */ - const char* GetText() const; - - /// Creates a new Element and returns it - the returned element is a copy. - virtual TiXmlNode* Clone() const; - // Print the Element to a FILE stream. - virtual void Print( FILE* cfile, int depth ) const; - - /* Attribtue parsing starts: next char past '<' - returns: next char past '>' - */ - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlElement* ToElement() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlElement* ToElement() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* visitor ) const; - -protected: - - void CopyTo( TiXmlElement* target ) const; - void ClearThis(); // like clear, but initializes 'this' object as well - - // Used to be public [internal use] - #ifdef TIXML_USE_STL - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - #endif - /* [internal use] - Reads the "value" of the element -- another element, or text. - This should terminate with the current end tag. - */ - const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding ); - -private: - TiXmlAttributeSet attributeSet; -}; - - -/** An XML comment. -*/ -class TiXmlComment : public TiXmlNode -{ -public: - /// Constructs an empty comment. - TiXmlComment() : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) {} - /// Construct a comment from text. - TiXmlComment( const char* _value ) : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) { - SetValue( _value ); - } - TiXmlComment( const TiXmlComment& ); - TiXmlComment& operator=( const TiXmlComment& base ); - - virtual ~TiXmlComment() {} - - /// Returns a copy of this Comment. - virtual TiXmlNode* Clone() const; - // Write this Comment to a FILE stream. - virtual void Print( FILE* cfile, int depth ) const; - - /* Attribtue parsing starts: at the ! of the !-- - returns: next char past '>' - */ - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlComment* ToComment() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlComment* ToComment() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* visitor ) const; - -protected: - void CopyTo( TiXmlComment* target ) const; - - // used to be public - #ifdef TIXML_USE_STL - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - #endif -// virtual void StreamOut( TIXML_OSTREAM * out ) const; - -private: - -}; - - -/** XML text. A text node can have 2 ways to output the next. "normal" output - and CDATA. It will default to the mode it was parsed from the XML file and - you generally want to leave it alone, but you can change the output mode with - SetCDATA() and query it with CDATA(). -*/ -class TiXmlText : public TiXmlNode -{ - friend class TiXmlElement; -public: - /** Constructor for text element. By default, it is treated as - normal, encoded text. If you want it be output as a CDATA text - element, set the parameter _cdata to 'true' - */ - TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) - { - SetValue( initValue ); - cdata = false; - } - virtual ~TiXmlText() {} - - #ifdef TIXML_USE_STL - /// Constructor. - TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) - { - SetValue( initValue ); - cdata = false; - } - #endif - - TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TINYXML_TEXT ) { copy.CopyTo( this ); } - TiXmlText& operator=( const TiXmlText& base ) { base.CopyTo( this ); return *this; } - - // Write this text object to a FILE stream. - virtual void Print( FILE* cfile, int depth ) const; - - /// Queries whether this represents text using a CDATA section. - bool CDATA() const { return cdata; } - /// Turns on or off a CDATA representation of text. - void SetCDATA( bool _cdata ) { cdata = _cdata; } - - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlText* ToText() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlText* ToText() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* content ) const; - -protected : - /// [internal use] Creates a new Element and returns it. - virtual TiXmlNode* Clone() const; - void CopyTo( TiXmlText* target ) const; - - bool Blank() const; // returns true if all white space and new lines - // [internal use] - #ifdef TIXML_USE_STL - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - #endif - -private: - bool cdata; // true if this should be input and output as a CDATA style text element -}; - - -/** In correct XML the declaration is the first entry in the file. - @verbatim - - @endverbatim - - TinyXml will happily read or write files without a declaration, - however. There are 3 possible attributes to the declaration: - version, encoding, and standalone. - - Note: In this version of the code, the attributes are - handled as special cases, not generic attributes, simply - because there can only be at most 3 and they are always the same. -*/ -class TiXmlDeclaration : public TiXmlNode -{ -public: - /// Construct an empty declaration. - TiXmlDeclaration() : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) {} - -#ifdef TIXML_USE_STL - /// Constructor. - TiXmlDeclaration( const std::string& _version, - const std::string& _encoding, - const std::string& _standalone ); -#endif - - /// Construct. - TiXmlDeclaration( const char* _version, - const char* _encoding, - const char* _standalone ); - - TiXmlDeclaration( const TiXmlDeclaration& copy ); - TiXmlDeclaration& operator=( const TiXmlDeclaration& copy ); - - virtual ~TiXmlDeclaration() {} - - /// Version. Will return an empty string if none was found. - const char *Version() const { return version.c_str (); } - /// Encoding. Will return an empty string if none was found. - const char *Encoding() const { return encoding.c_str (); } - /// Is this a standalone document? - const char *Standalone() const { return standalone.c_str (); } - - /// Creates a copy of this Declaration and returns it. - virtual TiXmlNode* Clone() const; - // Print this declaration to a FILE stream. - virtual void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; - virtual void Print( FILE* cfile, int depth ) const { - Print( cfile, depth, 0 ); - } - - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlDeclaration* ToDeclaration() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlDeclaration* ToDeclaration() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* visitor ) const; - -protected: - void CopyTo( TiXmlDeclaration* target ) const; - // used to be public - #ifdef TIXML_USE_STL - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - #endif - -private: - - TIXML_STRING version; - TIXML_STRING encoding; - TIXML_STRING standalone; -}; - - -/** Any tag that tinyXml doesn't recognize is saved as an - unknown. It is a tag of text, but should not be modified. - It will be written back to the XML, unchanged, when the file - is saved. - - DTD tags get thrown into TiXmlUnknowns. -*/ -class TiXmlUnknown : public TiXmlNode -{ -public: - TiXmlUnknown() : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) {} - virtual ~TiXmlUnknown() {} - - TiXmlUnknown( const TiXmlUnknown& copy ) : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) { copy.CopyTo( this ); } - TiXmlUnknown& operator=( const TiXmlUnknown& copy ) { copy.CopyTo( this ); return *this; } - - /// Creates a copy of this Unknown and returns it. - virtual TiXmlNode* Clone() const; - // Print this Unknown to a FILE stream. - virtual void Print( FILE* cfile, int depth ) const; - - virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); - - virtual const TiXmlUnknown* ToUnknown() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlUnknown* ToUnknown() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* content ) const; - -protected: - void CopyTo( TiXmlUnknown* target ) const; - - #ifdef TIXML_USE_STL - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - #endif - -private: - -}; - - -/** Always the top level node. A document binds together all the - XML pieces. It can be saved, loaded, and printed to the screen. - The 'value' of a document node is the xml file name. -*/ -class TiXmlDocument : public TiXmlNode -{ -public: - /// Create an empty document, that has no name. - TiXmlDocument(); - /// Create a document with a name. The name of the document is also the filename of the xml. - TiXmlDocument( const char * documentName ); - - #ifdef TIXML_USE_STL - /// Constructor. - TiXmlDocument( const std::string& documentName ); - #endif - - TiXmlDocument( const TiXmlDocument& copy ); - TiXmlDocument& operator=( const TiXmlDocument& copy ); - - virtual ~TiXmlDocument() {} - - /** Load a file using the current document value. - Returns true if successful. Will delete any existing - document data before loading. - */ - bool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); - /// Save a file using the current document value. Returns true if successful. - bool SaveFile() const; - /// Load a file using the given filename. Returns true if successful. - bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); - /// Save a file using the given filename. Returns true if successful. - bool SaveFile( const char * filename ) const; - /** Load a file using the given FILE*. Returns true if successful. Note that this method - doesn't stream - the entire object pointed at by the FILE* - will be interpreted as an XML file. TinyXML doesn't stream in XML from the current - file location. Streaming may be added in the future. - */ - bool LoadFile( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); - /// Save a file using the given FILE*. Returns true if successful. - bool SaveFile( FILE* ) const; - - #ifdef TIXML_USE_STL - bool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ) ///< STL std::string version. - { - return LoadFile( filename.c_str(), encoding ); - } - bool SaveFile( const std::string& filename ) const ///< STL std::string version. - { - return SaveFile( filename.c_str() ); - } - #endif - - /** Parse the given null terminated block of xml data. Passing in an encoding to this - method (either TIXML_ENCODING_LEGACY or TIXML_ENCODING_UTF8 will force TinyXml - to use that encoding, regardless of what TinyXml might otherwise try to detect. - */ - virtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); - - /** Get the root element -- the only top level element -- of the document. - In well formed XML, there should only be one. TinyXml is tolerant of - multiple elements at the document level. - */ - const TiXmlElement* RootElement() const { return FirstChildElement(); } - TiXmlElement* RootElement() { return FirstChildElement(); } - - /** If an error occurs, Error will be set to true. Also, - - The ErrorId() will contain the integer identifier of the error (not generally useful) - - The ErrorDesc() method will return the name of the error. (very useful) - - The ErrorRow() and ErrorCol() will return the location of the error (if known) - */ - bool Error() const { return error; } - - /// Contains a textual (english) description of the error if one occurs. - const char * ErrorDesc() const { return errorDesc.c_str (); } - - /** Generally, you probably want the error string ( ErrorDesc() ). But if you - prefer the ErrorId, this function will fetch it. - */ - int ErrorId() const { return errorId; } - - /** Returns the location (if known) of the error. The first column is column 1, - and the first row is row 1. A value of 0 means the row and column wasn't applicable - (memory errors, for example, have no row/column) or the parser lost the error. (An - error in the error reporting, in that case.) - - @sa SetTabSize, Row, Column - */ - int ErrorRow() const { return errorLocation.row+1; } - int ErrorCol() const { return errorLocation.col+1; } ///< The column where the error occured. See ErrorRow() - - /** SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) - to report the correct values for row and column. It does not change the output - or input in any way. - - By calling this method, with a tab size - greater than 0, the row and column of each node and attribute is stored - when the file is loaded. Very useful for tracking the DOM back in to - the source file. - - The tab size is required for calculating the location of nodes. If not - set, the default of 4 is used. The tabsize is set per document. Setting - the tabsize to 0 disables row/column tracking. - - Note that row and column tracking is not supported when using operator>>. - - The tab size needs to be enabled before the parse or load. Correct usage: - @verbatim - TiXmlDocument doc; - doc.SetTabSize( 8 ); - doc.Load( "myfile.xml" ); - @endverbatim - - @sa Row, Column - */ - void SetTabSize( int _tabsize ) { tabsize = _tabsize; } - - int TabSize() const { return tabsize; } - - /** If you have handled the error, it can be reset with this call. The error - state is automatically cleared if you Parse a new XML block. - */ - void ClearError() { error = false; - errorId = 0; - errorDesc = ""; - errorLocation.row = errorLocation.col = 0; - //errorLocation.last = 0; - } - - /** Write the document to standard out using formatted printing ("pretty print"). */ - void Print() const { Print( stdout, 0 ); } - - /* Write the document to a string using formatted printing ("pretty print"). This - will allocate a character array (new char[]) and return it as a pointer. The - calling code pust call delete[] on the return char* to avoid a memory leak. - */ - //char* PrintToMemory() const; - - /// Print this Document to a FILE stream. - virtual void Print( FILE* cfile, int depth = 0 ) const; - // [internal use] - void SetError( int err, const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding ); - - virtual const TiXmlDocument* ToDocument() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - virtual TiXmlDocument* ToDocument() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. - - /** Walk the XML tree visiting this node and all of its children. - */ - virtual bool Accept( TiXmlVisitor* content ) const; - -protected : - // [internal use] - virtual TiXmlNode* Clone() const; - #ifdef TIXML_USE_STL - virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); - #endif - -private: - void CopyTo( TiXmlDocument* target ) const; - - bool error; - int errorId; - TIXML_STRING errorDesc; - int tabsize; - TiXmlCursor errorLocation; - bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write. -}; - - -/** - A TiXmlHandle is a class that wraps a node pointer with null checks; this is - an incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml - DOM structure. It is a separate utility class. - - Take an example: - @verbatim - - - - - - - @endverbatim - - Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very - easy to write a *lot* of code that looks like: - - @verbatim - TiXmlElement* root = document.FirstChildElement( "Document" ); - if ( root ) - { - TiXmlElement* element = root->FirstChildElement( "Element" ); - if ( element ) - { - TiXmlElement* child = element->FirstChildElement( "Child" ); - if ( child ) - { - TiXmlElement* child2 = child->NextSiblingElement( "Child" ); - if ( child2 ) - { - // Finally do something useful. - @endverbatim - - And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity - of such code. A TiXmlHandle checks for null pointers so it is perfectly safe - and correct to use: - - @verbatim - TiXmlHandle docHandle( &document ); - TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement(); - if ( child2 ) - { - // do something useful - @endverbatim - - Which is MUCH more concise and useful. - - It is also safe to copy handles - internally they are nothing more than node pointers. - @verbatim - TiXmlHandle handleCopy = handle; - @endverbatim - - What they should not be used for is iteration: - - @verbatim - int i=0; - while ( true ) - { - TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement(); - if ( !child ) - break; - // do something - ++i; - } - @endverbatim - - It seems reasonable, but it is in fact two embedded while loops. The Child method is - a linear walk to find the element, so this code would iterate much more than it needs - to. Instead, prefer: - - @verbatim - TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild( "Child" ).ToElement(); - - for( child; child; child=child->NextSiblingElement() ) - { - // do something - } - @endverbatim -*/ -class TiXmlHandle -{ -public: - /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. - TiXmlHandle( TiXmlNode* _node ) { this->node = _node; } - /// Copy constructor - TiXmlHandle( const TiXmlHandle& ref ) { this->node = ref.node; } - TiXmlHandle operator=( const TiXmlHandle& ref ) { if ( &ref != this ) this->node = ref.node; return *this; } - - /// Return a handle to the first child node. - TiXmlHandle FirstChild() const; - /// Return a handle to the first child node with the given name. - TiXmlHandle FirstChild( const char * value ) const; - /// Return a handle to the first child element. - TiXmlHandle FirstChildElement() const; - /// Return a handle to the first child element with the given name. - TiXmlHandle FirstChildElement( const char * value ) const; - - /** Return a handle to the "index" child with the given name. - The first child is 0, the second 1, etc. - */ - TiXmlHandle Child( const char* value, int index ) const; - /** Return a handle to the "index" child. - The first child is 0, the second 1, etc. - */ - TiXmlHandle Child( int index ) const; - /** Return a handle to the "index" child element with the given name. - The first child element is 0, the second 1, etc. Note that only TiXmlElements - are indexed: other types are not counted. - */ - TiXmlHandle ChildElement( const char* value, int index ) const; - /** Return a handle to the "index" child element. - The first child element is 0, the second 1, etc. Note that only TiXmlElements - are indexed: other types are not counted. - */ - TiXmlHandle ChildElement( int index ) const; - - #ifdef TIXML_USE_STL - TiXmlHandle FirstChild( const std::string& _value ) const { return FirstChild( _value.c_str() ); } - TiXmlHandle FirstChildElement( const std::string& _value ) const { return FirstChildElement( _value.c_str() ); } - - TiXmlHandle Child( const std::string& _value, int index ) const { return Child( _value.c_str(), index ); } - TiXmlHandle ChildElement( const std::string& _value, int index ) const { return ChildElement( _value.c_str(), index ); } - #endif - - /** Return the handle as a TiXmlNode. This may return null. - */ - TiXmlNode* ToNode() const { return node; } - /** Return the handle as a TiXmlElement. This may return null. - */ - TiXmlElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); } - /** Return the handle as a TiXmlText. This may return null. - */ - TiXmlText* ToText() const { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); } - /** Return the handle as a TiXmlUnknown. This may return null. - */ - TiXmlUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); } - - /** @deprecated use ToNode. - Return the handle as a TiXmlNode. This may return null. - */ - TiXmlNode* Node() const { return ToNode(); } - /** @deprecated use ToElement. - Return the handle as a TiXmlElement. This may return null. - */ - TiXmlElement* Element() const { return ToElement(); } - /** @deprecated use ToText() - Return the handle as a TiXmlText. This may return null. - */ - TiXmlText* Text() const { return ToText(); } - /** @deprecated use ToUnknown() - Return the handle as a TiXmlUnknown. This may return null. - */ - TiXmlUnknown* Unknown() const { return ToUnknown(); } - -private: - TiXmlNode* node; -}; - - -/** Print to memory functionality. The TiXmlPrinter is useful when you need to: - - -# Print to memory (especially in non-STL mode) - -# Control formatting (line endings, etc.) - - When constructed, the TiXmlPrinter is in its default "pretty printing" mode. - Before calling Accept() you can call methods to control the printing - of the XML document. After TiXmlNode::Accept() is called, the printed document can - be accessed via the CStr(), Str(), and Size() methods. - - TiXmlPrinter uses the Visitor API. - @verbatim - TiXmlPrinter printer; - printer.SetIndent( "\t" ); - - doc.Accept( &printer ); - fprintf( stdout, "%s", printer.CStr() ); - @endverbatim -*/ -class TiXmlPrinter : public TiXmlVisitor -{ -public: - TiXmlPrinter() : depth( 0 ), simpleTextPrint( false ), - buffer(), indent( " " ), lineBreak( "\n" ) {} - - virtual bool VisitEnter( const TiXmlDocument& doc ); - virtual bool VisitExit( const TiXmlDocument& doc ); - - virtual bool VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ); - virtual bool VisitExit( const TiXmlElement& element ); - - virtual bool Visit( const TiXmlDeclaration& declaration ); - virtual bool Visit( const TiXmlText& text ); - virtual bool Visit( const TiXmlComment& comment ); - virtual bool Visit( const TiXmlUnknown& unknown ); - - /** Set the indent characters for printing. By default 4 spaces - but tab (\t) is also useful, or null/empty string for no indentation. - */ - void SetIndent( const char* _indent ) { indent = _indent ? _indent : "" ; } - /// Query the indention string. - const char* Indent() { return indent.c_str(); } - /** Set the line breaking string. By default set to newline (\n). - Some operating systems prefer other characters, or can be - set to the null/empty string for no indenation. - */ - void SetLineBreak( const char* _lineBreak ) { lineBreak = _lineBreak ? _lineBreak : ""; } - /// Query the current line breaking string. - const char* LineBreak() { return lineBreak.c_str(); } - - /** Switch over to "stream printing" which is the most dense formatting without - linebreaks. Common when the XML is needed for network transmission. - */ - void SetStreamPrinting() { indent = ""; - lineBreak = ""; - } - /// Return the result. - const char* CStr() { return buffer.c_str(); } - /// Return the length of the result string. - size_t Size() { return buffer.size(); } - - #ifdef TIXML_USE_STL - /// Return the result. - const std::string& Str() { return buffer; } - #endif - -private: - void DoIndent() { - for( int i=0; i +#include +#include +#include +#include + +// Help out windows: +#if defined( _DEBUG ) && !defined( DEBUG ) +#define DEBUG +#endif + +#ifdef TIXML_USE_STL + #include + #include + #include + #define TIXML_STRING std::string +#else + #include "tinystr.h" + #define TIXML_STRING TiXmlString +#endif + +// Deprecated library function hell. Compilers want to use the +// new safe versions. This probably doesn't fully address the problem, +// but it gets closer. There are too many compilers for me to fully +// test. If you get compilation troubles, undefine TIXML_SAFE +#define TIXML_SAFE + +#ifdef TIXML_SAFE + #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) + // Microsoft visual studio, version 2005 and higher. + #define TIXML_SNPRINTF _snprintf_s + #define TIXML_SSCANF sscanf_s + #elif defined(_MSC_VER) && (_MSC_VER >= 1200 ) + // Microsoft visual studio, version 6 and higher. + //#pragma message( "Using _sn* functions." ) + #define TIXML_SNPRINTF _snprintf + #define TIXML_SSCANF sscanf + #elif defined(__GNUC__) && (__GNUC__ >= 3 ) + // GCC version 3 and higher.s + //#warning( "Using sn* functions." ) + #define TIXML_SNPRINTF snprintf + #define TIXML_SSCANF sscanf + #else + #define TIXML_SNPRINTF snprintf + #define TIXML_SSCANF sscanf + #endif +#endif + +class TiXmlDocument; +class TiXmlElement; +class TiXmlComment; +class TiXmlUnknown; +class TiXmlAttribute; +class TiXmlText; +class TiXmlDeclaration; +class TiXmlParsingData; + +const int TIXML_MAJOR_VERSION = 2; +const int TIXML_MINOR_VERSION = 6; +const int TIXML_PATCH_VERSION = 2; + +/* Internal structure for tracking location of items + in the XML file. +*/ +struct TiXmlCursor +{ + TiXmlCursor() { Clear(); } + void Clear() { row = col = -1; } + + int row; // 0 based. + int col; // 0 based. +}; + + +/** + Implements the interface to the "Visitor pattern" (see the Accept() method.) + If you call the Accept() method, it requires being passed a TiXmlVisitor + class to handle callbacks. For nodes that contain other nodes (Document, Element) + you will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves + are simply called with Visit(). + + If you return 'true' from a Visit method, recursive parsing will continue. If you return + false, no children of this node or its sibilings will be Visited. + + All flavors of Visit methods have a default implementation that returns 'true' (continue + visiting). You need to only override methods that are interesting to you. + + Generally Accept() is called on the TiXmlDocument, although all nodes suppert Visiting. + + You should never change the document from a callback. + + @sa TiXmlNode::Accept() +*/ +class TiXmlVisitor +{ +public: + virtual ~TiXmlVisitor() {} + + /// Visit a document. + virtual bool VisitEnter( const TiXmlDocument& /*doc*/ ) { return true; } + /// Visit a document. + virtual bool VisitExit( const TiXmlDocument& /*doc*/ ) { return true; } + + /// Visit an element. + virtual bool VisitEnter( const TiXmlElement& /*element*/, const TiXmlAttribute* /*firstAttribute*/ ) { return true; } + /// Visit an element. + virtual bool VisitExit( const TiXmlElement& /*element*/ ) { return true; } + + /// Visit a declaration + virtual bool Visit( const TiXmlDeclaration& /*declaration*/ ) { return true; } + /// Visit a text node + virtual bool Visit( const TiXmlText& /*text*/ ) { return true; } + /// Visit a comment node + virtual bool Visit( const TiXmlComment& /*comment*/ ) { return true; } + /// Visit an unknown node + virtual bool Visit( const TiXmlUnknown& /*unknown*/ ) { return true; } +}; + +// Only used by Attribute::Query functions +enum +{ + TIXML_SUCCESS, + TIXML_NO_ATTRIBUTE, + TIXML_WRONG_TYPE +}; + + +// Used by the parsing routines. +enum TiXmlEncoding +{ + TIXML_ENCODING_UNKNOWN, + TIXML_ENCODING_UTF8, + TIXML_ENCODING_LEGACY +}; + +const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN; + +/** TiXmlBase is a base class for every class in TinyXml. + It does little except to establish that TinyXml classes + can be printed and provide some utility functions. + + In XML, the document and elements can contain + other elements and other types of nodes. + + @verbatim + A Document can contain: Element (container or leaf) + Comment (leaf) + Unknown (leaf) + Declaration( leaf ) + + An Element can contain: Element (container or leaf) + Text (leaf) + Attributes (not on tree) + Comment (leaf) + Unknown (leaf) + + A Decleration contains: Attributes (not on tree) + @endverbatim +*/ +class TiXmlBase +{ + friend class TiXmlNode; + friend class TiXmlElement; + friend class TiXmlDocument; + +public: + TiXmlBase() : userData(0) {} + virtual ~TiXmlBase() {} + + /** All TinyXml classes can print themselves to a filestream + or the string class (TiXmlString in non-STL mode, std::string + in STL mode.) Either or both cfile and str can be null. + + This is a formatted print, and will insert + tabs and newlines. + + (For an unformatted stream, use the << operator.) + */ + virtual void Print( FILE* cfile, int depth ) const = 0; + + /** The world does not agree on whether white space should be kept or + not. In order to make everyone happy, these global, static functions + are provided to set whether or not TinyXml will condense all white space + into a single space or not. The default is to condense. Note changing this + value is not thread safe. + */ + static void SetCondenseWhiteSpace( bool condense ) { condenseWhiteSpace = condense; } + + /// Return the current white space setting. + static bool IsWhiteSpaceCondensed() { return condenseWhiteSpace; } + + /** Return the position, in the original source file, of this node or attribute. + The row and column are 1-based. (That is the first row and first column is + 1,1). If the returns values are 0 or less, then the parser does not have + a row and column value. + + Generally, the row and column value will be set when the TiXmlDocument::Load(), + TiXmlDocument::LoadFile(), or any TiXmlNode::Parse() is called. It will NOT be set + when the DOM was created from operator>>. + + The values reflect the initial load. Once the DOM is modified programmatically + (by adding or changing nodes and attributes) the new values will NOT update to + reflect changes in the document. + + There is a minor performance cost to computing the row and column. Computation + can be disabled if TiXmlDocument::SetTabSize() is called with 0 as the value. + + @sa TiXmlDocument::SetTabSize() + */ + int Row() const { return location.row + 1; } + int Column() const { return location.col + 1; } ///< See Row() + + void SetUserData( void* user ) { userData = user; } ///< Set a pointer to arbitrary user data. + void* GetUserData() { return userData; } ///< Get a pointer to arbitrary user data. + const void* GetUserData() const { return userData; } ///< Get a pointer to arbitrary user data. + + // Table that returs, for a given lead byte, the total number of bytes + // in the UTF-8 sequence. + static const int utf8ByteTable[256]; + + virtual const char* Parse( const char* p, + TiXmlParsingData* data, + TiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0; + + /** Expands entities in a string. Note this should not contian the tag's '<', '>', etc, + or they will be transformed into entities! + */ + static void EncodeString( const TIXML_STRING& str, TIXML_STRING* out ); + + enum + { + TIXML_NO_ERROR = 0, + TIXML_ERROR, + TIXML_ERROR_OPENING_FILE, + TIXML_ERROR_PARSING_ELEMENT, + TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, + TIXML_ERROR_READING_ELEMENT_VALUE, + TIXML_ERROR_READING_ATTRIBUTES, + TIXML_ERROR_PARSING_EMPTY, + TIXML_ERROR_READING_END_TAG, + TIXML_ERROR_PARSING_UNKNOWN, + TIXML_ERROR_PARSING_COMMENT, + TIXML_ERROR_PARSING_DECLARATION, + TIXML_ERROR_DOCUMENT_EMPTY, + TIXML_ERROR_EMBEDDED_NULL, + TIXML_ERROR_PARSING_CDATA, + TIXML_ERROR_DOCUMENT_TOP_ONLY, + + TIXML_ERROR_STRING_COUNT + }; + +protected: + + static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding ); + + inline static bool IsWhiteSpace( char c ) + { + return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); + } + inline static bool IsWhiteSpace( int c ) + { + if ( c < 256 ) + return IsWhiteSpace( (char) c ); + return false; // Again, only truly correct for English/Latin...but usually works. + } + + #ifdef TIXML_USE_STL + static bool StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ); + static bool StreamTo( std::istream * in, int character, TIXML_STRING * tag ); + #endif + + /* Reads an XML name into the string provided. Returns + a pointer just past the last character of the name, + or 0 if the function has an error. + */ + static const char* ReadName( const char* p, TIXML_STRING* name, TiXmlEncoding encoding ); + + /* Reads text. Returns a pointer past the given end tag. + Wickedly complex options, but it keeps the (sensitive) code in one place. + */ + static const char* ReadText( const char* in, // where to start + TIXML_STRING* text, // the string read + bool ignoreWhiteSpace, // whether to keep the white space + const char* endTag, // what ends this text + bool ignoreCase, // whether to ignore case in the end tag + TiXmlEncoding encoding ); // the current encoding + + // If an entity has been found, transform it into a character. + static const char* GetEntity( const char* in, char* value, int* length, TiXmlEncoding encoding ); + + // Get a character, while interpreting entities. + // The length can be from 0 to 4 bytes. + inline static const char* GetChar( const char* p, char* _value, int* length, TiXmlEncoding encoding ) + { + assert( p ); + if ( encoding == TIXML_ENCODING_UTF8 ) + { + *length = utf8ByteTable[ *((const unsigned char*)p) ]; + assert( *length >= 0 && *length < 5 ); + } + else + { + *length = 1; + } + + if ( *length == 1 ) + { + if ( *p == '&' ) + return GetEntity( p, _value, length, encoding ); + *_value = *p; + return p+1; + } + else if ( *length ) + { + //strncpy( _value, p, *length ); // lots of compilers don't like this function (unsafe), + // and the null terminator isn't needed + for( int i=0; p[i] && i<*length; ++i ) { + _value[i] = p[i]; + } + return p + (*length); + } + else + { + // Not valid text. + return 0; + } + } + + // Return true if the next characters in the stream are any of the endTag sequences. + // Ignore case only works for english, and should only be relied on when comparing + // to English words: StringEqual( p, "version", true ) is fine. + static bool StringEqual( const char* p, + const char* endTag, + bool ignoreCase, + TiXmlEncoding encoding ); + + static const char* errorString[ TIXML_ERROR_STRING_COUNT ]; + + TiXmlCursor location; + + /// Field containing a generic user pointer + void* userData; + + // None of these methods are reliable for any language except English. + // Good for approximation, not great for accuracy. + static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding ); + static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding ); + inline static int ToLower( int v, TiXmlEncoding encoding ) + { + if ( encoding == TIXML_ENCODING_UTF8 ) + { + if ( v < 128 ) return tolower( v ); + return v; + } + else + { + return tolower( v ); + } + } + static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ); + +private: + TiXmlBase( const TiXmlBase& ); // not implemented. + void operator=( const TiXmlBase& base ); // not allowed. + + struct Entity + { + const char* str; + unsigned int strLength; + char chr; + }; + enum + { + NUM_ENTITY = 5, + MAX_ENTITY_LENGTH = 6 + + }; + static Entity entity[ NUM_ENTITY ]; + static bool condenseWhiteSpace; +}; + + +/** The parent class for everything in the Document Object Model. + (Except for attributes). + Nodes have siblings, a parent, and children. A node can be + in a document, or stand on its own. The type of a TiXmlNode + can be queried, and it can be cast to its more defined type. +*/ +class TiXmlNode : public TiXmlBase +{ + friend class TiXmlDocument; + friend class TiXmlElement; + +public: + #ifdef TIXML_USE_STL + + /** An input stream operator, for every class. Tolerant of newlines and + formatting, but doesn't expect them. + */ + friend std::istream& operator >> (std::istream& in, TiXmlNode& base); + + /** An output stream operator, for every class. Note that this outputs + without any newlines or formatting, as opposed to Print(), which + includes tabs and new lines. + + The operator<< and operator>> are not completely symmetric. Writing + a node to a stream is very well defined. You'll get a nice stream + of output, without any extra whitespace or newlines. + + But reading is not as well defined. (As it always is.) If you create + a TiXmlElement (for example) and read that from an input stream, + the text needs to define an element or junk will result. This is + true of all input streams, but it's worth keeping in mind. + + A TiXmlDocument will read nodes until it reads a root element, and + all the children of that root element. + */ + friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base); + + /// Appends the XML node or attribute to a std::string. + friend std::string& operator<< (std::string& out, const TiXmlNode& base ); + + #endif + + /** The types of XML nodes supported by TinyXml. (All the + unsupported types are picked up by UNKNOWN.) + */ + enum NodeType + { + TINYXML_DOCUMENT, + TINYXML_ELEMENT, + TINYXML_COMMENT, + TINYXML_UNKNOWN, + TINYXML_TEXT, + TINYXML_DECLARATION, + TINYXML_TYPECOUNT + }; + + virtual ~TiXmlNode(); + + /** The meaning of 'value' changes for the specific type of + TiXmlNode. + @verbatim + Document: filename of the xml file + Element: name of the element + Comment: the comment text + Unknown: the tag contents + Text: the text string + @endverbatim + + The subclasses will wrap this function. + */ + const char *Value() const { return value.c_str (); } + + #ifdef TIXML_USE_STL + /** Return Value() as a std::string. If you only use STL, + this is more efficient than calling Value(). + Only available in STL mode. + */ + const std::string& ValueStr() const { return value; } + #endif + + const TIXML_STRING& ValueTStr() const { return value; } + + /** Changes the value of the node. Defined as: + @verbatim + Document: filename of the xml file + Element: name of the element + Comment: the comment text + Unknown: the tag contents + Text: the text string + @endverbatim + */ + void SetValue(const char * _value) { value = _value;} + + #ifdef TIXML_USE_STL + /// STL std::string form. + void SetValue( const std::string& _value ) { value = _value; } + #endif + + /// Delete all the children of this node. Does not affect 'this'. + void Clear(); + + /// One step up the DOM. + TiXmlNode* Parent() { return parent; } + const TiXmlNode* Parent() const { return parent; } + + const TiXmlNode* FirstChild() const { return firstChild; } ///< The first child of this node. Will be null if there are no children. + TiXmlNode* FirstChild() { return firstChild; } + const TiXmlNode* FirstChild( const char * value ) const; ///< The first child of this node with the matching 'value'. Will be null if none found. + /// The first child of this node with the matching 'value'. Will be null if none found. + TiXmlNode* FirstChild( const char * _value ) { + // Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe) + // call the method, cast the return back to non-const. + return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->FirstChild( _value )); + } + const TiXmlNode* LastChild() const { return lastChild; } /// The last child of this node. Will be null if there are no children. + TiXmlNode* LastChild() { return lastChild; } + + const TiXmlNode* LastChild( const char * value ) const; /// The last child of this node matching 'value'. Will be null if there are no children. + TiXmlNode* LastChild( const char * _value ) { + return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value )); + } + + #ifdef TIXML_USE_STL + const TiXmlNode* FirstChild( const std::string& _value ) const { return FirstChild (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* FirstChild( const std::string& _value ) { return FirstChild (_value.c_str ()); } ///< STL std::string form. + const TiXmlNode* LastChild( const std::string& _value ) const { return LastChild (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* LastChild( const std::string& _value ) { return LastChild (_value.c_str ()); } ///< STL std::string form. + #endif + + /** An alternate way to walk the children of a node. + One way to iterate over nodes is: + @verbatim + for( child = parent->FirstChild(); child; child = child->NextSibling() ) + @endverbatim + + IterateChildren does the same thing with the syntax: + @verbatim + child = 0; + while( child = parent->IterateChildren( child ) ) + @endverbatim + + IterateChildren takes the previous child as input and finds + the next one. If the previous child is null, it returns the + first. IterateChildren will return null when done. + */ + const TiXmlNode* IterateChildren( const TiXmlNode* previous ) const; + TiXmlNode* IterateChildren( const TiXmlNode* previous ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( previous ) ); + } + + /// This flavor of IterateChildren searches for children with a particular 'value' + const TiXmlNode* IterateChildren( const char * value, const TiXmlNode* previous ) const; + TiXmlNode* IterateChildren( const char * _value, const TiXmlNode* previous ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( _value, previous ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) const { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. + TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. + #endif + + /** Add a new node related to this. Adds a child past the LastChild. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* InsertEndChild( const TiXmlNode& addThis ); + + + /** Add a new node related to this. Adds a child past the LastChild. + + NOTE: the node to be added is passed by pointer, and will be + henceforth owned (and deleted) by tinyXml. This method is efficient + and avoids an extra copy, but should be used with care as it + uses a different memory model than the other insert functions. + + @sa InsertEndChild + */ + TiXmlNode* LinkEndChild( TiXmlNode* addThis ); + + /** Add a new node related to this. Adds a child before the specified child. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ); + + /** Add a new node related to this. Adds a child after the specified child. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ); + + /** Replace a child of this node. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ); + + /// Delete a child of this node. + bool RemoveChild( TiXmlNode* removeThis ); + + /// Navigate to a sibling node. + const TiXmlNode* PreviousSibling() const { return prev; } + TiXmlNode* PreviousSibling() { return prev; } + + /// Navigate to a sibling node. + const TiXmlNode* PreviousSibling( const char * ) const; + TiXmlNode* PreviousSibling( const char *_prev ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->PreviousSibling( _prev ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlNode* PreviousSibling( const std::string& _value ) const { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* PreviousSibling( const std::string& _value ) { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. + const TiXmlNode* NextSibling( const std::string& _value) const { return NextSibling (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* NextSibling( const std::string& _value) { return NextSibling (_value.c_str ()); } ///< STL std::string form. + #endif + + /// Navigate to a sibling node. + const TiXmlNode* NextSibling() const { return next; } + TiXmlNode* NextSibling() { return next; } + + /// Navigate to a sibling node with the given 'value'. + const TiXmlNode* NextSibling( const char * ) const; + TiXmlNode* NextSibling( const char* _next ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->NextSibling( _next ) ); + } + + /** Convenience function to get through elements. + Calls NextSibling and ToElement. Will skip all non-Element + nodes. Returns 0 if there is not another element. + */ + const TiXmlElement* NextSiblingElement() const; + TiXmlElement* NextSiblingElement() { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement() ); + } + + /** Convenience function to get through elements. + Calls NextSibling and ToElement. Will skip all non-Element + nodes. Returns 0 if there is not another element. + */ + const TiXmlElement* NextSiblingElement( const char * ) const; + TiXmlElement* NextSiblingElement( const char *_next ) { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement( _next ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlElement* NextSiblingElement( const std::string& _value) const { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. + TiXmlElement* NextSiblingElement( const std::string& _value) { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. + #endif + + /// Convenience function to get through elements. + const TiXmlElement* FirstChildElement() const; + TiXmlElement* FirstChildElement() { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement() ); + } + + /// Convenience function to get through elements. + const TiXmlElement* FirstChildElement( const char * _value ) const; + TiXmlElement* FirstChildElement( const char * _value ) { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement( _value ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlElement* FirstChildElement( const std::string& _value ) const { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. + TiXmlElement* FirstChildElement( const std::string& _value ) { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. + #endif + + /** Query the type (as an enumerated value, above) of this node. + The possible types are: TINYXML_DOCUMENT, TINYXML_ELEMENT, TINYXML_COMMENT, + TINYXML_UNKNOWN, TINYXML_TEXT, and TINYXML_DECLARATION. + */ + int Type() const { return type; } + + /** Return a pointer to the Document this node lives in. + Returns null if not in a document. + */ + const TiXmlDocument* GetDocument() const; + TiXmlDocument* GetDocument() { + return const_cast< TiXmlDocument* >( (const_cast< const TiXmlNode* >(this))->GetDocument() ); + } + + /// Returns true if this node has no children. + bool NoChildren() const { return !firstChild; } + + virtual const TiXmlDocument* ToDocument() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlElement* ToElement() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlComment* ToComment() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlUnknown* ToUnknown() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlText* ToText() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlDeclaration* ToDeclaration() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + + virtual TiXmlDocument* ToDocument() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlElement* ToElement() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlComment* ToComment() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlUnknown* ToUnknown() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlText* ToText() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlDeclaration* ToDeclaration() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + + /** Create an exact duplicate of this node and return it. The memory must be deleted + by the caller. + */ + virtual TiXmlNode* Clone() const = 0; + + /** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the + XML tree will be conditionally visited and the host will be called back + via the TiXmlVisitor interface. + + This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse + the XML for the callbacks, so the performance of TinyXML is unchanged by using this + interface versus any other.) + + The interface has been based on ideas from: + + - http://www.saxproject.org/ + - http://c2.com/cgi/wiki?HierarchicalVisitorPattern + + Which are both good references for "visiting". + + An example of using Accept(): + @verbatim + TiXmlPrinter printer; + tinyxmlDoc.Accept( &printer ); + const char* xmlcstr = printer.CStr(); + @endverbatim + */ + virtual bool Accept( TiXmlVisitor* visitor ) const = 0; + +protected: + TiXmlNode( NodeType _type ); + + // Copy to the allocated object. Shared functionality between Clone, Copy constructor, + // and the assignment operator. + void CopyTo( TiXmlNode* target ) const; + + #ifdef TIXML_USE_STL + // The real work of the input operator. + virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0; + #endif + + // Figure out what is at *p, and parse it. Returns null if it is not an xml node. + TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); + + TiXmlNode* parent; + NodeType type; + + TiXmlNode* firstChild; + TiXmlNode* lastChild; + + TIXML_STRING value; + + TiXmlNode* prev; + TiXmlNode* next; + +private: + TiXmlNode( const TiXmlNode& ); // not implemented. + void operator=( const TiXmlNode& base ); // not allowed. +}; + + +/** An attribute is a name-value pair. Elements have an arbitrary + number of attributes, each with a unique name. + + @note The attributes are not TiXmlNodes, since they are not + part of the tinyXML document object model. There are other + suggested ways to look at this problem. +*/ +class TiXmlAttribute : public TiXmlBase +{ + friend class TiXmlAttributeSet; + +public: + /// Construct an empty attribute. + TiXmlAttribute() : TiXmlBase() + { + document = 0; + prev = next = 0; + } + + #ifdef TIXML_USE_STL + /// std::string constructor. + TiXmlAttribute( const std::string& _name, const std::string& _value ) + { + name = _name; + value = _value; + document = 0; + prev = next = 0; + } + #endif + + /// Construct an attribute with a name and value. + TiXmlAttribute( const char * _name, const char * _value ) + { + name = _name; + value = _value; + document = 0; + prev = next = 0; + } + + const char* Name() const { return name.c_str(); } ///< Return the name of this attribute. + const char* Value() const { return value.c_str(); } ///< Return the value of this attribute. + #ifdef TIXML_USE_STL + const std::string& ValueStr() const { return value; } ///< Return the value of this attribute. + #endif + int IntValue() const; ///< Return the value of this attribute, converted to an integer. + double DoubleValue() const; ///< Return the value of this attribute, converted to a double. + + // Get the tinyxml string representation + const TIXML_STRING& NameTStr() const { return name; } + + /** QueryIntValue examines the value string. It is an alternative to the + IntValue() method with richer error checking. + If the value is an integer, it is stored in 'value' and + the call returns TIXML_SUCCESS. If it is not + an integer, it returns TIXML_WRONG_TYPE. + + A specialized but useful call. Note that for success it returns 0, + which is the opposite of almost all other TinyXml calls. + */ + int QueryIntValue( int* _value ) const; + /// QueryDoubleValue examines the value string. See QueryIntValue(). + int QueryDoubleValue( double* _value ) const; + + void SetName( const char* _name ) { name = _name; } ///< Set the name of this attribute. + void SetValue( const char* _value ) { value = _value; } ///< Set the value. + + void SetIntValue( int _value ); ///< Set the value from an integer. + void SetDoubleValue( double _value ); ///< Set the value from a double. + + #ifdef TIXML_USE_STL + /// STL std::string form. + void SetName( const std::string& _name ) { name = _name; } + /// STL std::string form. + void SetValue( const std::string& _value ) { value = _value; } + #endif + + /// Get the next sibling attribute in the DOM. Returns null at end. + const TiXmlAttribute* Next() const; + TiXmlAttribute* Next() { + return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() ); + } + + /// Get the previous sibling attribute in the DOM. Returns null at beginning. + const TiXmlAttribute* Previous() const; + TiXmlAttribute* Previous() { + return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() ); + } + + bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; } + bool operator<( const TiXmlAttribute& rhs ) const { return name < rhs.name; } + bool operator>( const TiXmlAttribute& rhs ) const { return name > rhs.name; } + + /* Attribute parsing starts: first letter of the name + returns: the next char after the value end quote + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + // Prints this Attribute to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const { + Print( cfile, depth, 0 ); + } + void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; + + // [internal use] + // Set the document pointer so the attribute can report errors. + void SetDocument( TiXmlDocument* doc ) { document = doc; } + +private: + TiXmlAttribute( const TiXmlAttribute& ); // not implemented. + void operator=( const TiXmlAttribute& base ); // not allowed. + + TiXmlDocument* document; // A pointer back to a document, for error reporting. + TIXML_STRING name; + TIXML_STRING value; + TiXmlAttribute* prev; + TiXmlAttribute* next; +}; + + +/* A class used to manage a group of attributes. + It is only used internally, both by the ELEMENT and the DECLARATION. + + The set can be changed transparent to the Element and Declaration + classes that use it, but NOT transparent to the Attribute + which has to implement a next() and previous() method. Which makes + it a bit problematic and prevents the use of STL. + + This version is implemented with circular lists because: + - I like circular lists + - it demonstrates some independence from the (typical) doubly linked list. +*/ +class TiXmlAttributeSet +{ +public: + TiXmlAttributeSet(); + ~TiXmlAttributeSet(); + + void Add( TiXmlAttribute* attribute ); + void Remove( TiXmlAttribute* attribute ); + + const TiXmlAttribute* First() const { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } + TiXmlAttribute* First() { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } + const TiXmlAttribute* Last() const { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } + TiXmlAttribute* Last() { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } + + TiXmlAttribute* Find( const char* _name ) const; + TiXmlAttribute* FindOrCreate( const char* _name ); + +# ifdef TIXML_USE_STL + TiXmlAttribute* Find( const std::string& _name ) const; + TiXmlAttribute* FindOrCreate( const std::string& _name ); +# endif + + +private: + //*ME: Because of hidden/disabled copy-construktor in TiXmlAttribute (sentinel-element), + //*ME: this class must be also use a hidden/disabled copy-constructor !!! + TiXmlAttributeSet( const TiXmlAttributeSet& ); // not allowed + void operator=( const TiXmlAttributeSet& ); // not allowed (as TiXmlAttribute) + + TiXmlAttribute sentinel; +}; + + +/** The element is a container class. It has a value, the element name, + and can contain other elements, text, comments, and unknowns. + Elements also contain an arbitrary number of attributes. +*/ +class TiXmlElement : public TiXmlNode +{ +public: + /// Construct an element. + TiXmlElement (const char * in_value); + + #ifdef TIXML_USE_STL + /// std::string constructor. + TiXmlElement( const std::string& _value ); + #endif + + TiXmlElement( const TiXmlElement& ); + + TiXmlElement& operator=( const TiXmlElement& base ); + + virtual ~TiXmlElement(); + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none exists. + */ + const char* Attribute( const char* name ) const; + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none exists. + If the attribute exists and can be converted to an integer, + the integer value will be put in the return 'i', if 'i' + is non-null. + */ + const char* Attribute( const char* name, int* i ) const; + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none exists. + If the attribute exists and can be converted to an double, + the double value will be put in the return 'd', if 'd' + is non-null. + */ + const char* Attribute( const char* name, double* d ) const; + + /** QueryIntAttribute examines the attribute - it is an alternative to the + Attribute() method with richer error checking. + If the attribute is an integer, it is stored in 'value' and + the call returns TIXML_SUCCESS. If it is not + an integer, it returns TIXML_WRONG_TYPE. If the attribute + does not exist, then TIXML_NO_ATTRIBUTE is returned. + */ + int QueryIntAttribute( const char* name, int* _value ) const; + /// QueryUnsignedAttribute examines the attribute - see QueryIntAttribute(). + int QueryUnsignedAttribute( const char* name, unsigned* _value ) const; + /** QueryBoolAttribute examines the attribute - see QueryIntAttribute(). + Note that '1', 'true', or 'yes' are considered true, while '0', 'false' + and 'no' are considered false. + */ + int QueryBoolAttribute( const char* name, bool* _value ) const; + /// QueryDoubleAttribute examines the attribute - see QueryIntAttribute(). + int QueryDoubleAttribute( const char* name, double* _value ) const; + /// QueryFloatAttribute examines the attribute - see QueryIntAttribute(). + int QueryFloatAttribute( const char* name, float* _value ) const { + double d; + int result = QueryDoubleAttribute( name, &d ); + if ( result == TIXML_SUCCESS ) { + *_value = (float)d; + } + return result; + } + + #ifdef TIXML_USE_STL + /// QueryStringAttribute examines the attribute - see QueryIntAttribute(). + int QueryStringAttribute( const char* name, std::string* _value ) const { + const char* cstr = Attribute( name ); + if ( cstr ) { + *_value = std::string( cstr ); + return TIXML_SUCCESS; + } + return TIXML_NO_ATTRIBUTE; + } + + /** Template form of the attribute query which will try to read the + attribute into the specified type. Very easy, very powerful, but + be careful to make sure to call this with the correct type. + + NOTE: This method doesn't work correctly for 'string' types that contain spaces. + + @return TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE + */ + template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const + { + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + + std::stringstream sstream( node->ValueStr() ); + sstream >> *outValue; + if ( !sstream.fail() ) + return TIXML_SUCCESS; + return TIXML_WRONG_TYPE; + } + + int QueryValueAttribute( const std::string& name, std::string* outValue ) const + { + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + *outValue = node->ValueStr(); + return TIXML_SUCCESS; + } + #endif + + /** Sets an attribute of name to a given value. The attribute + will be created if it does not exist, or changed if it does. + */ + void SetAttribute( const char* name, const char * _value ); + + #ifdef TIXML_USE_STL + const std::string* Attribute( const std::string& name ) const; + const std::string* Attribute( const std::string& name, int* i ) const; + const std::string* Attribute( const std::string& name, double* d ) const; + int QueryIntAttribute( const std::string& name, int* _value ) const; + int QueryDoubleAttribute( const std::string& name, double* _value ) const; + + /// STL std::string form. + void SetAttribute( const std::string& name, const std::string& _value ); + ///< STL std::string form. + void SetAttribute( const std::string& name, int _value ); + ///< STL std::string form. + void SetDoubleAttribute( const std::string& name, double value ); + #endif + + /** Sets an attribute of name to a given value. The attribute + will be created if it does not exist, or changed if it does. + */ + void SetAttribute( const char * name, int value ); + + /** Sets an attribute of name to a given value. The attribute + will be created if it does not exist, or changed if it does. + */ + void SetDoubleAttribute( const char * name, double value ); + + /** Deletes an attribute with the given name. + */ + void RemoveAttribute( const char * name ); + #ifdef TIXML_USE_STL + void RemoveAttribute( const std::string& name ) { RemoveAttribute (name.c_str ()); } ///< STL std::string form. + #endif + + const TiXmlAttribute* FirstAttribute() const { return attributeSet.First(); } ///< Access the first attribute in this element. + TiXmlAttribute* FirstAttribute() { return attributeSet.First(); } + const TiXmlAttribute* LastAttribute() const { return attributeSet.Last(); } ///< Access the last attribute in this element. + TiXmlAttribute* LastAttribute() { return attributeSet.Last(); } + + /** Convenience function for easy access to the text inside an element. Although easy + and concise, GetText() is limited compared to getting the TiXmlText child + and accessing it directly. + + If the first child of 'this' is a TiXmlText, the GetText() + returns the character string of the Text node, else null is returned. + + This is a convenient method for getting the text of simple contained text: + @verbatim + This is text + const char* str = fooElement->GetText(); + @endverbatim + + 'str' will be a pointer to "This is text". + + Note that this function can be misleading. If the element foo was created from + this XML: + @verbatim + This is text + @endverbatim + + then the value of str would be null. The first child node isn't a text node, it is + another element. From this XML: + @verbatim + This is text + @endverbatim + GetText() will return "This is ". + + WARNING: GetText() accesses a child node - don't become confused with the + similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are + safe type casts on the referenced node. + */ + const char* GetText() const; + + /// Creates a new Element and returns it - the returned element is a copy. + virtual TiXmlNode* Clone() const; + // Print the Element to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const; + + /* Attribtue parsing starts: next char past '<' + returns: next char past '>' + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlElement* ToElement() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlElement* ToElement() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* visitor ) const; + +protected: + + void CopyTo( TiXmlElement* target ) const; + void ClearThis(); // like clear, but initializes 'this' object as well + + // Used to be public [internal use] + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + /* [internal use] + Reads the "value" of the element -- another element, or text. + This should terminate with the current end tag. + */ + const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding ); + +private: + TiXmlAttributeSet attributeSet; +}; + + +/** An XML comment. +*/ +class TiXmlComment : public TiXmlNode +{ +public: + /// Constructs an empty comment. + TiXmlComment() : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) {} + /// Construct a comment from text. + TiXmlComment( const char* _value ) : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) { + SetValue( _value ); + } + TiXmlComment( const TiXmlComment& ); + TiXmlComment& operator=( const TiXmlComment& base ); + + virtual ~TiXmlComment() {} + + /// Returns a copy of this Comment. + virtual TiXmlNode* Clone() const; + // Write this Comment to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const; + + /* Attribtue parsing starts: at the ! of the !-- + returns: next char past '>' + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlComment* ToComment() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlComment* ToComment() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* visitor ) const; + +protected: + void CopyTo( TiXmlComment* target ) const; + + // used to be public + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif +// virtual void StreamOut( TIXML_OSTREAM * out ) const; + +private: + +}; + + +/** XML text. A text node can have 2 ways to output the next. "normal" output + and CDATA. It will default to the mode it was parsed from the XML file and + you generally want to leave it alone, but you can change the output mode with + SetCDATA() and query it with CDATA(). +*/ +class TiXmlText : public TiXmlNode +{ + friend class TiXmlElement; +public: + /** Constructor for text element. By default, it is treated as + normal, encoded text. If you want it be output as a CDATA text + element, set the parameter _cdata to 'true' + */ + TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) + { + SetValue( initValue ); + cdata = false; + } + virtual ~TiXmlText() {} + + #ifdef TIXML_USE_STL + /// Constructor. + TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) + { + SetValue( initValue ); + cdata = false; + } + #endif + + TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TINYXML_TEXT ) { copy.CopyTo( this ); } + TiXmlText& operator=( const TiXmlText& base ) { base.CopyTo( this ); return *this; } + + // Write this text object to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const; + + /// Queries whether this represents text using a CDATA section. + bool CDATA() const { return cdata; } + /// Turns on or off a CDATA representation of text. + void SetCDATA( bool _cdata ) { cdata = _cdata; } + + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlText* ToText() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlText* ToText() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* content ) const; + +protected : + /// [internal use] Creates a new Element and returns it. + virtual TiXmlNode* Clone() const; + void CopyTo( TiXmlText* target ) const; + + bool Blank() const; // returns true if all white space and new lines + // [internal use] + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + bool cdata; // true if this should be input and output as a CDATA style text element +}; + + +/** In correct XML the declaration is the first entry in the file. + @verbatim + + @endverbatim + + TinyXml will happily read or write files without a declaration, + however. There are 3 possible attributes to the declaration: + version, encoding, and standalone. + + Note: In this version of the code, the attributes are + handled as special cases, not generic attributes, simply + because there can only be at most 3 and they are always the same. +*/ +class TiXmlDeclaration : public TiXmlNode +{ +public: + /// Construct an empty declaration. + TiXmlDeclaration() : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) {} + +#ifdef TIXML_USE_STL + /// Constructor. + TiXmlDeclaration( const std::string& _version, + const std::string& _encoding, + const std::string& _standalone ); +#endif + + /// Construct. + TiXmlDeclaration( const char* _version, + const char* _encoding, + const char* _standalone ); + + TiXmlDeclaration( const TiXmlDeclaration& copy ); + TiXmlDeclaration& operator=( const TiXmlDeclaration& copy ); + + virtual ~TiXmlDeclaration() {} + + /// Version. Will return an empty string if none was found. + const char *Version() const { return version.c_str (); } + /// Encoding. Will return an empty string if none was found. + const char *Encoding() const { return encoding.c_str (); } + /// Is this a standalone document? + const char *Standalone() const { return standalone.c_str (); } + + /// Creates a copy of this Declaration and returns it. + virtual TiXmlNode* Clone() const; + // Print this declaration to a FILE stream. + virtual void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; + virtual void Print( FILE* cfile, int depth ) const { + Print( cfile, depth, 0 ); + } + + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlDeclaration* ToDeclaration() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlDeclaration* ToDeclaration() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* visitor ) const; + +protected: + void CopyTo( TiXmlDeclaration* target ) const; + // used to be public + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + + TIXML_STRING version; + TIXML_STRING encoding; + TIXML_STRING standalone; +}; + + +/** Any tag that tinyXml doesn't recognize is saved as an + unknown. It is a tag of text, but should not be modified. + It will be written back to the XML, unchanged, when the file + is saved. + + DTD tags get thrown into TiXmlUnknowns. +*/ +class TiXmlUnknown : public TiXmlNode +{ +public: + TiXmlUnknown() : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) {} + virtual ~TiXmlUnknown() {} + + TiXmlUnknown( const TiXmlUnknown& copy ) : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) { copy.CopyTo( this ); } + TiXmlUnknown& operator=( const TiXmlUnknown& copy ) { copy.CopyTo( this ); return *this; } + + /// Creates a copy of this Unknown and returns it. + virtual TiXmlNode* Clone() const; + // Print this Unknown to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const; + + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlUnknown* ToUnknown() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlUnknown* ToUnknown() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* content ) const; + +protected: + void CopyTo( TiXmlUnknown* target ) const; + + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + +}; + + +/** Always the top level node. A document binds together all the + XML pieces. It can be saved, loaded, and printed to the screen. + The 'value' of a document node is the xml file name. +*/ +class TiXmlDocument : public TiXmlNode +{ +public: + /// Create an empty document, that has no name. + TiXmlDocument(); + /// Create a document with a name. The name of the document is also the filename of the xml. + TiXmlDocument( const char * documentName ); + + #ifdef TIXML_USE_STL + /// Constructor. + TiXmlDocument( const std::string& documentName ); + #endif + + TiXmlDocument( const TiXmlDocument& copy ); + TiXmlDocument& operator=( const TiXmlDocument& copy ); + + virtual ~TiXmlDocument() {} + + /** Load a file using the current document value. + Returns true if successful. Will delete any existing + document data before loading. + */ + bool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + /// Save a file using the current document value. Returns true if successful. + bool SaveFile() const; + /// Load a file using the given filename. Returns true if successful. + bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + /// Save a file using the given filename. Returns true if successful. + bool SaveFile( const char * filename ) const; + /** Load a file using the given FILE*. Returns true if successful. Note that this method + doesn't stream - the entire object pointed at by the FILE* + will be interpreted as an XML file. TinyXML doesn't stream in XML from the current + file location. Streaming may be added in the future. + */ + bool LoadFile( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + /// Save a file using the given FILE*. Returns true if successful. + bool SaveFile( FILE* ) const; + + #ifdef TIXML_USE_STL + bool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ) ///< STL std::string version. + { + return LoadFile( filename.c_str(), encoding ); + } + bool SaveFile( const std::string& filename ) const ///< STL std::string version. + { + return SaveFile( filename.c_str() ); + } + #endif + + /** Parse the given null terminated block of xml data. Passing in an encoding to this + method (either TIXML_ENCODING_LEGACY or TIXML_ENCODING_UTF8 will force TinyXml + to use that encoding, regardless of what TinyXml might otherwise try to detect. + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + + /** Get the root element -- the only top level element -- of the document. + In well formed XML, there should only be one. TinyXml is tolerant of + multiple elements at the document level. + */ + const TiXmlElement* RootElement() const { return FirstChildElement(); } + TiXmlElement* RootElement() { return FirstChildElement(); } + + /** If an error occurs, Error will be set to true. Also, + - The ErrorId() will contain the integer identifier of the error (not generally useful) + - The ErrorDesc() method will return the name of the error. (very useful) + - The ErrorRow() and ErrorCol() will return the location of the error (if known) + */ + bool Error() const { return error; } + + /// Contains a textual (english) description of the error if one occurs. + const char * ErrorDesc() const { return errorDesc.c_str (); } + + /** Generally, you probably want the error string ( ErrorDesc() ). But if you + prefer the ErrorId, this function will fetch it. + */ + int ErrorId() const { return errorId; } + + /** Returns the location (if known) of the error. The first column is column 1, + and the first row is row 1. A value of 0 means the row and column wasn't applicable + (memory errors, for example, have no row/column) or the parser lost the error. (An + error in the error reporting, in that case.) + + @sa SetTabSize, Row, Column + */ + int ErrorRow() const { return errorLocation.row+1; } + int ErrorCol() const { return errorLocation.col+1; } ///< The column where the error occured. See ErrorRow() + + /** SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) + to report the correct values for row and column. It does not change the output + or input in any way. + + By calling this method, with a tab size + greater than 0, the row and column of each node and attribute is stored + when the file is loaded. Very useful for tracking the DOM back in to + the source file. + + The tab size is required for calculating the location of nodes. If not + set, the default of 4 is used. The tabsize is set per document. Setting + the tabsize to 0 disables row/column tracking. + + Note that row and column tracking is not supported when using operator>>. + + The tab size needs to be enabled before the parse or load. Correct usage: + @verbatim + TiXmlDocument doc; + doc.SetTabSize( 8 ); + doc.Load( "myfile.xml" ); + @endverbatim + + @sa Row, Column + */ + void SetTabSize( int _tabsize ) { tabsize = _tabsize; } + + int TabSize() const { return tabsize; } + + /** If you have handled the error, it can be reset with this call. The error + state is automatically cleared if you Parse a new XML block. + */ + void ClearError() { error = false; + errorId = 0; + errorDesc = ""; + errorLocation.row = errorLocation.col = 0; + //errorLocation.last = 0; + } + + /** Write the document to standard out using formatted printing ("pretty print"). */ + void Print() const { Print( stdout, 0 ); } + + /* Write the document to a string using formatted printing ("pretty print"). This + will allocate a character array (new char[]) and return it as a pointer. The + calling code pust call delete[] on the return char* to avoid a memory leak. + */ + //char* PrintToMemory() const; + + /// Print this Document to a FILE stream. + virtual void Print( FILE* cfile, int depth = 0 ) const; + // [internal use] + void SetError( int err, const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding ); + + virtual const TiXmlDocument* ToDocument() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlDocument* ToDocument() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* content ) const; + +protected : + // [internal use] + virtual TiXmlNode* Clone() const; + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + void CopyTo( TiXmlDocument* target ) const; + + bool error; + int errorId; + TIXML_STRING errorDesc; + int tabsize; + TiXmlCursor errorLocation; + bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write. +}; + + +/** + A TiXmlHandle is a class that wraps a node pointer with null checks; this is + an incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml + DOM structure. It is a separate utility class. + + Take an example: + @verbatim + + + + + + + @endverbatim + + Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very + easy to write a *lot* of code that looks like: + + @verbatim + TiXmlElement* root = document.FirstChildElement( "Document" ); + if ( root ) + { + TiXmlElement* element = root->FirstChildElement( "Element" ); + if ( element ) + { + TiXmlElement* child = element->FirstChildElement( "Child" ); + if ( child ) + { + TiXmlElement* child2 = child->NextSiblingElement( "Child" ); + if ( child2 ) + { + // Finally do something useful. + @endverbatim + + And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity + of such code. A TiXmlHandle checks for null pointers so it is perfectly safe + and correct to use: + + @verbatim + TiXmlHandle docHandle( &document ); + TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement(); + if ( child2 ) + { + // do something useful + @endverbatim + + Which is MUCH more concise and useful. + + It is also safe to copy handles - internally they are nothing more than node pointers. + @verbatim + TiXmlHandle handleCopy = handle; + @endverbatim + + What they should not be used for is iteration: + + @verbatim + int i=0; + while ( true ) + { + TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement(); + if ( !child ) + break; + // do something + ++i; + } + @endverbatim + + It seems reasonable, but it is in fact two embedded while loops. The Child method is + a linear walk to find the element, so this code would iterate much more than it needs + to. Instead, prefer: + + @verbatim + TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild( "Child" ).ToElement(); + + for( child; child; child=child->NextSiblingElement() ) + { + // do something + } + @endverbatim +*/ +class TiXmlHandle +{ +public: + /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. + TiXmlHandle( TiXmlNode* _node ) { this->node = _node; } + /// Copy constructor + TiXmlHandle( const TiXmlHandle& ref ) { this->node = ref.node; } + TiXmlHandle operator=( const TiXmlHandle& ref ) { if ( &ref != this ) this->node = ref.node; return *this; } + + /// Return a handle to the first child node. + TiXmlHandle FirstChild() const; + /// Return a handle to the first child node with the given name. + TiXmlHandle FirstChild( const char * value ) const; + /// Return a handle to the first child element. + TiXmlHandle FirstChildElement() const; + /// Return a handle to the first child element with the given name. + TiXmlHandle FirstChildElement( const char * value ) const; + + /** Return a handle to the "index" child with the given name. + The first child is 0, the second 1, etc. + */ + TiXmlHandle Child( const char* value, int index ) const; + /** Return a handle to the "index" child. + The first child is 0, the second 1, etc. + */ + TiXmlHandle Child( int index ) const; + /** Return a handle to the "index" child element with the given name. + The first child element is 0, the second 1, etc. Note that only TiXmlElements + are indexed: other types are not counted. + */ + TiXmlHandle ChildElement( const char* value, int index ) const; + /** Return a handle to the "index" child element. + The first child element is 0, the second 1, etc. Note that only TiXmlElements + are indexed: other types are not counted. + */ + TiXmlHandle ChildElement( int index ) const; + + #ifdef TIXML_USE_STL + TiXmlHandle FirstChild( const std::string& _value ) const { return FirstChild( _value.c_str() ); } + TiXmlHandle FirstChildElement( const std::string& _value ) const { return FirstChildElement( _value.c_str() ); } + + TiXmlHandle Child( const std::string& _value, int index ) const { return Child( _value.c_str(), index ); } + TiXmlHandle ChildElement( const std::string& _value, int index ) const { return ChildElement( _value.c_str(), index ); } + #endif + + /** Return the handle as a TiXmlNode. This may return null. + */ + TiXmlNode* ToNode() const { return node; } + /** Return the handle as a TiXmlElement. This may return null. + */ + TiXmlElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); } + /** Return the handle as a TiXmlText. This may return null. + */ + TiXmlText* ToText() const { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); } + /** Return the handle as a TiXmlUnknown. This may return null. + */ + TiXmlUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); } + + /** @deprecated use ToNode. + Return the handle as a TiXmlNode. This may return null. + */ + TiXmlNode* Node() const { return ToNode(); } + /** @deprecated use ToElement. + Return the handle as a TiXmlElement. This may return null. + */ + TiXmlElement* Element() const { return ToElement(); } + /** @deprecated use ToText() + Return the handle as a TiXmlText. This may return null. + */ + TiXmlText* Text() const { return ToText(); } + /** @deprecated use ToUnknown() + Return the handle as a TiXmlUnknown. This may return null. + */ + TiXmlUnknown* Unknown() const { return ToUnknown(); } + +private: + TiXmlNode* node; +}; + + +/** Print to memory functionality. The TiXmlPrinter is useful when you need to: + + -# Print to memory (especially in non-STL mode) + -# Control formatting (line endings, etc.) + + When constructed, the TiXmlPrinter is in its default "pretty printing" mode. + Before calling Accept() you can call methods to control the printing + of the XML document. After TiXmlNode::Accept() is called, the printed document can + be accessed via the CStr(), Str(), and Size() methods. + + TiXmlPrinter uses the Visitor API. + @verbatim + TiXmlPrinter printer; + printer.SetIndent( "\t" ); + + doc.Accept( &printer ); + fprintf( stdout, "%s", printer.CStr() ); + @endverbatim +*/ +class TiXmlPrinter : public TiXmlVisitor +{ +public: + TiXmlPrinter() : depth( 0 ), simpleTextPrint( false ), + buffer(), indent( " " ), lineBreak( "\n" ) {} + + virtual bool VisitEnter( const TiXmlDocument& doc ); + virtual bool VisitExit( const TiXmlDocument& doc ); + + virtual bool VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ); + virtual bool VisitExit( const TiXmlElement& element ); + + virtual bool Visit( const TiXmlDeclaration& declaration ); + virtual bool Visit( const TiXmlText& text ); + virtual bool Visit( const TiXmlComment& comment ); + virtual bool Visit( const TiXmlUnknown& unknown ); + + /** Set the indent characters for printing. By default 4 spaces + but tab (\t) is also useful, or null/empty string for no indentation. + */ + void SetIndent( const char* _indent ) { indent = _indent ? _indent : "" ; } + /// Query the indention string. + const char* Indent() { return indent.c_str(); } + /** Set the line breaking string. By default set to newline (\n). + Some operating systems prefer other characters, or can be + set to the null/empty string for no indenation. + */ + void SetLineBreak( const char* _lineBreak ) { lineBreak = _lineBreak ? _lineBreak : ""; } + /// Query the current line breaking string. + const char* LineBreak() { return lineBreak.c_str(); } + + /** Switch over to "stream printing" which is the most dense formatting without + linebreaks. Common when the XML is needed for network transmission. + */ + void SetStreamPrinting() { indent = ""; + lineBreak = ""; + } + /// Return the result. + const char* CStr() { return buffer.c_str(); } + /// Return the length of the result string. + size_t Size() { return buffer.size(); } + + #ifdef TIXML_USE_STL + /// Return the result. + const std::string& Str() { return buffer; } + #endif + +private: + void DoIndent() { + for( int i=0; i -#include -#include -#include "control/CtrlComponents.h" -#include "trajectory/SCurve.h" - - -class JointSpaceTraj : public Trajectory{ -public: - JointSpaceTraj(CtrlComponents *ctrlComp); - ~JointSpaceTraj(){} - - bool getJointCmd(Vec6 &q, Vec6 &qd); - bool getJointCmd(Vec6 &q, Vec6 &qd, double &gripperQ, double &gripperQd); - - void setGripper(double startQ, double endQ, double speed = M_PI); - void setJointTraj(Vec6 startQ, Vec6 endQ, double speed); - bool setJointTraj(Vec6 startQ, std::string endName, double speed); - bool setJointTraj(std::string startName, std::string endName, double speed); -private: - void _generateA345(double pathTime); - - SCurve _jointCurve; - const double ddQMax = 15.0; - const double dddQMax = 30.0; - - double _a3, _a4, _a5, _s, _sDot; -}; - +#ifndef JOINTSPACETRAJ_H +#define JOINTSPACETRAJ_H + +#include +#include +#include +#include "control/CtrlComponents.h" +#include "trajectory/SCurve.h" + + +class JointSpaceTraj : public Trajectory{ +public: + JointSpaceTraj(CtrlComponents *ctrlComp); + ~JointSpaceTraj(){} + + bool getJointCmd(Vec6 &q, Vec6 &qd); + bool getJointCmd(Vec6 &q, Vec6 &qd, double &gripperQ, double &gripperQd); + + void setGripper(double startQ, double endQ, double speed = M_PI); + void setJointTraj(Vec6 startQ, Vec6 endQ, double speed); + bool setJointTraj(Vec6 startQ, std::string endName, double speed); + bool setJointTraj(std::string startName, std::string endName, double speed); +private: + void _generateA345(double pathTime); + + SCurve _jointCurve; + const double ddQMax = 15.0; + const double dddQMax = 30.0; + + double _a3, _a4, _a5, _s, _sDot; +}; + #endif // JOINTSPACETRAJ_H \ No newline at end of file diff --git a/include/trajectory/SCurve.h b/include/trajectory/SCurve.h index cad0d30..9330785 100755 --- a/include/trajectory/SCurve.h +++ b/include/trajectory/SCurve.h @@ -1,49 +1,49 @@ -#ifndef SCURVE_H -#define SCURVE_H - -/* 归一化后的s曲线 */ - -#include - -class SCurve{ -public: - SCurve(){} - ~SCurve(){} - void setSCurve(double deltaQ, double dQMax, double ddQMax, double dddQMax); - void restart(); -/* -考虑到归一化,在实际使用时,物理量为: -加速度 = deltaQ * getDDs(); -*/ - double getDDs(); - double getDDs(double t); -/* -考虑到归一化,在实际使用时,物理量为: -速度 = deltaQ * getDs(); -*/ - double getDs(); - double getDs(double t); -/* -考虑到归一化,在实际使用时,物理量为: -位置 = deltaQ * gets(); -*/ - double gets(); - double gets(double t); - - double getT(); -private: - int _getSegment(double t); - void _setFunc(); - double _runTime(); - - bool _started = false; - double _startTime; - - double _J, _aMax, _vMax; - double _T[7]; // period - double _t[7]; // moment - double _v0, _v1; // ds at _t[0], _t[1] - double _s0, _s1, _s2, _s3, _s4, _s5, _s6; // s at _t[0], _t[1] -}; - +#ifndef SCURVE_H +#define SCURVE_H + +/* 归一化后的s曲线 */ + +#include + +class SCurve{ +public: + SCurve(){} + ~SCurve(){} + void setSCurve(double deltaQ, double dQMax, double ddQMax, double dddQMax); + void restart(); +/* +考虑到归一化,在实际使用时,物理量为: +加速度 = deltaQ * getDDs(); +*/ + double getDDs(); + double getDDs(double t); +/* +考虑到归一化,在实际使用时,物理量为: +速度 = deltaQ * getDs(); +*/ + double getDs(); + double getDs(double t); +/* +考虑到归一化,在实际使用时,物理量为: +位置 = deltaQ * gets(); +*/ + double gets(); + double gets(double t); + + double getT(); +private: + int _getSegment(double t); + void _setFunc(); + double _runTime(); + + bool _started = false; + double _startTime; + + double _J, _aMax, _vMax; + double _T[7]; // period + double _t[7]; // moment + double _v0, _v1; // ds at _t[0], _t[1] + double _s0, _s1, _s2, _s3, _s4, _s5, _s6; // s at _t[0], _t[1] +}; + #endif // SCURVE_H \ No newline at end of file diff --git a/include/trajectory/StopForTime.h b/include/trajectory/StopForTime.h index 0e435ce..7d02c99 100755 --- a/include/trajectory/StopForTime.h +++ b/include/trajectory/StopForTime.h @@ -1,17 +1,17 @@ -#ifndef STOPFORTIME_H -#define STOPFORTIME_H - -#include "trajectory/Trajectory.h" - -class StopForTime : public Trajectory{ -public: - StopForTime(CtrlComponents *ctrlComp); - ~StopForTime(){} - - bool getJointCmd(Vec6 &q, Vec6 &qd); - bool getJointCmd(Vec6 &q, Vec6 &qd, double &gripperQ, double &gripperQd); - void setStop(Vec6 stopQ, double stopTime); -private: -}; - +#ifndef STOPFORTIME_H +#define STOPFORTIME_H + +#include "trajectory/Trajectory.h" + +class StopForTime : public Trajectory{ +public: + StopForTime(CtrlComponents *ctrlComp); + ~StopForTime(){} + + bool getJointCmd(Vec6 &q, Vec6 &qd); + bool getJointCmd(Vec6 &q, Vec6 &qd, double &gripperQ, double &gripperQd); + void setStop(Vec6 stopQ, double stopTime); +private: +}; + #endif // STOPFORTIME_H \ No newline at end of file diff --git a/include/trajectory/TrajectoryManager.h b/include/trajectory/TrajectoryManager.h index 7bc364a..a4afb86 100755 --- a/include/trajectory/TrajectoryManager.h +++ b/include/trajectory/TrajectoryManager.h @@ -1,38 +1,38 @@ -#ifndef TRAJECTORY_MANAGER_H -#define TRAJECTORY_MANAGER_H - -#include -#include "control/CtrlComponents.h" -#include "trajectory/JointSpaceTraj.h" -#include "trajectory/EndLineTraj.h" -#include "trajectory/EndCircleTraj.h" -#include "trajectory/StopForTime.h" - -class TrajectoryManager{ -public: - TrajectoryManager(CtrlComponents *ctrlComp); - ~TrajectoryManager(){} - bool getJointCmd(Vec6 &q, Vec6 &qd); - bool getJointCmd(Vec6 &q, Vec6 &qd, double &gripperQ, double &gripperQd); - void addTrajectory(Trajectory* traj); - void setLoop(double backSpeed = 0.7); - void restartTraj(); - void emptyTraj(); - Vec6 getStartQ(); - Vec6 getEndQ(); - Vec6 getEndPosture(); - double getStartGripperQ(); - double getEndGripperQ(); - HomoMat getEndHomo(); - size_t size() {return _trajVec.size();} ; -private: - CtrlComponents *_ctrlComp; - JointSpaceTraj *_trajBack; - std::vector _trajVec; - int _trajID = 0; - double _jointErr = 0.05; - bool _trajCorrect = true; - bool _loop = false; -}; - +#ifndef TRAJECTORY_MANAGER_H +#define TRAJECTORY_MANAGER_H + +#include +#include "control/CtrlComponents.h" +#include "trajectory/JointSpaceTraj.h" +#include "trajectory/EndLineTraj.h" +#include "trajectory/EndCircleTraj.h" +#include "trajectory/StopForTime.h" + +class TrajectoryManager{ +public: + TrajectoryManager(CtrlComponents *ctrlComp); + ~TrajectoryManager(){} + bool getJointCmd(Vec6 &q, Vec6 &qd); + bool getJointCmd(Vec6 &q, Vec6 &qd, double &gripperQ, double &gripperQd); + void addTrajectory(Trajectory* traj); + void setLoop(double backSpeed = 0.7); + void restartTraj(); + void emptyTraj(); + Vec6 getStartQ(); + Vec6 getEndQ(); + Vec6 getEndPosture(); + double getStartGripperQ(); + double getEndGripperQ(); + HomoMat getEndHomo(); + size_t size() {return _trajVec.size();} ; +private: + CtrlComponents *_ctrlComp; + JointSpaceTraj *_trajBack; + std::vector _trajVec; + int _trajID = 0; + double _jointErr = 0.05; + bool _trajCorrect = true; + bool _loop = false; +}; + #endif // TRAJECTORY_MANAGER_H \ No newline at end of file diff --git a/lib/libZ1_ROS_Linux64.so b/lib/libZ1_ROS_Linux64.so old mode 100644 new mode 100755 index fc463edb3a9e287b44fbb3bf997107ad09b83faa..064101c4c20edaf04b3665ff92badf45548e3044 GIT binary patch delta 319869 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

0zOkk|EpW?PJqH%*uoZz<4lJbBqIwr@F<=1$x@ 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 delta 321094 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%0AoeZKK>Gbi?Pfc>PxsF5 z*upe>$2Vf;FSrLbN^w8P6-rjFP!8e3)UC94rhAuiJ&@gbE|(K>W~}g*hvgX@8CdE@ znFi#sa}|`*j-S9fr{uYt3xsEBZq~y+?rf#fg7RD{pSI|!OR|hPl}leuNv`|N36Y+| zb?J7rY}@=QLJBz4mdvdih&ajnUr+%cT?MY!4Uc1;? zu(Egb9O~lQD#^aA<20EqMxM&HS90A?)0J_zUd-u3vT(RWde+lJMLSt5_LKC>X@)S9 ztm}gPEgFHu$14Bf+@RMbe@K#&djSuMN@-0+j%1Y z^9fv>d%hbWZIgV1dp12YXWXcW6eo`r+gbHLG_G|22=P4*Wj6_GPGbXm_#Ex@xw6`Ialg0>Z;`E6lh$< z_qMbd*ZAlG^Cj2x9}|;noza{`{obB?z58y$Kw1ZCO~SGj#Cj_Ai0BX;Is;zOCPy*e(GF`cgPZ56XDXc{5pZ10v zBo!M(XEm){%)aNcOfqz6VQxH-?#}B5EtUnB?EqI$iCS<_){{e|ocR50Ia+XCM;k@e z+}-v2_1Yc2lyjxZxf=G8}BH$j-sP6XN-sUn(O-x@W|{~ zA$gDcnbi-v7U`czN2JF|ulIHj%4>o7a$Pdk_ME;>&l_~N8-GK|0MA?8U5=EZY2q{X zkIPn^J^%J~nA0Bh4Rkj_ugb|i$IYMy(j7Y8YMym$tliwGDn#c#U75g2PI$7(MPF7J z#$3sb`3B+txs;9QDdYm~mTpl@dwRN@?2|^@e(FsgrRv>>Sgp(%3|^Avcxkj)$eDkm zH$QlcbM1}&^ZoBQPv3Z4VNmLH6fH!IrJcN+=z=H1s!x{^R*m4;P%*1+JLte=TvhjD z3ccsEiXmAgo*-3P+QRhSV6G~=suVA#`{h>po5yfL!FD`g<({9q_IFl@Rx~%!O99hZ zt=VFTU3sil(%DV1Az7Q)dH+iq5W0Qn+Af}Z8qFsf{&|5I_Z{vE_MO`e6UBzJS=2a5 ze13+@UJ=!vHM94>yUU)QUnWBtiRuWt>0;(Nc`sLbj=Gu5 zpr@Nk*L7TPIvMF!3%55~Md|f+*6Wv{EI1$+igsE5+bAxm*!2+J<5XK+P+Sy})3s_` z%H_Ck5Ok6mD?XZ4790`0gl=$3|YQzo+26SKLQ zA32QqJC!V+-aB4R6WvUn&^AkHM}ESwY9XIJL(=^B&txgtJGrgwBI4UloId5OT1{IE zW4Sc_F%IoMy^3Sg&eql5s2aoVPu;<|AI&~V2bGY0FqTLkQLwYjyF8=a$H`SdY-oD!ew6!UD5YZq}gIcG;buD7SR$_gYV z_jK6;^xcHXe8Td$F6vj)ZC2fXm7H<87W6TkJ$%N^%40b8j2oj9pXqUHOv#;8iB#AV z;(|QRx|``laSR)Gq{KcYYs)&`kz5V;3|KA8lz?lgRCAKp z?-iagGp0T1@7Z$hrtWkL?K}73hFBwFUX+P5y_m<(dg%s}XrZUgo9N5~BrV(<=5FJ0 zdfe(A5Rkhzwi7-oXA1QPcdBP(Qvd#0wpPlSeQQa1MD9iQ6&;3*=O#|by0~2U6ZD7f z5&?O;*3O%4luV7zj$3_E*9F`lnsD?CRpGh^^W6$AEH;-LxL$S| z6On65Un*02P#&i1J4*^WVuWaQ12@2GG0I%o!3#O-*7)p`vUZkV(ZXzgEOjGY^@Ou) zO-WHqp31ee^Zs_$b_UdVqeZDwPe@)Q zTP+ouM{6ftPTI9mQ8t$=n&w-hQ%J&D5Kf3ryoPM7c~$32ZE7UK@B;ankS*qyXE zdV_n&beT{dmN`Cg8ux@RC09qmXH_ExrFXdb-T{v_Q8-T8bjC<^H)-$%s*vEP8uEHYsjp!@OI8DOYO&Z2sFKeCs zx75_N`%;|G^$N)5I;}>Hn~=vfvXiNuOQ*_xiqMIC9+3?&^*Xh_u2C7^>guNwQqZ*F zEFkNed_Rd2q8Szspx#QAXns?K+hOC@yS4#|HVNI@mzV~anl3BT( zY@dwtoX?es$UXW)M7LXIl1lgEGr|_`o9e+;Qcj&Y^F-Bf$*(R=2zQmgWysuo4y)pR#Qkg8WDk7JXVdM{wH~@$s^n~?(h^s&=5vf-TC3B! zR#!MXhq=Al%gP2=>QwFqttI`!r#OAg>9L+BmI98okIH{YQ<*8v8BeisS%1=6!Z_z< zj*UCZ*O$;~Wz%{(amYK010~JW?p(W|>*Esxsr#6TPM$jqNc!0SahVaP@E&?hYc2P( zfb_EKya)w8o z?e}=29@l$eJw|hB=@Z$&WN+hA?=trflg#qCHm9*M2G$jd6PWJon?J z{2XG0A28~id+_r4DLf{UhdWE|?N2xOAGkN*<3zbM#TRg)bkF@>{U`%>cRpFr7wTve zLqFmea^)&Kj(O0VYE%szd4Q5*YQ>L)SPK%$<<1u>jN8Y zPhf>SE`^o}S1#UdKj}5j{QJG-8QGw+=l&}CL-(n`YVI9JOUJ$HZmypDQ%Cvos&3NR zem{NcNbZqbB9+l!t8U*3be9bI5=@cCTp*LJe~rJSuB=y}AaxhwyNrKm9N zlROMcoB4f_{2WVa1z!kNMeDxVip$7;b(62^5^#DEa?mE3L zpTzwk=HzYkmiy1(0e>L3h8jwjzh=QKPhB6$YN`W!a~1uf=ZV6%R!OgOW^DBNT$@UH z(j}=oY%Cd|>R8!w$vXITRyN*|WtU4&c$R8xW(;TdMsI%b6{qck{fi=JaqK7=)BWl> zQQ8^*Agwz)w>O1;C$(sr!m%M|`Gekp{@pz6qukL|$t-SOkDPw`i9$hhiBBKLTI#&< zVE_F1_s*XrIV)?e5^0$s_RQf7d#GeUR-R59EoD4g$z?0KYrIVOF1n)7m7=TBht8(? zIPc-yLk%~~>rq)9q+VkC(HY9Po_BI3>G`aO|9f&dm{u3Mw4`hI zs5`A7H21rvHqy#W2YzSk!*uqRg`_?650aMjIJ+sMOVSFNH|fOwC_Mn>S`IuxyM}t^ zqF0L^rA@&Pxa~hYoHOUq6rn2^biKgzCbgT+rR1GVdoKQnO4BV9ch)`X?Veo0M*c!H znJzmk*%Ig7M|%$%C)=LsGk943Ey=CUdqw zMz@XSfoo1fH=BbjCg|jC)-Qb)Z7wNtzxMhB6~zXfvDw=__6N^qL%2t(a=Jj$=E$Dl ztlr$8irBiDuHRix+r2!BPf=kxMbSiPTuz?Wg$wIR^6*RI zc~&hcLN1j@0E6=S%L3t<@hm)Z7&ox}0_a!N)pdRS@>NBr?r~31N>)jB>N&rwByx5< zPE!xxpjC%R(ckT6{b~Q<316A(t(ednj&y%f#4klA596-$k965TWXmw@%zuIw^R7v0 z$Z9F=DL#dFq*AmCp342f{kB(`Ohj>+Y0Egdx>I)OBeL4DW^CR;ZN3M#sEp6a zO5TuiBty@0*fO+h@g(h9$UEqEEs&YXM$cZ!m3&ijjsKae5fVE~-PH@Sk>MElaZIsJreC_D}i!$oQOI^l`p4Xl%EDFfZj0|9Ph!`~O?0%B^Y7xsCB$}M}JKsE3 zGPi|<|0$aXG5KBt^?T#m1zBRk8NY?rKKpFAQ=Nu!Y|L3svF=Y8f3DaXbkk&uw>&$M zhvlzQa)5ShbX}6J#|Y*wVq3Yd25*y_;xseWQJ*}J*BAC?R!`BNUJ9wBZZw+hNsD*m zw#?-+-Jd_chq{Z_!TrJG0GY)sI%Su>kLY~m*_=KuH@U*XAEBk0KL4foHCX3^y1r5O zcaZyE%{rtn=C1s)y#Mg^Ykp-?(Gwd0<=PiqEs;hCHNvui8ng0wuUL)U*uvPh(27>N;;V2uvSai5)iOeBG zIi(%@|HuxP`&-DN&8$O8K9PM3UB+p*o^D_3{v+Q=jw*YS{ovo6A$u&J>*RfP^%`A( zYlZysPVgI|(2q1(>b9u5Vc)h`x|hqLw>^wNd-6Dj((7^(`@H%{op3+14DO(^y|_z> zqG~}EXGr$v&h#4_Umg7l3kdwpUH^1Z=%oKhjf+_D``n1CTYIj6lAA=mjau~j#8|S# zDWp++50^|kw8nKP=iZl;-sh7HJ1=7a!Kpk-Cdhm}S$bc@8UGyZq%C5(cJg1L#prtf z%~Fa)ihegn^UMicOfQl0fOJ%v9-pIis%sm0IvLxPwt2^MqdKm6ZLQC<=9#Fs)8;;J z4QRKf%|dU7HHVdY4_}j9=#l>d?<9p70kqr{53K7pS`>eVpPWO>3fbo+?yVNQSEIkCFl&wMxP>n$}Q! zM|GEk7n}G4)x#3LCfb+c+p4D}{NAG%P$RTa^%9E4LTuwrG)CvwuM6D}B zTzJyOQ^M<9JS#lq;{Hx7xPD(ArT6tXBE4^fiV1IU@ucvKi)Vy4y11t^m!EafQzSum%4aX zc+kcDU0I-|daPg$@u#0DeSGu^T8w-xOc(9xP)ev%3u84?ah`D$| zc(seCg~wgo{uWP-iwC@{P$DAVp2;yhM1di;ohXG@R^jO*&m7>RcHv5uS4K zn}pZ9cuIKM#qSf|fLynKlg%KVMW363IZu*~nhs#}% zk_U|3+&)6@=Jp+0H@B~Cx_NTxG2H*%5pj8>!_Dn=ft%Z1Z#TD(Sh~60g44gxw~wjg zvh;IjNVLH1XN=wH<#rY=F!n9KK{g_Coa;}&ymJ*#2)PK;@|3v+Za=2sPH!LXbMpr1 zTe37T5~3N1h!L`#uBioXKh>lKVERURE8flR9pxxO!9`kypc}l)?>gEkCaQkIcclrW(5`cJgpH5_d@_=EhpnI^j{HVPjZzlaC?d97Es?pdi!d(JAFY^_DkIn_Wrq> z%hUP)H9G9QBzJoI`xI_&Z>yUNp%~TFjsgV}4sv_v!CjF3ESHL1rdFK*8|tT*J)iExP53v$29wnr)&$$3(s03aL{Cu#4{ZgtG}0V z7EzhwRR4RxM3G!X^G`eLELFhkpzUM8JPFh<#{t^)JD+s6qu73{N zx)ksokiH)H&A`*Zy8(|jK*X0|>J0F%z#D;=gF;QfPX+FQv)?Vi;KK+Uqi7lNWq zz~!eWj8zL@5!(X<`+?gXel!0TL&Q}eAOO4+cq#CQLD3-ar(x8T0pASegf!RvPp8$t zb#Gl5GQ4de9jkyZgMwnf1E5ef@aG_X9C)-hMASgU{lF8z?a#Vty=s9sLi#%3Z-GK- z;IA_0@z($mYoMSE@S(sPf$N`4w=N6(|3GjPaJt>y>=wfMU+%}6$RJ!uYyiP!H}W=} zzB7$H1nKpUiCY&2z7rIRSgz|Ifwr%*5yW4%rO+{bQ?p>?)sX&UutW{;TYx8k&mx6n z{-X^@xWLd6)+HeWJ;t7Mb-u~!$`dC>cFpz8ZJY#6 zYaqihplAa47a+J6_|>*nbS!`hSZ>?OsBUl1nKGXH91%9=63w0+!2zc5+)ohr~=aW01E{`A>?65|28NZjX;FF1ZqTA z0e=}X#DS+la1HRq!0Ul;1WTlu^ZI`$G(iJoFsl=>LhmaZ`U?_PZdU4l?Y7wyy_nf3a7~X#oBO)Hnm&zVM^d7c`%1 zq6#CjkfBkh6xRfND=1XfT#$X*!sG}6Uk4Sd0DhL?(*9wHm=75uz@s3z3ix`MaALsa zc{ig_)3wd>1oG-AWcV7|CJuZu@EYKYz|^(C3qhee;Ip8dlyEb`ra;Zoa4%;c4h4ll za0BpuV7W#p2f2a`NaD@o&;F8nB?sELFxW)AKz@r%9 z2TfC;P%S8gybKgVUJVK%F9yNFx&71s9bwE`3<`O2ZKhNb6ha;Xg^*`k;PJ~rFlGp} z#6cnb1BcetfkMbDKrr$q%XR%Rq7(!p&$PfxL81Gh$x@&Y@~{<5ay4iB>uNxoVTMEt zyb%<_^g&Rl6O4i~;1@S@TK|Kl5TQIE7tRE$bmm+GD1^KU zOozM<6hdABf{`n@qtYE$I2B-`UeJ~qPzZSp6hiI?g^;KI2RH2>22C+T7!>+DXCJ!C z0fmrPgF?uQK``>lD6Ic6!UHBkUT|IWX%u-SDEcfkWfl}g9?vOC^~Z<+Xo@`D0=K`b zr)6UL2q^SOb8lBwz$fcWcKlUC#9WwI;=p?VuL1rr%!~=(_d*|1uz!F&S_>Ke4H@cy zUja3!2fh_}2KXnyn}E*+MLpa!y#C(}f{UTe-hxgS1ilN>R{;MEco_H;v>fp7a`q=d zrMXT)KU58Z8(QF1&?hjx4@ML6)c@kT{p&#^{&gFcUI~Jc7l2^owJq>65RB=w#7+Ox z9T6iuAoxu%sSo%x;C|q3ffoZ00S`3usOk+7!R82MKS!)>5dl61I#&&F`JRw5T>|)> zP<|5luV$W*@mB{C@+`3_C4V`v;z3QU=)OfoAb{zP*4Ik9FSK+LH4shTB``~9XU0rKLMWy6{`pS4etLp zK*UH;CIY7r5y-h>;BRt;dHj_^1if~ab3x!Su#o-an@&0acnH!rKm{s*S3-ru zrVXeNUC2YFQ3db-SRxEO2<1e8 z{~Oo;RS=O60#YsTh8B1=@Xb(88uo@QH|<{o8LkIQRDtP`*FyRNFm*BP|0A!1^shns z^m17LKMk5TLWa$dAq)IVNbiA8mw_g*-#^lI`Wnjd=h9RC?|_KnTm)@GK|ulFpTg)U z1%4Z}aT!ssJV zE$}S#6)YzP={G?Is+sfp|0#&5fef8scRK<6en?*noW8e^b4lRcp|7NXSMO)-Puc1r z;#9Ci1Mp+Oq#58>18)R=Jn$^=U#yx&K0Gq{BnU15{sM6OJCC}u_dr|vApNmWWBY@Y zI{htRp<+sJX_`%QwRq!}J@^lM45QWELF+&3g zI1y@)0iJ~#Hv&Hlcoz7RP)?I@bN)FHGK4@=#tc`h$w{&UYG#` zFvTJdLi$Befuih zpE4uWXxsz81DYlQd^wa;3%oB_y8cSIviT7*6hqDAi zF?*G*>yHr?kYOU!EDZcFG%4^sz+=D*pebvBpGpd`{Yi-gM7#uoYk|)K?uX8ZJPqkT zf*NOl-`8w8TK_}D9LUfFd^^-2c{T3=>!irjE${+(q3Le0kjHSUzb@#IW{p$@WI*l* zelesk27WGD2oyr@ffpXmjY5V}C}<$mI1YQa$jc!8SCBpc>5+#a{f|^>?M(YuLd4%t zvnt>#K+zcR3P@iK{0~T913UqWCa!|@{|8V|Eo8V3coKL4%#6igQsi}z{zT|osT`;J z?}3Q=T!d2gvoP9BY2bH2Cn^KM$QvO215kbl(i?8aUj{OKt0jud0-phvXafEjm|8)n zdl>{506zoLM|}`+3S;K6RQ2`m~%W^pv22S5t z&A9-W6nQ12Zv_gKLi$$t{7(cj$S=AWAwkH1yb97k4Hk+4{}=FT;D=dD>-LXB#2;XZ z8sN`B+t&gg3<6TXzscE$9?t<@1m$OloBpSjc?C?Ag$(xlY`VNA;2%Ii3M^CuJPA*| zTn@ahnbW7=AtKcrp^ADG{~{!ld#(GvtGfL{%Lr51P$Dv$(z11MSt z{LNf?YX1~O_(4EDaQihjtydcON)XThydEl$0bT;UNps!*bQ3sWA_bdA10X{I@CCUV z&;<E~z@zp{kUBm95r=_7rNFmAK|$a*faOBK{{@}20{9_Z0Um#0h`0nY zR04kqcm()T5L^X(EGQZSJ`vJaUoY!_-2~$xLmV>HL52kIZP50$zz+q>C4u`OeVygH z{>305Wh02c2W?yr{Cy}W4cr0V0GvK7mvb552asI0KSeh}#8glyi#%5h{Q;ZFWuRyQ z@QqN82l#!>ibjnD$RV z#C1^PTHt5H@Jj-}0R+?mm(Rc%g;Ky5fF&AkkoCWAf(1~s3}lFdLXE($28FV~tDu}F z;6tGtWiP*V|NpbOH>!eM1YMRxK_1|j1NQ+x3M}CVJ{Wj0@K1FG?Dz{n#F1d4QsBd( z#zEk1K|lz22S{H5{2s7GGz<|>LWT(No1w;4z+VK*RRdoG>EpoTplA*As2P5bL5*u6 z!?~bP61e?9tCmv-Tz?SRx)ku9!0Um(jQjs-h`0+fGyv}brpo~D3^i*6eh-wB1^$oK zQn!B-L_7xt6~J};{Wb#~J;2*Q6Zn8{fb@RgB~XE4;->%U;ddiwS_&C9K|w*__0TkB zz#j#LLcos%UeU~>>TwVdZjMmmYpucm`@#1^j799|PXWSX#zkHAKvXn$-Xg zLenIGr$9h0@I6q0B=8p@eO(kHE&~B6;3=qCJ@98h(FWkJfPf6}k0E`daI^kD5(H!+ z!)s7b<9*HBZubKB#hD*K49Zu2;9v+<44k@zo&RX@2@y|#LZ!g*3CJLD`K3;yRvB?j*C3!8GU%acT^#rm zVAC4lpWDQAOaLDP!><;2v;b<5gb1yab#=g}Lk&{E^@n<`s|P+9%1;A7kjvrrZ-9sb z&@==56DX(=cmwb(aQj(DtyB~6_rY@Xq2cDfAcF^Zci=wY{26Vwg&%l6 zv}Lj7y8d0Epn#1a{u?M%3Vbv)K@d29{+b1s0dL31{2v0|pUP+ZQ&a^+dILE-P7*{ z!AZ#QB-Ee|cn3(I0!|-`&bfNv{Hb(~N(1khvp>Z(K!kmrT4%`s-vA0V0`CG%kOkfk zcoXm59KE$e^X1P4Kz1t7zA zsBtN9{%E|>M+Jd*VPyU<11>)$Vt6RWss3FdLq#rvemw^Shk?_NbmUwm@U@UW0{lIw zSQYT|brab3k3qzTkf9p*1P~Ah?#-z~cSeDSp_3+n4~FuiwGiA?>Y)XN9pk_hfhd?=Hzz+o;B5wMh z9)53wNh=`3`@qA%3t>vG1U>;2jR1cP6s>CJQFSY1h&4y3`PM|FTs82+payZ^5fD%V z{B0;d0sLFjG&25bA>wr?C<)vTg6n`k4(U_CZw1TM1MdOlq@xgV7--r6ygTp=@Zlh! z5qJ|Qlm&h`2yPNizki_AMliLyxp@?P3ca@g_^}|^1N;aO-~+x0%J&1`h423sL&R37 zK>)b@kyb6I6!;`iCDiBn#O=DXo70s{{q2r;70CWt5pP1UWGET_$~!r3_J*YaISRvf(mid|MU!aItU0shE7m}3gBMg zVc_k6R{}o?1V@^AR1JZMs^$oF4b&h8JOWKn4SWeyAP)R5Yig2H1AM5FE8{N#5#NE} zTHwP#(IoKU!0UjI0G!es4VbbSBU4-sWhP%-e;P*4E)nNZ_W;0M6`5d`kd zS&rJj3?jOMfDmvm2&e#F4vL0>Plj?Tf&UCm5Yb%sKRx_@%4tL|3`2%7ARq?(6yVjs zPX+;T;D-RO0UmuA+Bg9b8BnMe_?5tuz>fwC)d9!vgQtMs%jtRi)kDNDplKTT4p6iK z_z)1B0sbr~+6eqquw2%@QmvcdG>B+|4F3VHZfhO|KZ2qK!21FB0G|Ph`YhM=KL={& zw-LlcAh;O#t&lzdyZ~xk3j8BbCe|s-?V=gBIrkIbFK;a zkI?pNZSyFo15+0O{{hl_fM;{1(-#-l!ur1gBK(kH3h-j!heMMEfKP+;rNGyNLctuT z`mYC5m*paqdJF`FfFB2@t^j@}2o3|E4!jb0A6>p3e-Vhd2?SIDe+Nt*1AYsnuLfQX z6^jG!59y;d5b+e4C;|K`utY8JW1yfUaQ&mK*3|)D4m`!2*Z-$M&FUe;*|roqrh$in zHvpdjJOjJ~tOFW>&&=7MGG-y-Q7~N-@bSRa?aiZrenvXy3V^Q%%Xxr*XUoy;?}LbQ za>dYf0q`=gP%-eo!K4A;H-g|&;O9X(LE@(W=^5}nD5wlF42L!j0Y4uUtpI)^loJL% z6%?v$=22Ax86wRQY8D8n0)8~4j{#2ruLl0RH8qtN2VQB)m+@Bv5ot zi-4;;nn%Gr;03^^gGD{ScQns`GzuW%Z)h_=@Ef7V#lZJMjRU|h0l}rfBRNH>{euuO zKNmqOBH*Wi=|aGd2f-D<--B|(!1sgnm744Rr-$EDP~!+>xC}B>0bd3+ivbTpIn}`L z10Dw+y%;pDfrx1!I05_;NM8$l6QoZ9zZBBf0bj_R$6pE}3Zaebfp>u#r-65Z^bNqz zfF{cTza7eHyaV?C7lEc($S@5AGy$IkCRKMfj{-jkC;)yYSjc0!uK#op;Ik3LhXD5j z{|p2a1OE^N1c09b=}UpXL!9kT!h#Sn25MFYd@mFf0=^h5R{{JANFN5iq&a<5RYJt$ zP~!;jrOg>s74V@@;}~!+lv53S8I%(@oa(QK->uMDY9K?-Jd`E@{6eT%E%5h2p(OAW zC{zc0ZWK(Nf{5jyX+7`}ARrC=LMW#J__@F{z`v0Sn+i5U#1$Yo3%n~Vp_+i#fF;yj z&7uxJ7B?NGkwE?EDUKn5RV7zH)<1AiLQ7Xx1b0s_EWK@*hbIMx3es6j9nL7(4( z8kYgjLO~(mhXbzwekCXr2EI~r+rcU!VmK5O0e%$}R0Vu5SRw}ePe@-4d>5pT#v$T! zh^PU+40rx#WLi$qTrvK>~@B^q>5Hj2Z1(g9`XKO(5A>jB+XcfRWK@*3Yc~o5lZCTkIq2eGo z0{kaXvfUgFg0Ddi4q89k;AUFxU7A#R0g@{%# z;iQ1Cgo5gUJD^Y+_(VwG0DKw<&ImW_|68D-M#yk0@GS71AfO3&5j3SrG>?Lj&@=_W zTjTz}2O?@fun+jaz~|=_rS>m{h?UTmLEy82mjSQL6-1)|cn2_b z1@IkEfw1Pf|LNhk7HUul8Eyw20senbvnt>tK+zcRQ$W#b;L#nBAr27-gMb>~J)xik z@E@SYwZQLy3M7Hw$(+Yu9YmZ70#d+V07dJ89{@ZJd<#^d0XTkVBx66Fs+-_0(6kXU z+zmVnd=dy~0)7)zK&@*Y1qmppz;a#xPa%WHMi4&~xDWVv5bOuO4g?ef-vH?Yz}HiH zwm8PwxB~b+&5A}<7$P17!Ii*&0Ra)<_ca%!s(^nD zmWu&D9~7!Koa%3eA4J3c z{0nO41O5nbKk$tppcwd@P_aOcQ~h5AO-pkTO8o^q2z(CkGT?6m4*`D=6siFJkmh#$ zg(2c7(6kabesU!O{0^{074Yl9qA}omfJdt#;$hG<4*U_|HNYPQo&cT#OVk421{F&( z=kw#YeJPkYqG)s4W<1)c@|JP2q4{uo$D z-P1e@zO@zB?Oy;9O*VqK2Y62q-~+xH1o(k>g!IM0PXitxZu*~|0sDa9Qphk4Y8(Xq z1PCqz{yXpx@Ux+uie?^FPeO)pbA(z987hHqf%FmJ#ZZAN;AcXghyibJI;o7mYKXWR z1jm6t1%hjU$3buccsD4g7WnCqJ{g6GCTN>F;CDkoDd0^|vwGl{LOE&RAA;Zp;b#56 z93nE1;VT%&jld5Fo(29BSf~m32~YubZ}TWP1;77O01?kXK_1|TK#hIC$AbVr@abTQ zV&KKO3Q+q8AmUjNTnfB3SSSd*1QaR*{tBcI0UrkGD>T>rPY=K6KyVl`e45i#sY>A8 z;94;P{2>rf1$+TmA_hF#7cx{s#Pgs~9Qe^tvl`$pK>7smKcND(z&mm|JpPgp@j56} z2mCi^;}r0Vpl0>J*MXvG;2S}qhI^yUy)gqBGLWG&2xtU81JY-K&xZ;$0bdDR$=mb? z==%Q-H7l?Y#M^+T9^iX``+%PZ+z)&^C|V4BG*yi4Pr?Ea@hB)%3cL&~5d?k(2rdIY z3IvCMKiHf;swyDjCFn$9;3L6wmB8~rKm_=mz^j1&4CTiRr~2#RR}D3;h77ktjpM+N z0bT?A!{(Z)1n?D*z83gm-2YEP#NSYZI^h2SMN`0Eg__j^&jZ0};BQI!YYyI#-#+@t z09Cd!b;*8>_s|;^Wh-7TkcQZM?28n&x7W+`f5*du^p_5sJLkJHd&%{BT8FhxyV557 zm=0^1yHX~+QHOQw?Mj;PdL7oXcO^`Ctqz-upj~kTR%@Uqw_Pz4zE+2I6YYwa@D(~- zpu=GkUZTTobU0+f3v{@x4hKzmjt;le;eZLx)Zz9z>^I@56pmINsDa0T2|7Us9abhh zMu$7ee1Z-a>TueG2kLMq9Zs2WKOOF@!$}kFsl#1#IAOxw9~nS5 z!MbV?H=vVF&`pP9Cfrts^*g@1A|{-#!}`_RU11ac^I-}X>2Sz|f70RZIvh0NZ*}+} z9S)fAP8~j2hy5n}(Zf*!hiKq2;9Z?SzbLv(neZDre3%Yr|JD|GQHT9HoH602b-0HP zr%m`V9qy^aDHGnP!-wl|(uCLR@DVzkFyXaP4SH!1H(<36_txQ<316$jeRMct!dK{U zu?~k#c!>`8)!~o{FVNwBIvh0NIXX-|n=D|$Gj;e#9rl}WbgBkNY2Yznf)4lBVP(Q& zbht!^vwKV*(BXg%XH5769Uh>=X%il(!vl3VWy1Y*_-GwYns84Y)@Pnw2_261>aM}D z8pKV4PC9&?4#!Nmtqvcr!x0nC*J1ru!>+Ii|M?Jw2kCIggn!cE6LdIe!r$ufi8>rG z;hj1>Scm--j_&RCkp?Ge;4ul_)nWZ;{w`(0Z|Lw)9nSt``hX4xbvR?fPwVh79Zs9@ zV>&!shf^lJQHMw9aMFa=>+s1socL>RlseT~4Mu7ZHwjkj@F*RQneeqbJX(h%CVYhs zm+5fWgqP@WxekX+c!3U&(cz#8&(YzrIvgns84YK3#_sQ3JYb zaE1nP6YiwLlXN&{!fkbUvJOW~IA4eLQCcIvU&!up5SHgg`|IgQ(2UJ!3|Nq=G=P01a6*s^Q5nOP)qPUZ| zOz=2xJo9Am zcyJ8!c<=lfW)9{{H!yns0uJP(}DyaSvD z&STyRo)6Ap-T-zifFPR%t071SXE84WF9fGDF9yE>PGL?1F9Ihq&je?HF1REj9X2ELkCU6$>GVllBROZFt&EOQ~H1LPuB<7jmE#P?O$>6Qv80PWd zZD1R-BN>A25QMNG5&RL@%A5fH80^Iy3;qOLbccNaoC7Xk?gai6oX;Ey-T}^IjsSlK z&H+2ZLm}7+K{hJ{gLi?mm;=DO!Kuu?U>7)rSp$C#PGWxWA@Lq?JaaKP7aYTU9lRH8 zBX*R8Ux8pB1R<<&5&Q+%%6taAAMC|^5_|w$benwuoChvo&IKO?=QHmB9|GqwZv`I) z=iH|JOTsrma0G&ER#*)_3eI9)20jK(WnK(E4o+cC1AhrlVx9>;0gh*$3_b~tVIB|u z3T(Sg`Im$zLvRX$5LQS8e+{-WCxE{Jdojm?zXcZ+BYt;qKDdCn6ZkYZpE(kI2Aszn z0sao0<6uE31ZN@0W)22_56)r^0RI3^W%dQ11E(-+;Pc=l<_DXJFM#8ji@_JcG0fM& zKY|@L7F>bgCkR5AFM@vtTba**e*t?jp9Eh57yStf90C`B3z&1km%;hWJHS`KdCXhE zzY;s#IV{)!!EaE=W?l`x3eI9)2L2tK%DfnS4V=Q91~$P-%rn7ma6I#5@O5wu^LTI} z-~VkaNQU4KD1{O ze+~;mA-DsDZ02C_U*Ig}0PtOKDzh*69youI|Kwd zEZ6{n4$fv?4aR>W>ds|Ti^JFmowu$4IhjB{XaFXmXVKe*^7`vBMqE@18it_sd)jsypQ^Oz$( z!2Q1(1UW1Sg#u1HyR(^t!8O2H%mH9*F1S;feZjTBDa;x;5S+yPU=uM;(z)ZAi^0L* z80PDnaR09jfsF-Mpil=K!h8{o@3p(F%xA#(oPyhn`6ReLxabD^02rsB-383KV0<~( zozJ`j916~3-s*q=?{m3xSg-*c2F_+)4GsrqF)sr*0;e)B2IF-qcM5YFxCuCkc_z3i zIG%YjI078Q>=+M0GYD)fNCxApsO}KvL~skRl{o?2670ns3vLB2`h$G{Yy%fCcLL+9 zXzqOGNN^-L59|n!fB>)1x^q||6xkHvj)beHrz?f z4>l5a1jjQMgRw2+jv;oGgkOiCGXyqPxB~714q?6s#tZ6hEAtsJUcGgDF`oo?1s4^v z4}fF912FHS93LPl%cnJDJU}J@3a2z;@QR z?%;TE0dprXHmcnD%#q*(aGrw&5fI?)o;!y*6g&u=%^VEIS$=mGa{%~Ra4NGe_&IP2 zvj!dlPGWxWKJid+JaaJ^uVuL%F)X+a!7vDH%vZp8wcZ`Vd=ZRydE8d!GvF7%Ud$)K z*ynW@x!DK6N#FwJT<}ZaeC8eCWMYRqj|E#H7y*SG<_%zMxx2HOSA$1^vzV8GM}t$D z7lX%uQ<&4hSeB6tqi%6tZl zW0`I*=96Gfujm^405}!l1;vE|Z~=2C@KSI-bL0lx|Cd3K$ASnbEC=T>hk{ptvzddzZ-cX#1HkWq zQ<;6i5}d-Ufmec)m>;}Hyb2u8T>KvH|EnR0VZn7MtO47YuYlKrLzpju*MY6fXTa;h zUd$)K?}Cf2vJZf>!3E5@;P=4!%sU(qY=9t-1zW-IgL9ZSfH#7(nOB21fwP#GfjLwU@`>Pp%BA79$W~vF(-rn0EaLqf^UGW%n9I|U@zua@GWpr z0s8>B2wcG23H&GD|MOW82|+Ow@|YvQx4}8gq2N2A7Fkc7%1GX_=0Y3zXFkb{e0$Z8SfFFasm`{RBz(tqX z2f%n~$z8yl3wGd?f;*oDJ0Q@&dCXhE0-VFV0gMk+y0e*AgYjCmJBxW47#|;Zr!p@F zR|Kapr-AXM9Cs4)Ok&4a9|+=EFc}KI;27rdU>uir+nAHVmBAs*iC{mll{o=i1?F995nvoba_2CIg7Lj~cQ$h{xCS_j zIRK3BN4is)eZlzRl{l`Eqf*_s+#p{TJ!7IPvPvW8MnJ`(5rF<_%z+ z4R&WUuLg&MvzV8G8-Y`q7lRvvQ<&4hO~6Uaj+qcNg&>{>@7yZOO0Jeb(z>e@v5VVFMpA{m(k>EV$2r#~U;m%+EsJDWKe90kr|4gj|Ur!xD3@v#DT3bO|808S!yl!QN6OM;FN#Ir&%xDz;r`8pWi z_Hf&nuYkLNLzpjuqrq0@Ghlo}*zLu95{%ci-9{5V7j}&!GcZ@ z;N2c~K64~E0i4Gi0Uij>VGack0%tP^g9n4Nm;=CgNy(kc><%$1slvPXODPlfe_gA!mc_5pAT zUP5peu%HtJuRx7Z?kwg2@N3{yW?%5@;1p&J zJlz375(^%zCczAFJaaJ^9~F1UFkc7H0^69cfM>>z~STGX`8Q^&4$>7D{80PU{C)mcE3|;~bVNL{Rg00L6;5Wfu%(39Nz(qf>53I)h zKMR5a7IcEbQgA+VBzPG(k2wOo9Gt@(3SI%uW)23w4bEZ?0KWrHW%dP2a0;`w8u$N| z5G1kS!7Aca;CSX@@M>@j^L6kVu#Nc&cr7@D`6757*vfncydLbud=mUFxafQK0S5%x z5EQT=7yKSLpLqv(12~U)EBJkI4)X@^MsPOsYVam-7V|Rj2jEoZ#o*206lO;n1Rp|> z#DbaNE#P?O$>6Qv80PWdZD1R7GI%>UggFuX5!lL{0R9;4#T*O%1YC5MEZ_+54nYnC z1rUUH0)Gn5XO0B#0Ov7BfIkE0Fo%M7g0q=}!Mng&%mLut;8bQ`unU|*?4YrDZfmd6 zS#(Xq)t>3M$5F{E-kuq?XL=%#POguYM zc+eXvypIb1YqlpG&yE!ScdiPzEUM(?pbR?EHTPvCfQLs?m~l!ebW{bHTvmXB%N#!R zVihjnLCT2YKcI_>pQplun)-A2->-9cWLf;|((o`9e&O{>4kQpzrjV)>_S91fmsJMA zC}1oKm{c16_x~1v!(&wVjK3>$0UD_IiDd;0QQ;S+tN4~T$kebvnSxho2Jb3`%L_R? zxGcPY9<9hidkRzr2UYk3x|CW#g|CWG71%SC<6oys?j%$oyEJ|;6@Jh=#vcXf)k~hO zBBC7Molx?Cr@Ngl$~A&j_>{{ke4q+nQWpN;5|{h-H!8f1 z3ZGaOev!i+exH4*6sjqOxH5%Yl|Z%cRCsMwz(HjNT&=X*@lETITlDndsZyh%S)>3{9f-{8@|?9oqB`aVj(cm=0_m_p6hNZ0O+YCnfW&gd__ zXL5?CSI8DsMLkD13Pr|go`kURPkLKu#Gs6qsf0#)G7j)$JkX<`Put|AKSSv!EBz>s z{uS!&T(K~Zezwx@qx2n-DnbQMgdLs;4LlK2RD>WEK~ws|qo3x{FNTR=>KLW(Mtw7D zoLP=b)L9NCODA~r53|HU5wP)3HQ1vfY)}z4c_M^*BCPOaP(a(_q@SVmCoBEeJo?4d zySc`rJo-6Gf2h*$uJn5=eTTREkS9VrPlQwzp{a@xpdti%GFax(ujtXo#y=J4@7Y}A zE6cdXZWs!_mF&?!&l0LI_Weo!1nJY*Tw{ldkn4#M>4~t#6QPKR1w%WP=g(w2(3L4QdEQ>rLQUd zYMuA&XiL^$M$Fv=4lRYhp3A_S-iy*>KN zJo@cC`q=oV0{uOM+xW^`T;o8GezHfuqDLS5{&oj-0~KM1ir|K2(FBp621l5pJ-AYK)D4 zim*jRSf(=g)}tTb(ckaU&!=s2(x0L9la+q9NB;^f6|qme<p?r{T$5S)oWTM_Y0&s+P{8J znmRa*6H{f2AaPW5I#D7mx=~Y3nxR`T+am%bh z{nYMUj{khd?)=P#3rS0UDUnqV`_+`kf`!%R?lIEIIBq^AF9nMl-M%EpwL5!x?e|3* z&KR4$vvK6r)?QPOP}Guq|NTXUxn?y|GJm0A??2^t8e39iRBh3)Wlt*2w1oZmuait~ zY6!b?FK3@QA0I8XcRWt-A7UYis&?>|)-tKJUPG@u%>7utTU#{pzedXk_KZvW<4Jdz zdzCy}TTH3oM>R8JWWPG1YfS!EoMZ@v7yDa{2IFY%mvKEV<9Bl*mw$Gc)jt2IbBo`pAeoP|1*xB7Yt(D1jWxdFl90xg-%4bR#i%YX*A*Qsw`FiWQQLA&wyP(4 zT9(OK^~CJPyG|pK*&}z@@WhImNFVG*6T^+JseGzFnC7-D;>i4Tm z6At(0hcI<2KEIk)AABAae)X`*~{obWZ?t7$Wp8XbycL}p+95(O6 z&>5G^6!}GcQOoyBdMqvcrSNxifc&Mt7-YF9+k}XLb)M!bmRe5POpqqEP?rgELx^Zw zttJ=vGZ=x2Vb3^fE|BgJ(WGAC2rk4#Rfu&c1V4KW{DunpShi{)YP1_d&z>km0d1Q1 z$v8^h#NH8?al`cEblE|aWtv0RX?#77J)@RSC60T`TrO8P5M4UHL&Z`(*^Zy#!i^oP+}5WOhRb2Y-P!U{sA%GU z4(&p|n@16bxjV|X4Mm(~iJaGvOnjdkrJRYCPZ%{P%A$tCR{azw{-lXd9*|$pq8{}< zm7`AvdLb7rF5{}Haf>}sv8#-Y*5ZoXb%s>7lyvg>RSw!47efxE0F}kxHu->j7$KT@PoriV?cZd9Y}HKEksS`}mD|Qsm-26#o=28JNLZ3$ykTGlkxTT+ zIM!|c@BaSje*SR7JpTnHRpgSx`mo5~X{{N9NRqjaa$t7kn+lnv0e-hg775oISkl&4m5neL*+43jXP@%dyQxXSun#7$zRjoo4?5 zJxKVNf5-+cM726YsGIgnr##}qtp1DM^n=5EYtJAu`^oqgB86^62V014maS5>6iuou zC0FW~eq*Y492sq@?ATJAvfPsuT8TIOThXXl78Gzyu5Bd-h4p-a8_6%RlGm~Hy<~Mu zZU`B`o{^5_LbUeQ6S8VsQBy|PM6l1wPgOG&$bL4_KC%M__Ft*#;+#{%0`1Oe9^bnX zmvPVZJxI!#Ys0K$j<}4wNbH{6Z4(cgJpTpEmJUZF>vga@=`y5=x$AR?zwr3q-C^>4 zYq3YvK3pQ}9MJ=X*Wr@4yZKg^ha*Kx%Nki6DZ(rZWvw>iHOss5%{HQTlOB6%A2#Pgjqqd^9&zg@Y zS#r@|Wo%pVlx2m?Xe$Z=d*qR)%s(C&*YTfe*UQY?B2UhX5=}IbC$~k3I^C}xK#}%^ z6;Qf;<{z=DA@^I7Qb!BF_Z&KT)lIl@y1U$kYC4a7&bn=fa3x+JBz@Y6(1uHC^yr!K zJ51RK<4R^!*MU^rNG|Si8mi1!WdC*|qT$GGWQgN`Q_D~b^`=;ToO;-k^NSwO$~Emo zP|v{sBdq$f^fiJ76X?cBvAJ`(Um!rP?n5Y@crvBm2h02IM6xA84r?zCSx(A&9YklX zVZI#JL4-s;(+_nU{v~y>gH*?KuH*XKNTu$&!CbjFu3r%>JJ$eLqn8bQH}Zr|(AU+!xVHQ{1g+AhBnrOflDgRu_&|3op87QGCxl$Z1p^ z)Y@yHJ>wsB->zt8e89!$+v6~I-+eU7maV>J(QW?nKx$&X$5(U@m+_rNf+bPD-&sV{ zTV@fh8DVC{?S!5w)`!t$B0H+r+%_aj2IeoDUM4r z)}FB-EQLlSig8MbVj%KTqNRO3bw@`cLEGs#xmw8e4=qAQg$n8eOy&-eDiO33R_`OS--Nb-u=^rD)zA)Tu z)L1Y=#&#D2`}(to8u_tQ3<}3Rip&>?65_QdD#eKP(XfX{5xI(G2 zdA}!3s8eLWUZS;Sy>#>v;g&^mQ!mlX5+_fC+R1yp#6T_J0~z3g=g_+8_f<14YLIIL#L5vmrwT=A$6bT zW;HHxO8+r-u4{g8u~xHuEkj~OUCS%-saO#h{49;rXy{Zlbmsglv@t)ZMaz^}QNz)= zG(3jGd&H~2s-@BpCABH(Kd29-#jZU6Fg@N}qN(#$mX@3Uo+%aC`q1-Q96zZYC>6!i zy^KVdb8jb+)ccBRE#Bt9ePJja4P&KuFGr~~ho#3zdXHj_lRf*2_Tg2#^0<`Pg~uf) zU2rX##<+|`-(vA&KB7s_K z@~NfL@|7RY(sGr5u2l3y<$IQjo~V3l7U^Mp1L01?trEPYq%9Y+yeV|n-WOKh6gPQP zm`xMwsq#de7-IQRhV~QZEj#2t{lu$Pia63<+z^MkN64A|MYbhP)*c|9wR|Nf51^^_ z4VgDU)Dc6XTgyuWM7=7XY@%nR7`O;|?POUgUIe|c=qb8ar>BunJ^0%Sx5>cAJ@>eCUc=j#Rh7 z9tU_0W5NHZ6ia6U&F!C&rxHXR8iw2nqP-(7nq6&@ja_X$UDSi{ptY1?jM4qF}QCHKhmRCk@tx3;%?{nkm7*1`AdKWw0vfD?ThSwzgLffk7r)=$4s6!+Gfg zB-+i)mOl>^b%S;&1Dc)w4dxn;m(>P|F4~;d@|i&*#J0C1Rf+DkBdTZFE%_w{rMF>a zotHVwCk^b4ie6q_t<(g59yQHlb*ZSeS2ifXOcv9twpw+H&`_Ht=|EY zGi&si&T?Inh?aK-3v0{IX-rdD+{DP|^kmV8CSuQ%(cmRDl}~knJTXMP(d;4D4XKt5Xno)?GytJ*Vl-X>{3M8g%77LM%NabqU4NWqF;-iPql&^N8ygf|Fnupdwv3!=(%ctG-?eb}t$o|8{ z>Y5|DzU9--kt*%g5^2|!tzQuRTSn8!r_!FX^1o?crcvNY4}0%@IbgU5lE+>UX&rT{ zrdvEHn~;(*qCRiUc6a@2_c!H}iNfv=<-8ZEXS^@Bz9^Q~sJi-pZ9sF=BvC`_{kF3D zBRps;t4DQgp*qPt8#+n9mSrnHZE_O*OrzqeY^MMwiiXDjD1PG&~YPG*8Tpy zCrcmg-JDB*;NQ}>B;)>@C`!LpUVe!lc%!8?S-e&ABd%R}EC0PrS^3vxss#&^sUIJt z0YH`W9!A!3{dm+{<;xlVu53C&q}6X6jq2GKr&wwPyki#|NCq|D9Y%D(>Eo|D{b@K8A5%SI$;jNu*Bz?!w zKE;T4SSI_95!Qh((XgYklGFrGRzwdoSImY;595q@n$*O!&3iJVsHTmmddGW)rO+6~ zL-+Ki^5ZcgOj}G|LOIJjV`xg1`nH0WV}-T*TpDFmmOH6o{*&dW^mzB*Ec>NCnWf*y zO=Rj=VWa8Sr(;D&ZNmzccI9!xIw+fm+w$Y#S{g47T$ydor^4p1`vhSaP z%5p)ol+c(&bEUpAbduhMNRYNvJ z-5GRMh6t|`B0rx*hIkp{hBCxw?1=Sb(95ElR*;JN){}8Bi<+A68*=2!qOqfCZC+oP zNdt$u3DwPvuBk+0cq}O$A!vC*JsSVH5C!}1An_xl^b|J&ZIBs#HkcC)rxXhJ5g$=p z1H7Ghr($DSiKC=&EeSR%!Cy3<6fPlNq4+AXdqxSTIZuhsKr~v3URI(55DiqKVM??e zq8KHzE72;5S}0MJ5-nUx`MZOaEL6#+K&_$@`72QpM0a?VDf(d$*Q_5zmzBt^M4ce| zhD4>iI%JQ-=G$+O@G1!l-G$d+!weN{&ZYnutZG}jgK!LLM8p^=gHlADiM>n1OSmmL z9{1u_rSfYY`8{6kF>95|za@F$D$eQJeva{|v}txBhT0EPQGP28SS#O45zo*{(Crk_ z+>$9nUKRbdmP=&Ht72k1uhL=LYW}bY@oAqgn!76f2%}-wUVcl^hc%osV6y1$@J0sz zjwLgAdZG3oqn99P?+}`vkuw|pt5x!%y-T`Pn1{JD%|}S-+>REc7v|lqsuS3tEbt8hYHWBq5wR^5-5qo_)G%wj{19rZQ zm@1n1ES?0(ahj11n<_d+bbvznwc4ma+A?{MVyP_?X)ahmc@L2Lr_#phck<#?F~hP& z4w^;}A$3yavT3xddPsgXO?;?jq{_k5L}$xG`RQx83oMbRrisnkIENDdBu~FCI@0rN zrRm~$9bXSg-#+YF95PN)Y%9%Yv)ZKI0Lkw|JIlRjmi7@0o$%M)#*Y zHA{rGjH8m2K1!l+*o&OOx=$2tB@JBkkloQ=J%;+c4kqiC$fsu0?#&>^OXg4VrP<;| z%RYHg!kC;NsBno!v%`-iOp4xl9CT; zyY1U5loGbvuF3{;#i&}zuqf7rpcKV^L?gjkxo)ngWeYD`n(nODE^fa@+Vc+w+G+jq zy4|^5JZ+Z2#X)gnfS4`xrx=xoqzvk$@bo^hl|*#h+E! zU{`$qHJIv?wB0%r2CLaHU8gu^78ka~r%GQ7pw8QjDgpC_vtlioZlku)!Of8@`R}~C z9!W8Gd72uP2CwCEJ)%U(FXxGn_8Y76ICNF;I8;xkV)4QAB{Y0sZ{^7A|7(^!-`28z zng|K#NApoCivOZXw6}>(#yI&*nwVsHSsq9eEq%VFxJbh#@1}`Pw8-CjzGxEAh8%(; z4fIiwBIShnVuIt@S170Xk7*aw!ZvO)4aOl)nPa6tgG2nAP7Sm9H=P|8hPc^~#8Y3#N;o0y%+KRtdKm${R7cPY)vG`YS@#ipNA z!x|u$*y(x zRo+}6>a0+FJDqO zqQ+Z}VT)qMh1rx*rgB2F!{SL;Cyf4#3_}GbhJ{cQ4+96Yl^#N%2d1c7WI?-`JAo=hC9zRVnhC;LH`7gm?u@v%Q@MI#LH;tIFSu#$lMNP% zngQwT=^l+53oBNVeHMyWEyb?A3&l}OjSPGYl1j;EgXkJZd*`Nndyxp&0v^eIi$whz zLk%`^un!rzU8#}3mPLz1OUM2p%ElFFWG)?|+*9r-*|HRrjmlKIB}t9X=cg76^yBn@ z5IQ?-tlGtVjS#LgoFe_V;}4|>Q_N1i$x8~N;!A2sP8-N5fw4> z)mgN2OWe%TLvAIp)-YLqwU{1j|B)vtCF$oBmFWf@?4;GBZAvs8qWN+>iGqf`gnBx0 z{J?$oArky_4cXA7#GI67EnMnX>7YWK2q{dG+nh8rZ?HsEuitnYjaJKsA&q}W63poM z%+ydhXo(1=U6j|Ch`Nrzaim7GlWZD1%?VUNb2R?Egg?*Y&t@8X%w^Q$)ehr*HL4V* zb4OqB*IzU}^`Sq71vDk*y-ijG4ySIQ366jM*+N0Jirn(J654%K*<$Zy^hF}7omeaRVd zs0Moy7$;YdL>;QZ2PDyyiCiU#H>{{{|PAj9= z%!YhhZn5#P4Rza9OqIgnz_^SsIvIA$tUewEqnY>b=HDauRA8X|<}Fdv=l(MYI8Nv7 zZoDNLXuBUtYZe{5xj@euF!<#J&#{{<(Wy-cn&CfZ2J1Yuks{oL6{5>iah*ByOqKb5x~SFvsc?x*zpqvB z%PRQYvf#lKYB1O>Y_~f}UvW&FqBS)=OlAcSLZDFnY>JozuaqPsUaM1$d#%fB&=|NNG`D zBzoM;Cl90g@|;ON)QrI1Juu+&oXNjwk0kuYe2IRiUl!+c}SE^WSZ2Dm`oj{ z9C$MInI<2X=s|MdJEE)Y3+g<0Ff&)6e0ak8XH@BrE4ZJPd&2Th|3x;FBCO6O>MZtL zawz<(Z||7z{|3I6f;q{{a)K0%I(SQ)YFCXW-*6wM35jRUC-YZ|plY|#xmseh_H?cW^5II+$mb!+ zdbR$|Jxn%RC7KRy(w05)vdR7);P!NfqQNw99Wz(GNGW9cX|$G4qeI_^thInH>J_k) zq(#BMs^GJ9f{Z#%YLRQpDlx#f@)25#ZVmUSak7QfH;OGCdh_b^&@VA&^-#Yn6#Eas zS(^%dn*L3yb^mBy$*W&xx5xc5zV4S<`2k|Po6D;k#mHLQD2Pmah+OOO7jCNPvvNdYiHOZ4%!*^Azx|v#!g55QhL$&e|$mM z=OiSbr?@l)>P0P@K~ojLbbH1(ahCg|{jC*nye$b1N#H%&f9OHG(`U559Py^8+CGMk zl4?}6r>P)!>1c?BYuDYss@^d!<8Ql&^+qYFTUcZ01X=)HDeBOJ@})OLwQk+$G{(@F zCY~rgJ9+1lOVUL7c%T{7ksU(#FQ`Q#Br?|S>`tjgy8DrXD{qoTTg7n8bF%+7I%}3D zr)(1geQsj7$aLmu^71x1(S3CrZRaOQv0coz7&3J`?caVZ&utgmEXl6C(T&J0I#(vSEX0@AeOWdLAHlY;^y4IkpJhxwLppykN4~VugRSMuUQQw|p*YP?} zo;8yyXui{mJ?mQ)JpD%wUiA|NA4l-(92~v!guHn`w6v!3(?L|z?^!MRd)Yis)N2(< z&ped&EG6AZ7v;4NT5{TLG!8zZ(w_EarL5(e#x<_ zoN#^kEp4b)-E8wp?M!1pzl!9|&hW(_xO)CBymd>6>~~%C(-N+^)?OF%E#9%x_(Sy4 zHe7YZ{Xt%1t*k75bOk4OcZE#7A%ZRMy4KvF^H0|2xSmn=tsE+HT;Jam!MdXb*DvbL zjVwMu7gh4X41IQD6}sCKHQg00*@Q5K3u zO|W1a1=A-Iyv+OmaN*jWXyPzCIzvUs5^i#jTJ z@Lo>5kqYiw7X0YX$2>=pV;)iS(%UGHXvY7R>!U}sreeu-`IU(M!m?PN()18ZhU>-j+ailzVlH(1BB8_knB-oy`8paiz}*$o@9x=_CDvBJ%m#} zO&2vBeR7nIHv`Bt*)Qd51G#XFg&isL_! zYn$nlEJ@P0xgKnJQHD3y!>Uu*v`*?E&;65>KD~tWf}9sGYPzO0*E?z2t!L#YEp@3q z`+~H$(wkUMsa80ez`5T|kg2WovzB3UuubpiyPg7ZgLrd;Txru^wN6njI!GzgtSP9q z-pewS)0fj)>l?L(@40G6>W?kj&%0&qwv^#}yIs$<)j!oNgQZVI7uwoLJ89 za;$v2z5Wdaj_ja^X%7d<#dK|3MJauvlnUsgrsVJJrk>j^kIfd#V@8xy>FkSjUFo3f z7A?UhlcwmkwRwZ2(MfL<{0wY0Yr1;==n-R{KEg(cB)u=D=uc_m;$?a#eWcdcE(<&9 zFKU%m%DB$@a&5Mx)1~?*?c=BAqAq&8_W(-A=~tz{Ea*bs)ZZoxX6tobr=#^ldbN+T ze7($`TPR^Vb^954)!HoiL3jN}OK+LhL+@efBaijaKO}mkr(TyRv!~uDs5c5Wr?g!n9odbxV^(vvOLUN&los`IB~0-foXvBb6OY5gOk>6vzv zv$659TGfto&R2)Nqn35G(G+W^TDr{i`)r}h8K_fcKECQR z+|8mQt8)G$s`|<Fv-n8@(&2!OzhDGKZHi7x3a=oHHHYMWM1MR%YG#1LaI-#mA5QtNc-N@~G$3jB<6SKm>ctjKx5>~&G*r;3RvDA9BZ9{Uh!BtFD*U z>8mvFo18^rluOIj<2B9IRu0;rPqnz^i4A&Yv)>~*i%Y+77S>Ci;@|8`W7MAE^k*mi zp^6y4yXL*GpSNf~{_GmIN$+c+r^L-4=p*P-X|vvyE`2xabwhro+?+8@>=_ktx;4Zc z`7FhD8dq8F_sg$x(Pq7=xZ27~?n$o@F0)!zs3d>etT*XOBI+l6nmY-@gVSiFL@`gC z`7T5}w{X(oVy9P4@jze_DJ0qHFnw`aO%~iga$(gPUCWpF}g2=*dKVueOq} zxb#3D8Ow>;F3T*JUft?Dh;di}s^mAQKn85nds{BK61S0geI7L?!#V5Ty(Fz4lb;W4 z?CSEdUdymtkb^$czw*97kusxPbgW^g-dGE3AmexH{j_Um<-0rep4HE_@|wD?Z1-_F znRj`Jyth*i*CvL@db{+dmUAxqF1?Gza#p7A)?cxF&qb0xF8z7Sc{$oe8fPJ@Lu;WQ zxhRL6)A9$G{wCq5&-F0UU;Me=&~ir3n@lfs9Qj-?qTjpr=*unn5Cytk%GF0&v~#Cj z$M@>pE#CQDT)(5T>KFQS%eSt@U+DXV_bHYx{L&SFkQ&YV1mm2ea^4ZWb15YsaUD6L zpSFZmJm7<|{Ua>aySLt>#|lq}t~=;BN0f)n-Ur^Eh?8 zqplB+>-#NQyCZV!3B5s$BOGU)AB|~h#rcw1)JmQ{Le<%Mf(*WYuPivBKeQZ_KcCcB zS{suh89Z+{`|+QgN&DrAuPEaKGW?XDYx%-ea7wRk(PDPF?tZPe z)-=D*Tut-!e>9(5&U><#uWa$1en{)}iTv|BeU0|v$MVgyblW`pkt_Loy@n*ICp&}Mn$vOd*1@;(Y0_2^wLZ_8|#{faJi>u?%GNZfxHi%VSc*6;e8n(K~q zT+@TK_wUFx*Ys620!b?_Gx4GQV1d@FbsjBmgx9zu` z5A{%4C5)E%$KKL^u+aHTawz#+5jEm!nO>x~QKFji+af)je*Xp0Dp%7#b*Dv3m9E{z zx{pOW`nEiHTfd`yyF$9|=s#(HE_c2Cmp;a#Em|fY-_<8-p%>-EdsL8dzi~l=H*!I~ z`am|kuiw%pXUXb+>%Fzs=Uv19*5_Najc>{;5A?g*_RP%}|Isa$rLG?z>b2-OL=~^n zWBuEToeF%s{1)y-cXPAJP1We$lo^-kaQ-4SuFU zkzReI6}($!+Xo20MH@n9(49wkl|8UNzDA9uO#cPd>6d36Gw=#DkDEy{zeKMcu=CL) zUWml!&Uqm+Q$8xu6CH~Tj54&+YrcS_u?BgR7Si~~_S^VT?!|9)%A*=eN$Y=DaC&0> z59=59c}K7^HEejd=erFrJ0CCwTW97UR0j8Ryr7p#I;hYD^ZtFLRsN0AJI+>A8=R;i z6}4q_kbqufqT;z|kCJ|Lpx#dJFPLMgEaW(J`lHzYd0u{dC*OxQ5eCt#ZY})+=*IGT z6OQMQPg#sw4(*BjDHXF8#V`E9%)j@j#9YHBz_K?T9eL_+Dj2Qz?sAsR!^?#)0_(flG+mg8RpcT#@q}Z7GLri=H5#pT1FaH zW+-Fc|4#y$+#W{D4Dt)-EP5LN?`#Wu**S|z2&eY}u+BTo-RdtnKr<3)NZzU$bu2%~ za=m*r4X{G5M?Vwvo^2t*y=ZYXPyfY*Xp`n&8(qb6Z9THMyGzamki z!9udy|KmiFYd_)<_6^1di!s~NY!HfR*G;oisWH)Ond=h%4KEH+*nx~PXdH?@+vLT>Rkh6hzp zI&aKmozLl_bY7PAeT=$QQolrhX>uOVs1p~sVttH57J44`t7J5)k#P*=d(l{x#Mysb^IXy4?JH@&ob*J&gWPPc*Mn?j#4JXO{XAbx@j_Z=U>*@JnVV!_Wus~In(t9ndd>G&>RR*g2tR`=|KDBQX{j`o$)`}YTYSts z@(0!XEjhQcF@-j0iz^$mEpuJ3_!)gI)r#S`mG&sa+8%5zH!yBN($AxQ(2Hgtm#n*DU@>qjOmuUu6qHb5jOrZYhW-BF(+|P z!D)zFX4SKvDDCCw>c&{D-g#Gkb>k^Z*!oLlQR2<_ek0%m6t~R3zVSqvAR}uUV=W1; zH8m-d#>ajxjiGh}%wrhpOCwz;UsRRLl74{{>2=p@frwQ2V_76#ASx{QH_}_@J(1|W z$RLWe*7Zy*5aOZwioS>K+Sn?;U+ zLil`zYIF&6PoyBE`z7hAde^@5WN~t2bX}uX;7TNubk~ziUTHF)%87N2z@V{ZktfjH z)U!i&&5W1pC~~C^Wx;RAw@4s=sB2Vd>Ww5nB>mEw+$V=nC1_Z##s$)^9wqW+S#Vcb zf<&IKXVjnx>htxCz`E1R0__hx1+Zt%OhQ$c$ffnj-u5z;TK7FFY*6_HCEqlVg557t zzAUxrHYG>uWWM@Ft)P{puIiRq&OoVh zQhlSIWvN_JpUh}4)B3us7Ntd`L@EWA1-s=ZB#?LO8&!hLQ&bY)e>^RtcE^4palhG94GG1T?nZqh4G1bK#GL7wGlw>(n!7l$}CP7c?8KoXjI=G+op!sy4My z;irY46n<2=t#C`>=E6;d?-#yT_%0p&bcPt6Ew8zbhZuC?q5c{9Z3AP17LhBvgc|MX zo#?5dhTT#izX&xZHQvGfmkvOgi_VpHM7&#oA&Orz=zt$M;MLHWROvBB7@Dxz%scW# zL!-9kb9uF)@j@l#uXIEUpB@M^8fwk<$tht*c+;NT(eZH+E3bT+-*E@V1j@P`H*gxW z2ZaSvuR9n={iey($=6>5Ne&r)l5QEaKgb^~nV*Vz zz%M+$()+x!eYnxx(Rm~pE8`}uK4j3)WA6M;l{>~xbF0Q|^GoKts7$6`lUz3M!ROh$ z#dJ~T%|AgA*I?kH3Wp%#O&UhgNTWSgfbc@8@EH=C6Oq}NA0Ns4;l_)WO>#&h>0DHQ(Kn4he_{>H!(W+Al{nH|lGF7vw^^(kjsh&5d6w77QkpYKNt>g|WD*JWS=vR3E#b zhA`i7HEL-z(tVO3CmWh_aHP?rX4uD6LT8J&hqdy`r6ZqQW9xDGaimexcK;ZXh&t?B z#VeO~Mk$OxeRLUO=ZY{pRmkq#85V;p8R~?*6KOQBzwcvYaNN|tfZ9I(@W{WfIKM2r zwlRVl4mw1=(n;eOB97q%%RdB+7%FGAA%{$tE87_1^rH6uHbx`*p3GGuE%bn_+}5z! zr&ERP8OP|r5&79+>gcqVG14QuNU~3qEMCb-u$~0w32HJNYKZPYa(Jj*(AEg4H}-h> z0+VymYuWw_X41(5vrrytYs700hREtsbZ=ZIlcJ0^)RR|48P8Uj*^dnWkt~WbIycSU zN)N)$7TORpD4yGJ`=0}wtF7&+VKnI8GAA5%iaS$Y~8Ex zV$nOTeh1`x?Tl)gZLr+k&PepDLmg>B-n51^0iHKR)@^TuS@z2A?G1ayi+!mOetYE7 z_C{R&x44(9 z1A^f9Xz`vn70@#*2ES6`@K)DdvvTeu`rOP!5~8^7LORpNQ)tvJi(I+Sf1c@<43r5S zjTJ%1_99Vw+n>g2I!Dc&3~}bll8#1a$7BkoGu4Hw%tarOVrKNX0i_F!pOcT6pHaV5 z_MsO;aSXfTt!ZBseq(;MpHnMb503RUC2G1jNp+S2UF)%tLE;0l=72L6Xftl5QRVa^^K;aLp^H0m0Ek4d&0ga zW6(pZabjROeUj7~C|7nd>Qvn`2u~%KN+0EhxlhQEos9_Xsd$;y*$A)T|4b{dJwxTh zHI*95Ur12ho$%k3+9z;Iqb^V$|E6SKr$V4exOWV5H>b*v&ic0+_W8H0g{z-n@+HcO z>tx`m-k#B$J_lrsr0hx!LA3iBRp=q*vKr>0U@ZLzsIVZ3Wzg(R$ zi@wkyC_+lS{3Y6`qdgcPA4VJJvY8AV)f<5D2Nj#n4K?G-uXX50hZpKkfJ0vG|H=^p-rf~`f&Axjd zIo8-7%Z2{AFJ(+~xoDZ!-3Sg!*sYXSlM=*N(38o+vGR6zT7p-V6`WZAceF{xX_ zbr`{~*)x7M_wZf7=#FBMBy%hkw|SV^{aw|!4RgpYBy@?TUFbIw?r=X6 zW5xtyCCFwyjUdO^CuPk(Ly6b%-e3BUQ)|=I#j4h2x;?3;D>Y1L?B&&hpH%yK2U7bY zht=@qfrn@x=NBu>1cf;cmc*AyE-IA{Wr7n*5K<=iTnX^O8&$N;N>GG)@dx-jyyw$9FUcVqVmz z<4>3ujhbF|GH?%tkYKFcIXsC%r`A)$Wa---YyJ~2sVv?+ggEEeRdJ^%vMCy+C{WRJ zpFFZcm1|Z73x@7quCY%W)ht!^Jnfl_WJXn5Co_5*wfh8;#mVz}(nRJX47Zt4!Q?r) zwNdd5`s5b9HcAad2iWMPgnJp^n2VHBRZ{x@==$!!oRaTv&y9O;5+aG3L<@ohAxcO@ zv?z%LK@dcV-fQ&oC{ZFFqK+bTmqF1LNy3PIlxZlEsZkHPrd^LfH(i>qPM= zHLBiO6b_X4B3t%&5ipx{RcZG?`YeqPw!r(yN2Cjwr1O3!wneG+oH7?kvNc4pC^bk_ zY>FA~=xyRcQ`Os{SDi{?R8zH;f{WjrkXgHuc-~a?EA_XWAe~=GMDJi0d!LMwEp$pq zR>EabtC@PKUEM`Uum!fj92H?tjV+DGw4uQomq%$ zTVVZaj6Mv3bRYVqiXP3?cWpBlFg!;T!*@2zB3}r0J4;RfNxf_^Qy)c^%jU9^*tZ3~ ztisr(s%BBYDRxJz@7u284IrF!VQ@UEAbCH%;{PUoy#^EaB~7%s#7oxJRA%g}2qf!C zB4XHhZ=Mh5S<4TNI80eDh z-c`eTLta~b19MaC!(M2Ydo(r*}_Az8FyGjSva7-v%$!&zd4Adna@ zV6(D#bCDRG#P_X%adQr1c=>Y~kq9J);)2moDq4EP5G$@`2-vQ2)+eY;|)$5$T6@=hAqO;?PbPkx8 z9dF_ESkev-l!M}OJ2lwyQsio{mc^z<)%I!wtQ1GJSN#=znb_DKlf6CSMtik*@Iny6 zaz8xjnCsM1Ae4?XvY=cSOL0J=9JUfy=~%I3DJ#rfc+zpBqX_7rR#p5qi5?x)GKyuB zuys&5#uPE7O zgtEL5j}WsCBV(34MNW;5((8)2ojQ-w4lD+va`2xZ6TVH32FL_z3z;KMCVZP5MaqP4 zlcSn4;oIcMj}olO2fodYJY<%mWN&%?q*H?J0Qmro1C#hWg}%S%@3Etd4f3Olv4TF5 z$C?wFi*q?nm-~6q! zJM~b7f{nJ-y)dP$CieGIizx+GiJQI9{4d0(UQmY1qDXJVR*E{kp$v^guik38d>vMD zFNVmuW&KVW5n^3$)kpDJDSqk=A~{!z$A|;XwGYrXh#Gy=;!b5|6PI`K0AlApYL()J zXCaz(nK&Z3f)730>D~cM(yZ~b*wIIAipx-6`lvHq^G~Mk{*~^gel-du3(*(U>xqMX z)xbQ^jQSG z%vs9ekC~rEr*$(DzYdS&(lunV1CqPAxh8feD>3CmPKtWCCWgvffu1s#isZrGu8DalS904f z;mOT=6FpyRxZmaQWA7c%2Cj*BQ6u8xX@BD5J@Jv(by|odRrIb*B|h4NkKA0~dn&&@ z%6~}GnDU;=Z;$d1%P5uG66Fe}?B3EBa|@@-GMt1D_m=qQ7VeRigb(+Y_~#bxot17^;1nv~lW>HTH83#HT5p~LhK=`k|>buOgCd7a}h z{X=>!nf^PaLtr`RU<#%CAe{zWF?hV{UBJhU=gb#+BUgQ7phf&*v3|T-!8y4b_0QAB z)gj{6cy(YQhq3>=9{B1~NpzW@7OFA44;s!E*b`k2l`7;7ay+XYKbUK|(i!R84W7V~ z8;{0){+dGjZerkgwPe8ud6PK^FvCXVDb znFvHJz(g5zQZRA7SQZnZgP4g!@q15TH8Pp-7%iE|6)%~< z@_izhm@?{rnXu-POjuuo0GRm8i%v_rBi27T&LN=Gg7@=R>)-PElto{ z$bpFT0<(LGlu4?;b)+tJ&^R@L8R~`jzZ7u0Om9x<|5U(5GQ9?+|5E`c$n@fr{!az$ zDbsaI|E7QrG^egJSsm;&RbxZ->v*wmvf9zHxQq@KMW?8-jz?4mx{2{qRDb80h|z5K zw{c?k6t#ghsNl#yT)No5#?)qomNMsq_4Q=)!mjpBQgF0*Tk5 z_cy$e3gev_E!QiLr>V!4qZ7pT>1tuOwU7^Q$6{K8p?HC~IUNIcf_P6sjNNmF>SwW( z6Jbf}LeB;0Fqq!bTqhqt|)$4(av8lbNcg+s5%k5pHv+A@=h6 zi2}(`;Kyx{8Vo-yU+TrlG@>^ZiOE66gbw5=^KY(@@AZdNK+qL;c7z5N!#8a~fWiIf zi3n-mBu{tHvITzVgdF6q;ok!}Z3ybCbe9>&) z*HRdlbUYdG)qwKPQupdRUpwY79&{BoZEApW<%{TV!zre^lsHUmv8k~|oM97b8wQW} z{^%xOCn(g5lGGfZMX}isazQbDHnzt~iUYIN^7(tB1Wf?42zJW5u&%rS$k5Qk+k+yjXI=nGlMCu&1g*BuHVcj)Oz!ipu$5bz4 zzOfg*0NtrqJIsYXz=lt`_|=$98e$7AMQMK_Edy`S!0(%MGJ@Y${+k*jDI+75XXpSV ztIt1Hgo!(fS^?q!&+bLelWDX?S*G0-gHu#rYeE+w2cJX}yCxn-)r_hwSR*PxG2rm~ z{0W3?fp=ojjQBkyYG`t#4Fs16>D^#*P7MM*E0+dvDLDMiZ zH~0W(y-wLD8;kDz!1DO14eC+@Y*YJ{?)g~^u9K^Ps5D>A>r}XzWEA`A^VL$;#u8!Q zH-t>%05yDaE9_4ULn~$)TM;*RtxrIdPHo|q#Jdhqiis!!Wn>zQ8Rg%5%M0FBgwqgL z(;*o1fN3X0uvh1Q`8~5)vJHlG(+8MoH2hDofx>Zt8c^S-sbsi6Y(V9s>EY~m#B>7o zAYPJjCg#h56YAL4NRv$FDSom$Zvht+DGSuR1Jj};F$KiZaYhn#AX3Pe0=)mW(5$x= zb0nMrR33agOw#Pl^#Apv5IvC1HL)sJR6aJAUIr0kyl`8n7Aily74;t!limRe^p6d~ zDb@fB=FUM0T6zoQNl6b8Ef=bFe6B)prdf?jE)$h>FWh1zc)}_T&yQ{v_!K6hx7f2# z?Ny))dWU?O6P^3y->&V$@WiC3ya-+!ygIZ9Tls~>yhUoY>TfX9K_5ax@CgcfP^%R6 ztSMuIattqs?&=s3{2BeQHuVKa;}qs8Mm_Oqky`@2%_o%S(v;V4WQWJ$^D{fAz6T^Iv|0|r^qxhQmDo9i;hHHDiVC79Xg(% z6O}@ZbeciDBo`?0N_-Y-SV#q?Oux4j4HHt}yT4ITQglGL4N*A8Da{XQ#sV1ZaO|05 zEPI;ZiC;=<@kKr z!s?>AbHG(U=q2>(5YWC};vDuU(RisESm$m-nndz8-Ef*HCaYgwQ7yl1(|rN6+>Up7 zf9@-UM}w5!AIvG@z*04`%p0h-Jo}bj7~}u9{pXbMqz~cABhX5rFJFiX%haka4Kpj| z7@m)}gwy9@2OOurf?lA+*tY5B<%XbS6k>t?fglXuL>!e4BYAe)ocvq|Q z3blNVzBrA5S#Frea1E5aJDf1QQ72Q$Xr<G*m zE7ZQ0exmD2I1>9d6SEK&jcq1LV&uDPly3+d9m2MrMhN_H!b&xNAqFo#s_;|bwcP)oSV>_4oNWn?lNGuZLj?rT}#IN_rV#rDEx?9#wxW!9u*pt zeR9fClulKBgN|TSMLT1}#wD=hP{IhylZ->=C@U55U<@f@rqO^_7PinH>97)xVrr^d zwua+Vw3#h%NEFOuZPQGSgWjU@Wce=Bh=8pJfT3DxxbP2^J8iTVf2OJdP7!s9?rCGL zD6$%x@yY`cwOZ{`Cl#jbzvgoJW3qz{VfwO6W_l1AMO$clw3oR+-iTgptPvTjRsZ_S zGnlc4I8u`q#*Do++~gojqj(Rp{21J^ErD@84G#e_W6x;lm#l}0_G{E?PCwU{JQfsU zjT)oG-xp8Us6z`r#q{jI^RaY83}34*w3d752(wR4mQk=5S-rn$(!KQI7!@iXrM^O& zaG@4tM6Q-(RcxVuKftPh7rgak!hM;5yvXEFX@vL%S zFI^9>#nLWn=$TS2WnJP7ksOhPS-I)cc_dvT#3%UUD&m!wd!| z5Oo%ev)$o)^@$}o)G;?zt@d9GAB0jQTqVu1xqQ(W?D{K%eL+Q1|0`7Z?o^9;O{*z? z9K9m7HfFyF(waaWaT=}5PVBjsX(i#${$zOBZ1@0s>P|JrA=slI7Z7}(;eDY~viux1 zx%``b80>t7!KDa&2a*3H*zUhaO|2Gm_ZZhNdIe|b^LJI>&G-!XV70{JF_ zqfj5Kr-I^tW^mVS44zNeEFHg`j9u~qgR3rQaMboJ;?BY$LtPp)s2VeuvX#Nd2+Y`R z9T+>HDud&fF?bA>&AbPRYZ>a8+84fl!ZSxtCln30wf-7utMv>HSii^NmmlNFQ%m@< z`#FuR$Ppf#F`;0%Uq%FHz$-n!qxyJQK-iwBFn@;u~&(*q?{54$B3#-sS7ae(F&t5x<{V%Zfd)4u? z@Gj)&DPF%&OE{HrB>>9WstXSHf#^eK*fzX6_@9Pkcpx z`t;Q(ERMg#`o4vD@=~o;Es@LWh_Mhm1Q-)BxdDNn-I#!@BoLlWVDCo|m?Yxw#oMqd{@E&E{g4CEr-cx%R^p zr!}OKt+M3B61-o69}_s7z+Luyr^PEu?a6jG2d#po(ovYOj7!GoSD$Dun20PGJL#0% zNOU$-)#dK_Z~BlgQ1r{GwXh7fAIhnfR;p|{$Ep+w*~8e4L(54qUY&EI1d^Rp6x)Q;Q_As_oQp*w43aFn{Dvt}zkq#Wm6I*#+6Lm;ag z`~Z0$JQcq=YZaaI|H+L~;QVQkH<#wGxQr3?a%nNm1<4_c^OUNzrbvW%kV~uK^Fne|MRwSJ)L~h-Z{7z-iBCS!TvfO_YsHkW_+?#ZZC3Gm zvfK0>!*y7OK-R&DFm`8f9h3+6L`@ehLTPtWOm)%9DybvIb{DNsbT9NRssolxm{Xb& z=BKF{;R@9?BV3`XW`rwL#*A=_@9;dz?CTG zF8gfFQH;?Kfvm*MyHsrv?5frBDtn7~#iO(E3>m+{da$?Wk@5AteU7Wv+d(<`P`uBp z`4<295*g9a9dR+YR%u@-+;Artc<9RwtX9U0y7{!eID5G@pJrDc4;J0?Ys-o~Ey|jZ zXCO0B2Z8MWuWy2ZR8h2mR!G@&NK`MNjcqda5ivsEm(#`|`X&eDX`?$QC-CV9qpca? zOieh`9m-V4OlN^t5g!X^LB(!*bJ<=Kx$IU5q_~dVK-v98i-KCHa(JLfDX7i0lourn zX}-$510t%BRzyiCDf$-D3Kwg8fX4+Ky~4oo6YON9FRnNz6r!FMazLytq*X5Fn3cyj zD^F~8o+oMIWg+PHp)^s#Lkm$Rrio4-+5)}(Yp`(gu6XaEbyi;W6YV{iF_=+;j5<4ru@l;*5^-d?Hb~*B3k_xIrDG< zd!)gfa4D<&^Ow2&9`D&$Yon!FA&}*N2e1)KwK0wL`P=x0QH7N*s@1fN7Q2gT@$Pj7 z$pID(N(1bTbWx_5)>An%&_27EcHE+zzh`ghtqrtT`(Na81`OwNR#N}rv9sC*X5+#u z1`kYN@J0lZjRF!}QO-b%_h4|)NPv07d~=?$D}Be5} zb>bgC^vg1I>G+0GW}EdU!@8SL)&m7M{sxrPBC95zA`xSe`_j-5v z`}9pS!g_z+jIiDxp$IUq9~8QuRwDm`i-@yi3@1_qfF_Are%e~)_Z#95KdpL)z+Z_l zc)-0K99^UwS2ziGV<@7M{z|(t<}hV7c^F_un1?QAgn4L15n%QcL(6HtRq{UL76=={ zjrNKfja#7ok7xn)XXKUqjUiTn_VSiEUrrlWC^v*XqCOuGrGFk|aovn!qH}pI(6{$7 zOk8dlC7?Dba>4?O4k^0KS^sUqa>6CII9Oi$h{I_6DrmKF4(4qI%?I}vi}-83l>O($ zRDZ3C^(0!KFPB!v%!3>-R7Kd0yT(?A;I>=F2K3;jpSd1i25>!2<0s!`2QP38_?WKC zm1!kt17<_1Cjp*HiuUFxs=4|nDueIMoiy^3wu1b5maJQ*k%$&24xqoryK|yZMQxPw z<*GPZQ7f+eepUQYQJdiU`$@`kkne99mwplhD`~?l$>M$`t+K^WF5Afp}WSzbC_%Xg}THv zbId+IkjiDayqB`@3TIl82;?AT0WD+OA>t#nDA4#dqW*-F6mWtX_cDnTbx#6u2yNGI zEYo~Vn9i$xBvYE#r~UBht7ubE>#ck_Wy;}{DTjSP%$CC;mV=UfN&Hz!3sC&_iUI*z zE%$Sj>EDtFg(Q@fX`)L_t+7=-%*8fpDMhh4TNE3=5ob~CLLA&aghoqI)cc1hxDc23 z&zY82h!h0^Qxu?OY}-MMgcb#w6b0cVRg|LGFNr5{-*MR`C%pMWr6{n9Hbt?)9uuy` zSuDB5&IqkZ?qh4nJbWRKTqB`3(QYd@SBr;Dw8qXUtGNpVdejuvBej9bj(TE4q*kH0 z*CXaIqy|&&k3e!*axFN#uuZ&()CL4U3nDAlPTi17AshLAs6DzA>^(e}>IGyN3KPpu zJg001@6cyAV}lS;nt#BJMCx`G&$v!0M(wwM6QMGdfr6>fajPll#W=Rp&c!QLyo%Di zag4J-Q|)fSSg?fqt$54s3uKabl&oQc8p64m7Os4#E@GN#4NAtKdlA9G1l(AgnZ-33 z6q4vOk^0$uk=9HrsyzHb+-#<`QJ!uPm78n+xmQBslH!9v(YLu)7u%p)n`Km=e$ewHo-r`1-B2dP=%oOl_?N<3#C^)>_xP=avu|*m+X2 zpBGcPY!OczmbpZgXCQl#PVm`tC^II*#slaR`D2%h_%>QaYsVv8k;4_4(^YUuNrmnK zM8geQ3@N`q#CfU+&eIJ+T0AvoJxQD@qGi*M1AWxah%w8_y%lkA@Z)kcKzHP!mzh&R6{8z5e0hZ!&{k`ZyB}JT$637FFAlZUraQX@l3KOEMOD!( zR_o<+_a0soZh&9;nq7eaZZ3@$P)M(8AlV&nh3{EzzZt6?vM7JewJ&b3t#{~fgexZB zDWolz%o$WsJpD`)xUMs0WE4eOb7Z&AL}u-@(a?;~Fyn!U6NRSJDawJndK zmt$^-L)wpwJtP|tXL`MpDDsV7tQpUu7jDK=O!`5H6Om|P>#WtaT1(41*03S0=Nfk! z9ralHpLiSq?R0ztx6>`uALcAK+zM%tAY(X#0b>tqNN5>9)5r}^1tat$Tbagh#4IM3 zhC695+5HW~q|4CVOm8d70=?S^n#+byn@#Z0TfX1yY*``)KRJ@vh8B|XegDXkQ3T~ zwXf)|O|V#pY+}apR%XV+5J(T{O>Rb)meRfacL0NZvcYK*TvfW47gS}iOER$8rYr+E z!t!%^1#&jlp2s54Q@Es{xtw=2g0!D4R>*Xaq~*AT;q|2RXea_Hp=b$?n9txUvUl}E zAg98WCAi641`nIT)Yl=94zs)x+;1U+i+D3QunNFD&kp??%7*rdlI{JuIKvBO!+#-g z^7s@I@jI#q$u5&V(6+rqn_gOd%Q~^7mv-G!L=5ST7ASpL?C-5DSElz7ZTn~?m2Q{B z*gjeVrDz{^@SDODvtNn=DEjWvB({#Oa5m`)NroGpBM=Z%V?9r$1=Mi1hwi*YcD4aAlpnxH2IKOcuYCKxfSzDaIT>Yeu8u`*n>QYtc`zLsqoPJBnU8*J-6$?#vONj53vvr zn$4O(O=1gu=xO%9sA`lince852iH*5jB}{XxV~K8L&FsMNkDQ8CNQlzLEVfT_7B82NJ_9SQ_4smXd;_n3QMD8}wC|*OIHX_CG z;aVw&UapS97_L>Y8f?wqq~jq;l;E;?Ez8Qe1h>uD@sJgd@|PhAfFDcyxC}NKqVGNu zV0I?#lHh(n$d;Aevow0KTt&|Z*r+`jB+SM9t|`ROU87uq6iQ^5)d^#TnOZ<>8UYu} z`+oL^BeZ;q+mFeViF|O#>1`|&j-$0{mWuW{qqRbol8d+*5Bf}m;EW`W;IRS2YJSx< zhKn;}w4PqI=P`4cxtMpyVqlK7^3*U9K2}Sz-dfJ^+|u?ODhW8R2TKh@>G(xJi5^;* z(FY=s-72R9uNcMHcZxE&E!+%JsUHp{-m&-rcchi-1Q};;-;JjTar_W&f&%4j}hR#!y){msW`kjvB(Oj7K0XbO!>1#O#c{ z$TeUp=c*_f-k9K&#c`mxF%Hr{+rwU9y!Nxj?Is&Aa%O>34|=z3f;QFCz&_fld0L8Z z84aQU3^r2DuV`bD`4xb}JUb_9jl71>;3#UJ}I3$GDKpszaN;z?{t98vqJUS)@xI*b-kE~q-(8Pi4~KzQW%(yP1ZVMRa|_ER^0V) zZz>nY;cMk9#vgq}(?SJB&?+d$x`~c6w5rO%Ph#E- zc)|Z1C=SffJU!oa;TqlS!4-Dyi5gj8q785R(-|1hTu%)m*~({RjQxYe)R~&U=h9w` zRNkGDZj+R_L)EvRo2ltap1#z4K;o{@QQVuQRkMzo#5kVLjMD^x)P#HSEZO(n82kas z3j0&u1z`5#9h2bpNeuqz$lz+E((KG!Bf%k(p>eqx{JI;!Jn&2b*r?bKC0M~u4pfYK z>Pl)%#94}S%}8nv)H;zP)NRL@$y|j29KjAwIF9^wp$N3_25HzPD8*N)#P2$D;eK6E zcsvo)i8u60{L<(1aBI@r^fq{f3i(r{$j{3B9}vj=H@YA{)`1p%W@5HhxV&BVir(*ZlJ_KP z4z`(fP)f$ytj43F(0;SE`bt_W;WGzbfm&kH9IbesxHuY+Of9yG?Q@{#9qd=;Xd@M6 z{zefwPaB~Wt}9N=(`qZXHVB9LT8XOr>hNMF=jCubyG^CZg&m#wbu`8f0YUtT;3Z0z zOTkC*H?*CvEm6)7w7;AWKU(QBJ!G{hli_JbnD5*iA#0_GkcC=v<$gOcYoS)ml2>e9 zh*{sK)}rJht&(!CwP>|SE2CU}CdMw(0+lCS#I8kJDbKepSzb5VvecboArI~c#l^El z=r#vJ?4^V@!;)t%H7W%EoH)R5YcAF*diH3?xNj83-KYYWyMxQ#C76Ha@#-v5QV7LG z1S~^u@Eyh|XFsy|KOm63A*B`aVz6$_;4Kn->kGi#8-_@*^H>IN{lM4{5Xj!pQi3yL z8C(HqXxsIz!4LO_suFy@Wv(Is1gg>*RULs;!2Ez4N8-fSWm-||rS6i$7F?+h2uv+) z2@c6L<7W-2Lhm|K?MU#?%&#uS1OAc*+PKaUv-A8!5pwI!?yzh@>;=Iq{+$%3a=!%WWtLPsk?xV+*RWv~JWv9-u2^tHgCg z(jQ>T)iZ@h0x^7rwp;n3g($yLi?Z|(qgG-Q<4!kmZ>6?X+1Xy$R>3*)va2}1N~`WZ zCPq?n!zS{S6BeVK$cKl&a7Cj}sul`g&c;-&hG(#vwsOY=o1gd3iQ6WKw+W zOEzlDEX8JYKyH{EH*iO$g`5|p!mvBBm^QcEtWB~wiC;Er9q?dtz!uQ*5UsapP3o^` zE{ln#YNePFqGC)jBbP`zBeJs5z}d%)q!1)d{INwVuj~jHdA4ee@a}Hwty(KfezAG0 z))p^1Shi^+^ZarHdYzQ$!?G)6pSDfwrr_O{$J@1v1=ckn1`_DKo^d|0^mst&ei5zIeAo3$tL8WhW*XrNq*ma7G>s7cX~eL-M3wk;GGo=?Y@VE^V}O zys>z)3z%;&i?%;##Vuv*BY)6xJNWJoleJAzk$0OJq1S|sRc53MRdAlzx>u{`nWG7} z*Zb<+Ugc_J*#}3vYS(_XC>AgA`#x=*B}7c#k5&1rVEa$|vG;75Ap#F*ewI$6^8xHZ zS3fH}4#F*1R74-tB9)zI#EOH^k!v-@*@Id&hgJC<7ah{NDvwW#?uWFJeg$h%OV0A) z>%_K$K6F2vcafeM=c-EXQ;Emf_U{j2E3t5^5Se(1YSGAy(4A=`SmZpSm8bSTqIIvo ziReO~qAA}pGZH|N*<2#*Jt5UIHTn`o63lEnDALRR>k;jhr9fUxiRgS1dY=-WbdLJn z*OB7xF|EDVS~n9!znXR>-QylR99(8$Dc9;a)@%N4SfHJ5vYB(e4Lio8$nXkOXP1HX z82tTl1{(8>^s{Jor11YBqEX7bLk&95QBJ0cmo#V-t=j6jYz9so=4B^*I40qP?# zY5_H*L|EHPnGx3Zf@UO|>g{AkSld5UCmeHV$4u!7#}D!YfyP}k!Xmz6Mp(orDPpUV z$TH^104;w9*Om;htk;_PS=Ngvf-wZk^b=a~8Uqo{uz_bh|7LTEUPbyC=y{nd+7f|u zaCnrL&JBH%iMfx+j+&&-90v|7%YY_>Y2d$WL#5@n5gNbYcQ5r@#n7j3pxB+~+E71KK z*I_1H!LltqByKu>f04D-*JL^%5Q~QNO2p17(s7&1pm{6>@?c^H@SZ$H@ifp~_d~|x zcdjB$7{QPS(Y#%yYY|%+wWl!DPF2LEen(R2-=l z6*qxOmDKtp6 zV$67fQrsSm5Xc!#oPFmxt)Io++n(ckV z3ieJHFo(1%($rVIzyf(dI?Y$#n|Obt2XXXci#Jtr8)U?B^bmeE6Q@w*Hy6=Besd8) z^bNu7AggY38C{qw@Y_#ZP%HAAVNCJE>2C-kV@>c1&_6pZb+OW2i(Y}# z7%eYi$<$Tcx~O^Km%H9v#37Z^!sC(_P~w#r@oKjCBkI%e@f&yK$3)|rpXhT*^C?@2 z<%(>m&)Te9OS5v#r4O*{Bz9lYrduqc)@3Nw-J+uNWhm7?&wmuLRT4@u*7%B9XS6c4 zoV~biKb+vYJwYI~s!CC4)$dR(<_^WS$ifV#50rMan)q^AOTn8sbFOG*i~faTqUhnd za2xyvO_PkMq!)aF^)KT<8T-{M@WFWIEKT%ijr75XzRZ=;Qye zmLr^#Xnd^B6nXPjOWToa7 zWbotO3?3%I+p@t!2@ErKhDBuc_*{6U(|)3Qx!S+n(0Vvn+S$9`)-oOZ-me3XN#hrXpKiDbg2Q*i z6r&nTZ~R2#oK)`}#&J(E?w(fEvQ{j;r`59bv|qocZL*X+Br~QMyZM97jIl|6vk|}s z{eA7DH9DBNZMTyJG7o_iNNg^21cw4FmGkTx5A@&5c{Y%9j+?p~@}Tyn5i?p-{gS1L ziC}@=i%xav+L*{9bou?47WpjBh#r6JsE}}{{ z_?;7jhp=Nl@XBrmM`p9A+;kFw53yvzx$%cEmH1)nhnknOrpfK5imQb8Uz&%-M+E<+ z)vXhjmx=Yiz}@Wib|zL4MM^uC;K*Pb|FUUd9!Fw0vOT zHgpm!&_ZB2h$V^LhSoN4rz-?Fj_e<63=cj<2^kh=A*^o3BPNc<)U#-RaT9gZ;j(z_ zAsRf=I(eiOA*$e$l_`tQoXbR$$2bRrV>SqCTHb#A#-^rzh@anTvA8%}_MKKIbi@nD6I-AY zpdA#xN$0l13lenjYwA0y{w}F@cp%}cvB6Y9`d%v5zSI2NpMM~fJ-A^?^E&@yH|)Q^ z)7~gS`{l1$w_nB#B_oil;}UPYVxjt#$R(GjHIC%Hfxb_|xXq@rV z5^TuFn3=Lo^E*J$ov5bUUozp1#Th*D1(&-Mfw{PlU|%^U_k6?PCJ54c5cXhzjl!Rp zgin6{72?1GA30MS1aiYaO42x4l#3`Pi)fx*gg=3k50Ui9em48eQ5IZ%`HjorUybVc zPIsqq&1_-hEh*vLzy&{lv|{ln7brCgaakt>v+@anG_A+ca%lF#1sI(3C4&PI$o0!w z3I6nj!QUk@_!LQ*r#Fcb-0>2F4^L-sHg%kMPD{+Gy(ESZzma> zT$pi7Eoa>2gv;YsIZ3*dCxffWlAC6ioC{#%SB2G?BtwEKOJwiS=zj=+^aEeMmO=W@ z>6PT(PP^y)Mo$`Oz~25%q)yS2^4N3H^ow>rtkh$Of)0M;H;K7{w(&%TPlaU~58sfW zV(0}FoOpv-M@eI~n?1A3@AmYAiWjjU4`Rf)b>%y;4&{WcmA(<@e$4{A$WV0!# z#td!=u<`jFF@Z4|^o9^&6qSxqhNh_AR7tokziPvB8!Gj*F9hzmu#29eoVP4|srv?$ zBqfJe5@#0hgH6=^;fhN|={SjCOnohZ-jo=Cd5cj>G_mNbmG~**sYS2tH-s~ou$;sS zW^06Pyk*M`FC1Y#ek)=W{d=XwOrbjHhn4g<;-rHfWT|8S;-FWwSSAX8Rrhzj|4I^I z$HcW)qK~SVfj2Ql)ypccpV;@SdT&dft$)c((bN=qL?vDK^;|fB$M8lO+)|m;xvmlu zE5u-3PgZum6rXjyyrr7m&rxq-u^xXeNraPIcaIqfqR1vQ;z5yRW+VqiW}6X%ik)Oe zQYn&PMrKf?ml4Sb4NjN0O>lU^&Ih4aK=ClGniV0;qP zSsxzlc~>$S0J7n>sp^q~e$Z;jtxGQ7kIS3STQKVIkK zIXDE2`w_0ka3Y9fLp)e#RY>Z4^UV?nsm&7&ofxM;=WeCF0>3 zMIhFm)E^;#T#Lc)%$PY+D98D9>o;P?5r8s|8?jjp34(;Ni81hSLzYuB<3Pq;qYCA+ zxrBK00(5x-b9oJcz}_%R!Mb zR+_;=Ag|{YX=q3D_Gw_t+swig1ad%&Cl<)!m_2=NzHjDEscwwuqZ~gXN>UqSGKjaB|UqEJHU`D zVPK@cBFUhZq&8H`E+%&Y#2vPI^6F!98_+Ypadp>dDhB6+r9JpeDEajY)$*|A;!BEm zjk&Bji9QpV6y2#K#fmoi+?N&3K_qWK6kYSfZibB#`3mU!ls_Jb3k6^|YuL4dWH)0) zU?IJDK?69LH4&{Vdh(Wxe!hOP`Zw-@8G2v(Jp2p~zM< zvWX%q%}5GG=9-aF6iGBA0TdZ&Mm#9e*NotPeGWRTP*^X9pRoB_SZ|Q$J!^gfcFxe5 zahtG+KCF(%1zDM+s0`W2RH{@rvx`imNE<}VVeb|-7R;e+ygSB$o5G=}UOrDAGe0B4 z?^G0a&U=ukUQGA%`~8+IfLh78WJZos?A-c>Ja9Wvk_2Cp|6ybAOKN;Vg_2duFzda%aML?BJcyPwUf zqC8SPkKbhc9+jWVjHFWJ%S|f$t}%kt4gQwDjQ;58#`Jp@qZHYL2u{UNw$#xNe4`D0b=CX`;dIM{XX0C@LklirMsz;P>IAL&xVb*Q7N9X?Vw)s+Pm7$uh$J zMOw-_ce%}iq*uESd9~w7evJvo=Hl(j=6_N*CYgpHEubjz=?i#zFDm>Q={@e{=jNP- z6yuU{$jJl6*Ym=)r2cd8pm}Va>UL*J?M493Hnq@sMo*EC;8&KzP}h+F^GOrj3M*Jj zpB>~on9-AlNk#~r;nC+9{p>&nx0ielqp_B$R~ENR=_f4XMXHZp)Y4fT_R;%Pd3_2t zXUZu{ltX{q^a!rzGyG1*c2vPd=PFbm%w-HhAbl8n&f43R*2h^q3*j;hd@?sqa|Wj~ z$RH2r*q@crtLLmYAlGk~PB4>6azE{HKL!`h2Je*MErPKRbYSo==w-4F z^CUQfuOI|2m*73w;9(M+d#Pg}G1pM~K}XQWEVpEggg=!VCyU@=#){xH0=eqJVa)P+ zzo4^YSb)E^XYk*|8w+sfab~?qc~+BQ5_=tC*C#cZC&pIL6Dhv0O)x`Tu^X zfZYWzUzkUTcl*djl|jn(oa$XF~te2qEs z!^4=yA0Zvm$BU!>dJ$_EjvshO3K}E7srMV<@_Pq;*OK3<^c^6-Q|Q}Aeov%t5BWWq zzH`g(So+Q(zr*SK6)9fwfdKk88iRJQb~`oR1iBW>E3uE>`EoQcA4cr5gmt&Gw33h za&Q-^+?uibB9JEj#$i!CKp)ojPmSU0q~3)r+G7tf?cEZ*M}q%4oJBiMf)`5gA_*Qz zV5S`^E>+e~TJ4XS_`Ysju|8CE92MR9AQN9K!Am6gK4G^ba9s&*m(JMjCGq550JC)} zA;Ik>b_a<)j)-?8Yz5$+e2Z7)uc}XOyY~^3v3F%Ae9j>sORv)bWn)W_C+q{O>$xqSSFUhrRqb3_cLdUK zjuG=~=usBTmTKsSae;7EkX{7-=7T{n*4@N!LAnpNx4s7H6|C{sn1a%YDO5!uP3ze` z%Fei|oQ(C3wb7#*UE0`|blaE64NQ zm}Ouu+ocz(-UG!S{ekJfKp-vqMdUD+Vlbnd`HoO1Y!>q(5lcPeKG|Y8cCqNgjXM}F zrd321_PdnRY^n*Xc_NW&E@s!%%ZFXP&qKij*;oyUp*EzgA;?4T8=JqP1I{+foM|#= z22pEGIo-vlntD;|{6Cpcq67yLA@;A{`au%1HTHm~){&lk>MgUjlUZjHr5;3S2eR_J zhRN0d<0@H+<)$;I77Ih>ttjTMHb6%wyd-G8nK4HqF^n(o#*Fs+(=qGZh|@p()j!a9#X2MS69BA6h~|6g_MUU z#m!oJs|pikS3D-$wB~MP=atx*ou~o*%teUtluQF(Zj24po8u>9H-+l4UKQ?fIp1Ng z2BY*H+Opvp#;YB6uiAPY3wlNSI(ik)y0Sya?VlOjsV#$RA~5GE+ePiVdaIJu!^majSw=hPG^k>Y-1eT~Ie zObyo?=Dxp~jDKa^4#8=ZU&Hmlx;vRM{CF~7%eZf>rZ_xdj^QB*KH=CY=tmEXsaxP5 zMwk!h`%bz}eTxYQVlFvr>0(H-p3mMXLceDzwp}^{if?A_=aJ3WOH-A-Ythl;?QxO% zO~p%G<_8nKP<{iKaDlg+t`$p#`Y z9r2=Xv>xJB7TX=suzO-1!!IF78%K2U+f>o|&Y-y8xY$EdO`e4V%4Hp0(1uDIWtws~EkhQfq=(6N6?eF;0wct+!Xy@#1D{eGDF| ziD{!Z!MW*GZS)A`!BX+KjUHC&?gg%&cOB-i9Rg_~P75f&(AA`S;?hgCu*2mw=6o?H zRO5f=i_a3ck>>a_9giiT!}G=JM8_g-x7Dj#wupSOdP(K&0#PGYuVo1q39)*8<;`lb z56PCv;#RC)*xGY3$z*Kr@Y7+v(Ops1u)!SSDXAuaoeCS3<5bvadI!*reu0aIh2ygD zQWd!HZ6d4ipB8c>IY@9$3ASZ}w*qX8*htkmnc-~or>_e5ERWG6$T&<|n>^On*dsqY zjBWf8VyvSO{ke!(-A*r+ZJx%EEJ2|>m@2Uz!FRx+YnE>uA%zS zuT>=diYj^-=~QC!u-=H^koQaD=0@?by&gn7`NjJVn7`o#tT>DSIYh@ej5PaF#E3Y(k!7$r6sH&OK5+q-<7Huc zA+*FH++x=jv(S1{i;bmjlY1VDv$^z;;Jp(3*J^-!5%}p`1~-ymA;D)5q>Ul)&vQlH zj{4Tv5^^K2iXT&t3;~>tvy((GS&R!W70lq6S^#sWe4N76OUa$aS(5rK7#=>8Vw_76 zVV(32L9>5kt+o0x`r?{d)Z0k(K_?kJIEcZk5y*k7hWNFU9_BTF3$LJmM5!1(ZLBhdxSt8(@(k@_{ov++{K?mdgKBjy2{t>O2gQ&-*F zbNfZEStSYXf|Whs|hl($x}Tc@O=7 za&4Mu*HiZ{90vO&b@DzeIjIozk9E>dEa(XpEG~ZTsgJa56pea86Z?uOy)emMC^q#1 zkGMA8OCL(=*;{Xo6Z5-z>s72b5~-jmG`&jC4GrUmf>7{LnSO>>(I?~9;otN*Ac)f`^jl)Kz<8N)=R#yGL>c!XBfym<_+>z0ZjQ0j z0cXRrM8bDTcqxfK&IWKfLdTM#4;;QZ#GyX=c(0az+-SoRnaDZ>veD8KMND6PtJj5{ z+~(V-F#Ik834c9Bc=prlTZims_y@^E`67VxV~k6tkWV!0-AJ2@(=N_;MdowJ&Nl@4 zQt0P0k|L#ej^gzp)Ou2RE^t>x5aj+5j*O^vy&q(GGZ#uk5Oqs^gahJAzCP{~N(L=oM zuivTFE|S6R{g|2L3R%3Cn8dt#HDPdhPX;$Yjbvd8z&%CtPI~j8JhM5=5f9FCqg+;& zMH88V>l_B}kiGp61hPAi6pIGxb%I7Fb8Q?Yd;2Q^%r3>^5_{iC#&!Z#^!8Z<<{pQ6 z;2^!1LnDtNjJ`QP!;hEADtzL&k6#Z!RdR#}-*KHqK1>LH>p;#t%ZD=`LLgbe%LhaC zu@NIBt#_pu>{k|GZnh(1v#kh-ypTk$$XpKDxt1W8sV(A5n7$@BcYiL;MP{r`tTDM? z#;{zT_GR#$yj#_AUoCHa7Gn4nj3 zFX_tDqGLmI(=2v*j4nRE)BVNZ3E15Er4AD*08cDXmc@3!8LYa-u4F266T^ z?o9O-0_jUwE&5N%IE}u8-(%XJ5^js~sT*mFDV-z2HenR5 z;TrAj4m0#Sme7n|%vyJ!05BNmKHll|>1@)Gfm}Psk*wtH`f}yZC!lt`LV4a@ z6q~6}ZR?lB@LiuYYWzPDNYmS*JEL#;j)fDFhtUt`13LHqDiXYPI%DUCb^&{8Pk>qf z@`(>K^%`{wgTHVajwhQ-ty~n(T58czIl0tI#Hs-ibE##)JP0wDJMZm-ll3o_Vk?Jn zA(^0#Lb?vgs=~B*v~guI%ci%4Q|qn`JAuW;7n@#1@%bvM%+~S9=MWJ;TQ5*!!w}lY zx-Va23Qx-EV=SPQv=bP=Ct>$5CX#mqT+ zJHMMy8s0gg0XmzeQF1V9mV|{no#esK7r;4_J4N^O+6W#&jGrs@y@anKKIxgXr98o2 zCq@6!q6F6w>O8%4`Mg*aS`N(-YMhu;=`{Hi&viW*5 zW$k*AF<dh(R_Ir)l|J$$D&ReLl6dMQY}(#N zgIC-_>&Oav>@$Oh=756o2zo<;U%ZxcHR(k)|>O02HnN57D1P|+h zv-FtD?3VC{AF~P{E8*4T!Tg01d@36pC&8~5atChofvKPU3T*Dcp%UCi9*}QrFt`hH zN%LAvg6*A&x1c~@39pw8|B6;JwzT8w50fWRYDIJZ9DqPN7;ZHeRafcdJ!kXXW!zfh zG6IMNzUsJ0j9jJfP+s>EeyMsx?BWkf)jd5ML@>jpn=!RE2;^wgU#w2m3s^K^Pt~U= z_nU}Xt1-{sC`PQ-%UZ1Vm8&tA#!Hp2)?lK&PI#`>yIbmr32U*UpY(^guvQ#1KtMa`YM?|`&s#1{-prtv)zk^rLX!p%)Yn zcj__LAF6V$R}Yx4(hre~J%9&lq3wG%VoJ^BDbIIc8n)RlG^_0e@=(tR=Ei(~pGj2t z6C~K7J4%A*%9HgiA2B!?fjkt@j=+WSd}nJ$KOoUxA&}@b#noN4P+@SqG4 z+xF`I_@Oi4O}*usn3v|PNxw%V-OflvT|Ne~IG#vxtRQAtXbwSK)q}Dw7bJK>Huyme zV$$~%E*fLxh{yV*VdV$uP2_yIS3Fm6u|$d>qy|j%dtjl=Gof7O=>NypTL)CNbpOMg zjd=Fnir9oAAlL;eih-hnf{EST9T)2w$HFV(QOvR1YhLr}QS9#SxMH&rI{|~=XV!vq zeV*_0zJKU!&SzH4nl)=;&z@ntq{Jz*#4%i=F2NuEA^Vkjm}#G(VyVsCNojUbe7Bhg z7kPXktBl+yc)!%vY3dBSh$NvyV^Z5xRqmI2LrpW%4t4I~uO@jiXfb z&vzdua~oyE5D{|L+*YYD zL@YTA6)X9QJ7=-Dd!(c&bk5vGnORs&IEOU^95QsyeBV9Nhb&v`3f0z!Ynip#M(jRs zj&FUCzi!!zJBv`+r{M-%nbC#GyO!glQUsnRmkD-|)Z|^g7*5BDXn_40etZ@1LOJ)Z zCr({3*Qm0AefKVV%5(`6^*bM8zLCFsiD$UKo%*Ve2)>8`Pdu6foRY_`xW6iAUO$X1 z9^e5dA$@S^5=eDHSB=jt8l!VX1(99w*FP zH%~RGV)zYn;av0G@P@`Z0{5}W)0saQ_$cs(xv5?UT_p_R9NR-U-ZYo@_(~s-1#W=0 zsK>TvGfjQiT{O9A{)S8T8r;IVgCfS5QX$YuQXZJcJOK9*^prVRIUqq-=-@C7?up5f#xvW^0u@$yMNEVS_WEDvDgko1dc_%a-)86uP0 zW)cx_5F*HL-sUC^`tTSpbrZq4?eLY{qQ(RB?%=j>Nk&y}iTx!`er00vwATb@V{*R( zncSb`LL-S2ArH*Es>GBg8`R%NBF4x(#3C2+Ah4G#MR0+Q1XqNmSiuiDZ3Q1<4br`Z zyd>KiIGA?LX?SHqT|1aoIJud4}WZ>52UxL(d2Ty!i|C~rsccOdiTT1TwwBjGpi zdvl0ZkIbE`iQdGy&!2=(+?y%7W)9M9A>W(bb`QbRk?=Ue8}NdG=IcQvrV@R>-IQU8 zq^FVvI1~N3DFjzz@hxnb>~o86kIn0XO7|z&$}Rekgo(OEcA|dGSBH06OUy?~=~Qvp zk@dt}(qq#$qTZa1+UWx%+)h7avlV=5Ua7dhD?%B%t|I#1cV*J!Ua998wXU`mc!9S= z?q45Mwl+H{+f^;ox}9xX6V2BZC0i3(h{?HnHFZcC3o!)^@jb;{R=j&@F7EyJ2Xe9b zj-<*dB&^BnQJLEl#ErG zca$+^J!OoS8Ob`4>1pZ4Hx(xOk5!p{FDZLrwsm`1)pP@bkL}f4Y&lU9vWxV0SeCIe z+n@7^t?PzN`8R*0NoTzDp4hx)Hs0__mbwS9fran)=1m^G>XKJ|Wv}^t3-Zv+RGn*Mw3ROg5z{W+z_WrZ^oT6L} z5eHMu<#P6!_p6&cxhvhImHXo5%;PhOn1O@~yxP`3)!fw4o$qA}914rUAgh;U$_QG2 z^Sjy9;_JsWIpk;|4_q&PCdmOK5aT)*@&Uhi301_lbaT0| z5!PR7y1K0CR~VCoR~sbndbxx8cjwEO;b3d}lEAf?OQEDUk+3C_-^}+_W8A&_6Fiai z-MI)b89RLbNwt!4_1*j*YVm5lnMX=A@yI2$qR4RhH7UJeC)IlZY62qqA>n%84w%B$ zU7ir6afVWoo`f8IMfB}>q zSlO5)(&foc5?0{@!BI%~v%!86#x4>kBPV=AevxbZ@hL;Xc=>=$BVQbBXPnewjs+Cy z3lr%^JNxx^IWdnhlHS=`YHA)6Zrs5s=Z}#yS~Zvw6O$tP^p%n`=zO11K=7k(_6GrjuPFU64RyYh-ol0 z9f5>rkfGviHnn$9hh+pGWa=+S7(VfYs6Cna))~Y+z|MS~txtA!OO}EQKN5LYuENDg z*s72INlO<)+o*X(XfD-)tpO);sYNVLJ5cT{+z7@cAUAce*^nFMKM_lC5q7s$NVpNa zdO&d4G=fk4LAsZy2>g-*FRm7<_X*%#ipGKTJq#M zwlTTYk&ce_pQVYFu4;Z$fGvA|6*~uKi9)Vw5&zMTnRiQL797Et&d$>OA!*WMB60JQ znovb8xh)Q%dc{IlwNRd^(t=RoC)M?7;{`rdjDPRsA)dObmxJ!{>&gCuh{co%nF`gu zMGAl89=*eOf~`o{6u#o6n_9x7N;-M#;+q7YN5W0x@l8?2U9Io_ncsd-wGggJOH$8) zIjp-H=$<%=^fzu0>~1G7XM5hfgo5-aqT_e0V5@tWn7FSUHoX@>C*JE*vu;6lS zfD9=zb{XhpN8H$8DlosCq;> zx>fuLRg0MxiXvfZNz*`EWSBZwQT~Y$N9(Cx%7JaRC-u}?SzS^QzIwR~IgS5*I+dO* z$~RX3k@LYO>PbuMP!j!aEs6G72hp^`>$QS3YjckL884!w;{ECarjEja;nDn#-Gku< zcKGpfqE0(S)Zgk7b!j_%jN$vc%~fT&A29B0$JYQi8gC#THd^ip3|dY++@U9Ly1?CH zk*c@l=N1xinoZ{bzhMup%OYw%kYs`05k%b<2^+o`!y$hYbwDM8>xTm-cT*W&#hXq) zaPfvW0!*znX&I?j`*BuU-`>BJ$X_90uQ|uK?>{8`6Gm+?-amHkn;Cw_CCj&-;9Y-# zy0l!Rn8EP#7gRGNSa@o~OyL6o+pi=STbinkl&3;`YYIoug>N(XNmDVPnc6{#8ZXW@ zQ;R5##*6pORDY$wc;VYzZK~WECq^_^%PaH7iA~K_A1oeTXs-I2g2lV$syhx*&|9c& zeCz*-BF5D5P8x`AG9u;*zVB+9Gh*_i?-7$zvS76%-`TMux`pbSf9+T~@@a!BymK~w z7f~fezGI0SD-N|#y)1(>u%vmsw;^EHw;s-vfM~ozO!Nn)uO~K6DM=2ewIA7DSO^v%5IgT zEsA&rkR6TtMhL-yRSE8egd^Vf*#x%?Ciqr$f?dFbJ@g+5Q|CE(37)9)OkFB}OE89R zB+{xB-rNGummu0_)j&(`yBf5Zd%ts2ece+Blg&MNY~KJ0cL`m^mX2xzkKw#WGAn3d zm6#B~WYiyVwp^XmmyYsqm#%7%V#J6_-PG>&cNNZxQ&y+rLe|)W-f|@v2a6dqh18G^ z8Z#!*bC_FrmE%z*Q2cKDseDgkNkCqVS6F^Y+tY690!Q=QNoja5@Imb8rREd!@gL6N z+T2SmW2z|b_EO85oP^q2jZ{8O7wvkhbFh&5y0^L&tG7%0sNN>rx7tUIG%1HC3YUHe zc|S+l{QIeOP0FpQVpM;1wEO)YRQdyxNcw9eEFE4xK=o04riwScRUcd90qS?fgiE{! ztA}uYi9SRfub8rkm|^Nk<&s52{-(BbpTskP$-czu@1kHu&Rbs`|4nUaiCRqM%*SwD zBwWo8ewTH2Cu!;%+B@(X?-}5wZ(v5)+smG9x6Br6#a#qA)+W1qQq|WOokmWfdUnSv zOVCX6CYt?7cnUL-So20|%WfOVf5@3!eUORXS9B!CR9D8t=zr^JxO|2$y=FHYQG;aM z9!)aT-$70zheDFv>g-CpL<8TABG?DHIMSt$Cb-Q)3rW{<6JFR4ICPcf z1UuT{qYSqTBH{hHmbS=RqPsv=Gh85q;4MrYJQ?sw**#8XxS;$b&0-B)hBCvZmt@gt zOwoh!gKda>5R?BQO-{OnF*F^n{3@js7u_G<+T^gQXAv;sV1}3 zj+QRld2VQ?+&htQLBl(ftjAjk?#A$39WZ%l3BbmUK9uJm&*fiqCKj$;kf*k^r4zHL z!Q0eazB)-$7S}TMdC>_GMU;wD+vOhFH!VG4;&+-y(KT4O=PXWb;O2qflXqrrd82(r z!_OFh_Z4Yzs;_xPZ|D#|*ycA|-K8rh1I67XYIP;CfpA@_p10^Mwm}++9s9#6L-X9t zNa_B(>8&)w9g%RkKQ;x^plq6!2>pSvLEnh|+IB=hMf@e3Qavwv&<=zgs zrRcg$ZJB$-Amp6*?cajo){bRreOC|sp1dowU}!VpF(}v+QDV93mvwMEs4!hLU#^b9 zPL9jV)d%|Q09pdicXyH4y+U15=2bWFjje<4B*qmFuW~xd3+jYVlzIeC#E=4Z-YG{G zU1c@IiE%5{>DX?mu2LIV7EPgC_dZjZvVF-c_o_xzrhCk!8b+RA5+w(qnWB0 zZL(r>f_oz2pK8|MwIkW@>T9yT{sz{kh>BVNdi6J~ItOe}OS^BoM}>%c zPq{QXDxuzAh!Go9A4}k8^1B6~h80gsCKQ`G)`c2sB&m_y5vAQSi=+j=ql`yT<=hch zL`J|?UY5+kV(KB`VM0EJXMQ9xUJr>n2u#@f^Lz;dISn2P%7%dA%@ZXysw;C>sDVF! z^>!S8xl!#@P>mmU!RL|F`KUF$+ojL63LufJ{B zCiS*SalC75utg0r6>_g5J9fIP^-#4Rv}LIwZ8K_!B@%3){|iIWbCtxWztqce8DgvI zZ)tPO2``U2D8`DQYY;pH3HvZULD{A@P@2^e9rmatH5tdS38G0&F>8<77O%9D_NayP!$R^kzniQe zgi?7Nr_rdE@Uf|p!e<9EwEbT>dWg0=)M3iR>%w!d+Qd{<4BQKMtRo)pRekf;VwT?Y zZV$IQy)|0Z6mI)eFH?vxcB-?KbwT3nKFk$@#QS|}0VK}xYBOvsnY~jjoUdQV{~;gQ zNQiiKFOHv$+^_n0RYIj!c|G186Wj*Y>Tj@zszg$_HSa~VZ3p9FB@wq@tt>|FR(pgt zeMpvh$(AV~4M#Ie_bRBm6SX18>U=Sfj5{KM>Sh}fw*BXzG`u$mbr6@gVWsd|C6Rr* zT0*ZZ;{r;Q9wcgRSKF9&i=j5Pu*@M;D8jGs^A8TZ-BF^l@+U8VId7m1mv@9=1?^27(Z3C-zsUAu$ zyp!Aozphb@Ie1k4KOBnH6ZQU9ZOSG81-mhV-6DqWS3Q-P{vu>I)_1>D7H9UW-Gfbc z$asr`$gR#JVdI@G5938u2Un}}xN_{7cgc92k+AWw1b9H5VN%+h7PC~XmaXz3^|(pd zS>E>juv*s9F?Z!OQ8vGp-!ZjPn&^^W^AWv|tK~J{KrqGGG}*-J<7)9DxnVHFSz68N zd@FziCEg%Gt7QYDRkcFm?QyjlKHn*ILJiXH5`zTHq6VB$H(&*_8c}tp*XSqVz#}z|~c?lBPp+jg2!9^|-+zJWD(N}&1M}H#t)MbLx zk#KmtC}CcLEQ=>zf-EP0!xAK$arzfYiY3ScM0?{BXeqW~3G$qJBa3@ScG9A!2=9y} z!_K15WpxQYX3BB}OQ^?r@O9!Wu>*0{V z#j9YucSX&vxMw{;u6DWrxmpSm4sbba>DSa+S(I0Pw%WJV{))0_P6MFtAFL%?anpW@GlYW+gh z&ys$P+(~{VnV-y`1^ICmM~(!wprzY&%CkQQ<#~mKqwF~sD&q001h0)Jk^dlJqihCj zOqCUHb?$tb@=V}7`|NrCU>4py0-e2{SOjkZ3+hDrNVurgdDUkkAI5m>zDzA6fMRAt7CG(g4lLXg;)wuXhIiUM?SNwP0%a-S{ z>ZmA{R@>a3s(npfn;m4=iu3O9kxdrawTAj(pP$^qEBjVYvGSSP)bV_Js_oM=wUSAB z;vh=DK==A?c}DkI`4GBSxut46kBTqzihCUGEHZJd9OR1>$I_{)AAJ4(=n%cHTpUx7o)O3~>R*5M{S69-8&Qtu3pdn!Y4Q;%}eqrp%F{(+32LoSlh~BI>>QB=)G4rjO<}xqh zmqpyuk8I+d+S;UC`X=7JM{hpg=Jr7?Z?e?BM)rD&T7tFn!dtoVZTglfE35lzg0pWR zI1C9pTP$Fsm9sRCvlrL*nQxRQ6$vk+^=1|hH;BbXhVR+oa0y$i&J*tvK4~_QXOmMo zTEr{CQJV>C}(j*ot#Gc_h9|Yu<%ZH;THfKBeSG= z$^wL3ArV*SkOnW;W)>2w>7Ue2o})2_jfhE!h)IpdWCClKZ(n0wQ{FrjIOu_R^hw>N zY`ib#e^$HVeAlm^v6|!}YJ97jmAQmsn(H7AMn@N0k$#Y|P>rJ44uXVsS}MDae?wK0-oGtMj^C zM1E-n;jRv-ixgQG7bR|WF3Q}uF&rnkyGZU^0UK>ak8kRl+@F(?_1|Fk)$kMU-_;(b za$@{(Ld05&VLtA zf2gH=Ys3*Jml)Eu_>xRcFW!O4Y+3zVYym%2#gyl)@e3>298=On-E_4AK7;r@UG=rN z%%M_G_=7l=hH4z?Tfa?3|1<%$g{I>i(URoN;ata&@W&+q$OX9HOoFR1++tCtI=KNG z{~$aYds8Gk?(SNK$2`xxZgGA=EjCZf#Q!qelvLsIUG1*SN)?vxYJhL`LB#)JG%5K) zWb$A88vL7l#ee<8Zzk=ha(|NeP0`Al+KbhSR!!+#StKahO6B52G0{;AP^MQBe>-Xo zm4*|Al0}=OoS7h|X3hA0N$VMEvfg9`Hc~Fvidh9rK(h4bY7IDZ)Yhqc!3#ZK-4xChwCaN(W=k70O=9iA>>4E)T7#UEu& z{={WlD_xsLfs5r6ydyU%OJ>9@#(BX2VwQ+$CZgwd+2*3*4n_@@HImDllV#Pi%kpB_ zZ6Hx^Wa_3Vpf;m9De~M2vo-;%)MITJkblkMxaU=>$mOEtH!Tw@owXxbJHY#~H?>y| zt$5MKvS~!f>cRapiR7xj+Et`a=2y|4{~U^l|#wmT@J0XmQS`v zl*(%JchRgSWmc5!a851S$uZ?=su<#|BH3ZuADMEq-1$Xrc~{8o^HlU7uDOfOu391OFtJQ9D%+;IYS~P=`(KtV z@ki!@TB1DN+D&V%?0hV~yJ?lXR*52m6&^%lnj_&hcJwA`(T)#GJ3o-%XBNN|JXQlX z2Fey>b^cO_#?5~KM2+caEkzfU2%-LoGMOjRm)m}dS{H9EK@TUB~G!&y51w94r4PFyL1IY zN8cmG3NNLqyWWTLSo$LmjVCuD5A^QNo;G6y!6%XMs414=6SIl>HGY?i5=BP>r%}@Y z#>041Q&yfVRYt<2rbZ0+8bXHk;@ME7oDI>a2|M8nX>0QQe&&}5DVGQ~-s51q{~ib1 zK}{(7r1v82+(v_*EPv|~3OMl&{#$CR<*kJ|D_;)Vrj^mIm@J=)kj5ul6UoqaAffUu zJuJguhzzN@aKQw^#ZK50WqR5VStwkLMi#)=ya}Gm@ChV5!)piFa5_tQa`4t<*CWIt z90{-DR_eq&W)&qKA*@B)zQ9RwSBAG2BlzxNBG>KYDTj#r4pvZM>aA@-O=Y-yNCf(8 zi*VA^Wq+-robUx`jZGy*^8n2kmmQ7_(5ktfvw_9r6W(ZiNpwX`>M5w5*LF5Q%cYp+ zi2D^ZpF;j@q+FPT!2<1&@NxDj@yNSIcvRGm<@VkMM*sGxSThoDDry5v%|!b^t&nep zaa4r0O^L<9?wKVVvkxqa9>;&RY)b>RDvrv?hPK;5TChpkd)}76sLFl9YC7%d=u=O;2-dtT^@fqGA#9J0NZ1MAZnyW8#$2e5%Im6%R??l3$6V7n0ImEp%ltOviOWkPmMG1x{jiFLjVCD(+0aLB(-i+5- zK;(HDFJl*;yv^oYQ#)-k<+de0m*|Uh zT2bBJY}7pMUqbWT0kh(!R8HQuM=$flMH`po(a!j*l7rxli}NTcp$+L zgLPM9g7~Yh=59F^M#byRc^4vKX>~NHXX;H@m zE-Sn9E=Jr=`CEdaqNV>j?6RGxrwuhJuGM)hY*d8y++=EE>(oGdqbTn-i^h#LSLOC* z(YvvB(j2!D?Pttp*&*Vd$0nLybP@y@E;ckl zhxlQWIM76^tVe8OeU9$2{b-^&n{t0x@Lxd}mz6ZtYT-_$PEEBU12r!y>$N~)?pO)T z=^Tln%SiT1PlCrVJg;7+A)5gx%f;~OFmts#|_dG7w1YG0>tux0T-Pgsf% z(At|~#FPPAY2~|B>>Qv~HD8H^Qps~|9|vetP0IEB>_`U&X|mPM39 zQ`_d@Qf7f1EHi4PmP0X>v`rqZ1v%o=tOH{;H>D4bpU@S zEHV)a8DrTZVWUWaR&0@6KA8$w#e{K~IJ_S#4vvH0hL2_0N2b|+j?=oBEHjVMSmLmm z6u;xnm4yS62UEEQpCWj>E5VPEuqTXUIPN&Xvl%{Shubhb`vk$=nE4nx^C}DvJCwB& zd^xZ{KH}a23HKWwj9=eRIz+pDQs6UCIvRy{`ZGGU*y=r~;~gFY#Cx^~9onKUpp9mmVLOqq+BJGSWH7%hx| z)8zWs!=7Tu3~jYn)s!q)hFUj7ZqYg&JqiirIfTbV-;p2t53mJTwL>OTBk^vgHo`R3 z)_a!r+Oa^&`z&C$dkC>hY-mcs7I(j6;B1r?gXe1fm19xj!CbATvSWbFbDq}Hq}+Qe zqUNJ@;W*X#T64D&Z>7{H5F-VHdN=LIZYHWN(0*4Es|wo!%~v_rMLbxbHB$<`5&i<@ z3l@<=3-Qff72{$#a8Cd|zC(l0XR=vGZ0>im?GjokCuNW!9xc^s;BGpvWzcG82Qg!r zc3k=KLNr~D;@}Pca%~vCKC89@6SP|5zzVIp(&D*DTcH)iJ091S=sWU?n3Y-u8tF+2WQcJOWl{Q8x_*9f%trf*a^0uqB8H%l}NL-EK;T(}| zjn+;{d@Ope0gCTM*J$IFxH2NgTA=-H<=1M%9D|HcRO>M?iVWQ!vSftY$a>_FC9u&K zJ~JnQ;NwU#79+%i^;%<(C(j6WWa^4`>T`8P=myxnyI8zIi^T`$MK@|2m2vmQ)s0#| z(<)o_P1q;%Lb*nZdf4{=g$e0#4$C_70^_*%T!na{LK`ks6 zY}3kGM%9OYu?OXibtRM#l;TW@k9q4qpc>znzYV5p}j}xh!tH6Jd5RHJM{bc($`rvcVzgv*6E&z*k?A zGOKTqGW!ikqoK@bmNtiN+<>`^wR365@b!m8{fXfsH6VocM^&p~A!VZy2zO?@hMl}1 zlLzi0xY7#}-a9F?s6T>NP`$)SI17?BG*_nr)o z=iptLsr%Te>oRQFLd@M5j*Dfj|gIjNeo z3h(3dJWP4^FpESaTu~=w9&EXk7E7ut^Wz0(b23T&li1ge@DR(+bwcu`3C^4hzGGq5 zQ`{6gGv7En-$62u)!BTG#E!a7s?C0$sag|;`@AODhpC&{sr?yFT4AB#)(19>uXHaO z@a2+t?7?^PbFIJ(t^aC95-YJWT-m3>rP4IQd{~v>+aE}xag7u**%dm>aGSRTpJn*T zGfSqzD;ck{h7{_?3eA-@K?+S|*yAg~u}r@9StfNizzy+kAU1!5%eK1yNydBHwAmn; zq?LvisMnrS88UDM=Jx8Vnf8G%;L%DAXD$(dxA6Dj%NQZ*UlqeAJK;(Z_a3@>~XnVMcpJl?GhH}w*&_h=!w zI(Ok7?TqrOuIOe%XYr=GZM#itYw~#diX`|wBu!gBhNe{I$$`RmpJs83uOzu2@S7kb zlQl&CA*XheMf^UkspTlg@7x!Ox|Hk$shmj_kqwDOMLf04tUSu(2(WSS;lAk)u4_`XHxU zV9w#0PPJsu_m5xdr7dBoZ4bC$>(hjd?xIItedocI;cJ7nK^y8W} z|IHvU`R}O`u7EzF^)A#V152KRQ|jettmTG=F=5*q#j*qiBiJzz7BxOa-(^{bWUM^adV&rxGkZ`{`L0C^~5qJZ4`?S_ldFLz2p3y>b zZ}mm{jGaOrf;SQQE*-Emp-wO;Wq zc+X2@p%-2dLrt)v4_WB1D^h&mPxh^CxNx2iNXZ8nay%Q^gz1u&$FlGa<#RtvZ0f_A z*n=N=6PwY!sGmG{j^IX;4b8xhGMsjksPCU4I6IiIqpW85+bx2(>?Qaln6M{IX1K#8 zCyFvom@gwv)RoibO0uQ&V7%iEA|J%$f7r>x82-sctXYPrry=3B$D)9Zt0hSP-`Q0^ zV!8|oe$q-5i4^4N6<4dZ?ZXL8Qyh6f;k2 z;Yv{tap$zwLb>A3wK&uLKWlO8&Wu{DE*{@NEuP8Fwdi0QcvIHmg;KWFw`46|=t+Wp zup^(6(?P1myso6a^%Pm)A;YtzpVNsnpYwAqmidcoanvQsmwJc{UGf<6Q5-sgd}uCh zJ5VidIzn(6$%bli6~p(=6ZL+keuacE8~=%)yzjW8#Wh%p$EswfH2T zti_h$qWoQL6b|0ld{^^R{_z%9?`qX?ibjrm+H}lb7Tv=!dmp0``S>?M};7dFQr9*@HayE?>4fhs3^1t+H^(xEapGZswzK9 zi>nW`rv6n6N|KB{yUw2U$3i0uJu4VlmGD;f{Dp9QinKpIF zMFrk)fZ)e21m~7hYAW!%oCHTGRG%f+Q;l>-!e>BS1#FD#9}$KxQv8Z{3Tgn zS3|GXWK#>{+wJ&F7GZ8na2JMW+u^}dMAgFJk#TqL%mVaGCYr?0{?c3{_?bG{e)1VT z&XZzTkNb+5lz943%d3Y`7VL1YE=&p95#@ef+wlZB=RcQKJbQ$Q8e}W-SPL}CHw90$ zp%w?cUVs~P{hNwC$A)5)mlw|t_Sn$0mEhV8|7M3Zh9|M3KNz)L$^BOQ^X-L}l2WA+0N?jUAU9U+n0{*5f8kaaF8 zw4C84C>6K;-3-qhMHO^;3sF04&ossYhRf9_O($@xbClH7o7&>so_~u9@tB4a;!>u&} zoft1<#~(1BZ#I>@Q!Wy|0tp9{gMf`b&b%Bh20YbHm;U(>)n@1(^miYo76@udw&uZtT=uLa+r7g_w-_Y~!WQqt_)%_;RiP9t-e2lQ z7LQ=KHk}z7Sb*V%cDN+NYj}4>#d$>C2s*IEvoRb>0km>pKE})1@mJrdtduNZq@8{#=Z2D@LPt+(`^*n<>G@`@5) z5N(t0akTv>H%HsWE;36-w0*769}A6V^uW>f4nI@exuA$)UlDB+D^tA(IZ*L@R%cr0 z?H4M&!Czw?{Y=LDfP_tdh2avsFt1w)u7iZ5?GC_32M6eYjYs@J+jwTN&CbFqSs>ch z4JHjbGahHh2eF7m{#Gr7;h}c8i4@_Xl35~UR2^iZXEISYex_*Kil3>}_2o07?J=1D zmuOprvLMQaAEXoxVBYtS-aX4M= zpIUEa*9Y6?pISA1zi1Lhy4FhhnL0m2ucW+qw|kWCZNggQB9k6zdAfm`Ug&(X@$iMP zF}1C1uc?MkSO_k{a4S3f>J`B~XAzv0;mUUSBEv5z-UKGH^SjyMtqj+T;{iC7-(+CnY-w4rybsZY5G~k_RjW)u5UIen@-s( zX4i+Cl;fYoW@o*na^bpAa_GHHj<$X|^bnJB?1R|iqMxu-FGH#gj3w17{R7pgUz_rf z3jPD<)MMP#nBjC8z^GsA$#4z+;L|ddsJF)ernXm?;lnM6x(mazk#N6NjNu7Y*lei} zh`gi}P92xZxTztL-(xtN9Zvd(bn6yL@W^xiBswU4`SF$T88Wz&2Xps1g~IsyfP6m*|itL z32c}N4DUd~cCE+o$^f>jJEUSjP+tlsyB25MCzQCS-5|J>9o8706i#rSK?Ikc0BW-9 z%bTRSFOP&i4J6pv4xeZE8Euy;6xiq~;WLr2UAF)?S|^ZQMZ=HUc*hSfQpClNT4C(` z%juy9JC;jK5&oaF7)M6{2R>;99Y5Vq5&Q3Hg|e=ZktJhnFik#VY~UTpV}lQUX>8z_ z`%Q`%cV8P^sEZ76zYGo>q&sB{4nF-O>KD{wl(T>H=-}Whk;_wWTJHBGnI~g(aPa~C zvCud{4?H^9%g@wLZV|IR^?8=lxyVv(_o%3*v6+^-d@8n!d6 z9V6@ApJ)F9e@$ z;*FPX!yC3gz0o2@h(vF_rzui2^3iMHsDc?jdc_*AB1o@+!>Q=YN1^EC-xV)Hgw^>k z_P`oF32r?y)2{gd8%J)5pFa9NEW7M2tgqCkoMNpI;JW$hWzet0`Rd)3vk%2*U%j|# zg(&2w55SwpSU>$*E(__}L0-1c z_OiV!s(V_Zw^ErKccDUAknnrU*Qcq>r_2PqULrUW3Ga!x#Bi~{2;MM^U>~`lMPF2H zV|W_x4!V1h;M|h>u$+R%0XC{#g#=7NdpHq~p3Gx8lK4ruT^@IAuPUZ*!RDLB#dVuf z?}k|Kt=Cju92bVS-a~nJUTiI)2P;=^3#*S_A$UeD;^NHhzs3-7p}MrwbCUmxqT@o|v=9 zjq|N}DbA7eRF`?k`tgTT=p&4|KZwV?e#GM<5;pu2F|3^40Pn#MmDBya?!hYZRW4pI zhx&!!$lTMv=k68mGX6-oOQ=($mcrz(w>NdMb@bO8n(}?zCN)3c*9IdbI;;GJvHhGl z6rhJGRaOY6@_HFXUm+@%*Jmozn~4+U^>F3N3X!9Nol#r$(M@7AR?(<7g5R-w$;Ow~QpoR1PrDAeL z-KS`AIU>b5lrGzjVvBqhzsx*1E!pWp7FB)&;vBV9oU5o8P+Bh)i4}D(ENYtr^$H#z z_@&y@revb;-80=LexGO&s5i*#DP0CiU!khP+3YXywZyJKy@WEPiFg>OZ&R8q6|*Yo zl^k6iRoj_LdO1aTzDT47>7%ptTa*Q&ix=tUpo(!-^bo}&#NjG>pmJuP_)oRV;igIp00T!h~P zuF-Fh^AV>U22Ncd+EmxSDKXzg%V0fD-u9LltQS$Pd=oip=%LE=dA1fc^hm|SZI|rL zoY>=*n*cwr7ir+L;rc3l4jOmjUyvxnl8olT~wHAFVm3Z7< zkkVBrt0XC2;5;FCOml)iZ30Y@a1vm{lf&UH%Mq%|gvOM~tqC&Gmhn!^!^RsFR$?Ir z1Ei~RJ%%FP>1(A4+ogT@Qtl}EY~3%LxKVrs{Z5x@ zci=p9nRaAGepu27jtc;BUO-2RGv}JybL9$`p=)f!?x^QPM;3epo)^QrxDn$-}=yNHffTcmE~&Hp7I~O{{CCmsXNz zitEiVK*5nx&Ge1RA1lSIK6-I+xw-DHJhO?H&2@jQn-yrG2jDBZMlBFA{ho_{EzsiM zFSlK6p+7d6a)@oM^s-9AQjyR~4-8$%3rULvmE#-|F2^GQovKAYf=({cS3jY#IpRb> zV-Z?+BP&k5N02AOyfsd35N%rPrA&)#Q(Eg;6swAHKTaz{?o1@1?X(auR9EpD{c zJ7a5T#df-X-ceNK`H@sp3G!N_x{JiB4tgFD+fE;-oLFc}Yp1U>nLKSPJLpyg9}t%9 zta~Y!acgR4y^RS+rFYiLVe{FY&U#&Wz*2>gV?@5Y%Bzd|7M2T273 zHRjn0+2M~81ncDh)0+Nxz($D}DfoC&D=f?+ z@5?mq(p)L;Jdp61xf!$SzmYU4U6SB+ay8(p;)|$Mf$@m)!rvf?ABtL*SD_Bp z3tB4UYg()|++j_cGCAOc@uWm@Ze#vLS>d^&hrqd$%07iou?PL7fnGt+q@@@LC)LNF z;W3x6qdO@ok(Bo4nu_rwsmGA;-rZ?nYxpiBBRuHsM7yzCj-yOdk?<6_hm>t~4(>~; z4a!e&y7X{5%q)!IhqUoGunEI`iUX#Vh@uQ9(1xbKJG_XZVV#p}z${@{_XwON+}g%D zs3uiKSJrf~)RbKA(Ku3~%4ven!4*-_jmiL~nmWqxVm_|Tm#I70sd4`EP`!q-Ym(SJ zR4?wAiq<$`OdZ?^;w4)my2g>CB>NVAA?U!QmnDuAUx#A!^=OeOI}D4R@smZ1VR|F4 z0%K*5e##B);(qmABm}WiF$*j4hQ_?h~!kA5R@tLoL`b(XFQ7?S8UlVSZVN>h6>B<1w$sJk00sLJj7*Bg7I#oXgmR9sUsuB_zC)b z$2HkXiVhR?8J5rk)M7gBl}Yf)qqxlBn$#!zK(bX4hHEffVjtjB5`H~^;H(ULG3+nl zO0qUCF`T%cm^(1+AmNG<-p25m{al*IHWGdX+2Sim90%h~(&bUd>n35a9U(qV(nsXG z-aCs!trjhtN5p)OxrxDbz%}D?Z(*6N`^n+RWQ?EYi#wC`qPUC>X&aZi?=Smbz6YCUF6Y^0bFY zo}w32PWBL5v>t(zcbiA+%W&V%`)GX)#=G;U>SN1%YYzw90tXDR`(ZeV4)obY8uUXF zZ^oAy#+BZp#vl4_Tqrnl8l+(CJq_znFWQMw(;($cJF#GzUb#)pze)d5JBa!N&SsAH zlGMd|k?Fk|Zp-kHoq!8USY_D6FfL}3^}0G9Z~+M?^%O;7bZ;f4tEd;F7kBxmYf5_9 zlrK>^!(*LlIh7RSV^FeHqTqDhN4Y#&)SQm#ODoZOx?aL@tWr`;p04*%uJ#qLr|WKR z^`xloE&PIT4_(qv6dgv4d1!sX|eb%Rxg5!=N83cYJRkj_z|nu&O5FT%p`Bw zt>v<(CB7muz=V2L?0)ucuS6VK8dV z&EzsA2eKz0HXimTlbq)DjYqVU7(52+k@1aWjk}1SGxW;EyndE&h#A=;y!)3^^&(9T zV@to2pF?*=y`ej36CQ&vTHY8RI*JZfxKwE|(W<+-H|IsoEp+g7@IY{m_mfMC?Zr+j z#_vPKYpY(=by06DR^j{dh?p=n!aCeLMt-egR1hU+!T?qgITLSnZ;cbvX6of~6+s{i zIFh^oZ}~=bk{aLWtR|r1e5isffIrpqHte*pk=e!A?7YkOXXz;AAUIs z)8Rfc2(&=`A9BJIAoLqXMH!@Gomze`;SfIg2-ct-@mG_dqDh=y(c%nF0oP*g%5G&G zu^HYK0={kf_vc>B{rAIdB=<8gz@aSva^FCmt<%PD;BFlg1lr!{m@(C6QAVG3De0%` zM4FNYz$r4$_Bb3VIgJM=%OQAwrlOsgRYIy=(WD?Ek^v*?7maQXljR*A;j(9(37-9; zMM`?~k>Twoj5BqPYQfA4OEuvVnY%N?Yv8oD=q%W_xJYfbp0`^u=@qbGLKFzFOmGs8c8ExvGmw)KxqzPm8he|{>@?^mGf=Hh(*0T#rgTo8cu1Mt%4Jtabw>Ncd00U;HyypHcQVv{$r&n6Q{f(8B6` z9l4PC!a5381@KqAlWb*UP^CsuA?E4ji++qG?L%YUL}1_+JraLK-K?U4Mvx3 z&t06DkCo-~-NeWFdTH-vO_19f=t^v0I$ZT?xVMyZ=eMC)pe-b7F3|H8Y$JKbI!46Q z#aJ}3ED8~DEi~q_3@*#WkOi2tHx{!N=t0>=v><=Q?_#>St(FXW8ES=#lLAXs8^6e=6y@iQD%iP3m=@}J3aAYvm$CS* z%G;zcR&}|%D7R2=9o`DDj_#C8-j?Cg5Rta}mqPbI?M^x368(*0lJies zh*V)Qk24$u=a$KX4lXU!gI)g2B$Ori)K7RU(mh?HWk{BxZyU_wGUZS3Nj_i<7L6C_ z`L%`J03vgw7`RCH&wdy!lxpTArh^+7VR1(lHy7!ZES6Pf2NXABMeVKezAuHYg|gl= ztR`#xcgTu}%^Hr#9c~SaL|IZJWi3TmJ7VWY#z|eDrSDn8+5o*zXa&B{Pj`1U#z#X^sFmO zhGT1SaR*+{A)MlR(29OWqel20m)^-*QqgM}52TmkkMIa<7;=Sj-RZLKoQ%O;7z~m1 znekhD`5Vqni*AeFu~%Hck)#qZv3>OfW%;ziT;vyR6O1b8IZ&rl_OYtJzadq3eIQj! z^$!EX|DkI0hEh1I3eAogPa2B>OJygx;@`@Vm5KA|m*QOsE+<&3_tr|hChpzd6ZeuH zq5qq^Laxf(F`GMP%oYch=>@Te^zJgfXzt)Tk}Sd44b_vAlaq`sBG+=fThm0v<@z7F zO!ZRI(TL%T?BBD+h2?rctG8{53Zo3;Q%3dNkj*F-eOZVaUd^d2YRM&9u1%wJi;$Wk z)Mj)+lb|WZT9Vs3Q-Fa1;|jfm#R0$k+M_+9x^a5^3QV|1ThZXx9&IHR&`E9r-n>#3=90Lus17Ac`}xQ%OEJwpbC?M5-0}+gfmMrTC400zIUf!9f?3f zM+&AJ=b8z>m3mR-T1U}vCC1;i#gdhJ0oSZ-Pwq>qw322*tLiB(uGDL0k3^e?Ddmmg z>xA1Xn0c6}wn{H)8Yz0M!fI&iPNL~dJ+D}@O83mYwx4{rH#{f?>$0b1Or0yvtnFG(dF&`_JeIi%Z| z#h$hLi^4~qQ5#4#kdSwo!(%PQWt-MzOLj79ibLykH%n1e1X?b3OJ%%k`L`LzI!%00 z!U3baZy6kneZeGys<3@hGGdqgZV?9@|LoKkLVw8*iEX6B9O2c1J3$dhwW0TemhF=U zffa}?87r=G=n`-?>25XBhF4+1(Eb0LVGd^4n;9Bj8LACIRku%S3f1DU?Mtfu3TLT1 zt$a%6xSRN2=4fcQhnHj&JBIqLj5wEF{)9JBQ20=YNXPC6i=Dl98 zZ8EhJ-8Y~gDJy1e&_hEWE<$5DLQCavc=Sq!z^J5Fl?TJ0M8q}2&AD7Vo;*usCxz+jUQW_^6SWM%j637&fJ^A>s zSFGNshtz0S3(>=_su3%RV%vu!)DOQV6_kg7{>dzAGK(z>!D0*s*~Xht;k`+(-ML-; zl=LbcRm*eq0)_EvHeQav<-5~b03u>LqQJ)y$`cG9*|y~SrbHQfeSw0aAo$^zcsU+6 zT;y-DVVJ`uhR0&B30mBDF?6%;B_3_k%Xi)s@vkI-uhKGl>O^BUfL|pICD+K5^czq} z8YEZ};xMiYm%sg|q=r&bixycWV>$AdMR*x584pAePNE2JjdRsOM)$?aB3u9p#-|tj z!g#OzEw;|DMOYUu;x-_XmDz&1T|d!$i(bA&Ezo3oNWc-pkijwfepFttD+&l7zoL1< zW-emu7Cpa3!*6yUfg&JTmqAh;Bn2di9Faraw`d2ViMwUV5@`i0V5n)wl2TOdniXe*1$Z! z$~%YOlASY`wPexqL)6E4|6%l=8DhL8Gi%^Ypj7eF@sp;3LneLurm`u>EjLi=BeEVx zRuHjHo&SeU4OpiMnJkgns4R7wPk}e7y_mCA-=ut=D{5@hUCry!GH_spcz0fR7sIz< zVG1MDZCJAY_Mn9H!`MhfG=IzuytnIt#clX8HWJ5~56PKS4SffK-CFvoIDYa@D$YO6 zejvte*V}|A%1$^o3}cU+;Z^R9lr4G++8j!;Zmvv%OU^;LmrCnqhZ?lwAlAu548y@N zBqqNb(J;EzwDN-ED3~z-v>Bd3wIC>h-v(O0p`z%4>@@02HKVwmVq`{UN zYrdDia16JG=S1@uLmYAUGc4jtuhR>`Q*jMDykc2UDlyB&=;kL5#nU4$EivV z#x>c*>C)H0hMwq5kv2u1xl=-r+MTAmMLcvDMy=m0-^$hZ|J`ky!q|q_Mqt~;&?3iLtvzB z2CjemThHfxTefBR?kv=D@}sz3asT%I@VYAZMA+ZhB;|2WO!-?cu3Wh*w*IaA=RR~7 zJ%4r{T_oiKi#Rc)xKqBIBW0bSXN^R`+b1Q}68U!PJ~>BJz^~SEC>QqW9K&d)?r!~x zM}Df8z;ZLGdNwYDy;{qaxraf*e~%t44(`!?Mcf{|Q`sgC?a`|ixPcm!ld*H$vZ|Wp z|Hw{c8vela79&|&NpO)(ZywEu?ogjgO)#co@#M|W?mQVF@L3EgH*h+XJ0J<>RwU)O zFnp5X@e)2L;V8h8PxIKi2yex|{Xf3G11!qp`Ja376z+XbKm`FsKtMr3LB&o4D@5$Q zV~xE;jNMZ~g`8*fYgucevBcgLyC@3w*h`FJ_dSVX$Hc<_GrR9mOn!f#M|O91c6N7m zW_Gr`d+=F9ROf=Nv=^<&YXX{s+2+Cl9DY}3uMZf$FW)>%a0ZzM|9+c=Hsn$pnzD?8hGFHCf(nqCh{V@qX0eWkK;{J)kMYYud60QI z6J&g7{C;5UkRhtfqd-CC+SkRi8nQQs3>js1LM0)TXV1Z8nggz0gt?$iT1)ug5O(db zp$1M04Mz-t_09;tQJo$Dd<@3~Xi2_UW1}-V`CYp(Ton7LIth}2f@Ii5HtdL@QWaO? z3$4DAk3+H5b-_GIHO&q#!q;6HjoO0&*b`8bgPDB9P_cxwR_Q5!QE6&3_T`AdJ?4D~ zmH_WHeyK-Yl~JnvQHg%I+qzYlv)%$i7S2I3BiB>x*nx zkv&{wAD!-q{A!f%#a^ZwDwmj75tYoqPEZosiVcoY=UK=xL+N${Ve2*HhZSJD`T=4@ zegN(1_CO`r8FyBzllMq#w~Y9Sjgzs|#f7S;>K0gTY=L33`5|-yKTZ-4?>-xE7qerA z+Kw%}0W*iBpJO+V83OD7iD3%6oi#&!2-X1?TNDEQA$U%@y$tL1LPoGzZPWxu)jEyU zKW->nwiHKvar7WDyO@^XS6~0B&Ek(6B7Dt(1*cH;5Dl5;b6=sB$?WoRT)o`Gc@*Aq z8Xt#)CUA*0z zrMedjJz?++-C0X;Ww5AC?E`%gMBhPu1W{63aRc*eeKz5QA)xLZnz)ns{(oB%3z5sH zBEIy373BB-FjLUlP7SF>NZIP+D0b_F;lA|X6gza%;O(@^3vg^kI>%Th2VzIy*-4zd z?Vrrm?K8e?FnnB&cfVBFm?k!Mw2ficWh zr;#y)mt2caVwUhh6ABdVhs?0cWLh)v`#|b752`bhw!BXnT#MH!h+2uwKV_&aeW}b+ zPZ`{uK2n}IGRanNRAx_48S2-ZGyZE&vsv9dPqPW+-1UDbX7e;PztEp`Ic+G@vo^*r ztAf}D2|JBeh|Mf@ySr%9IC84!WGgK`5`xyRF7Rg zZ3uKe0S(Rfgw@f^aK_NclqIAbq?t`*aSQUP+`0 zur6sZdbBMDAw+f7d6Y{Pj&g}5y+kp<5hEoAS^`r`kp?JX(S z*CvvjY4sVmvf1jd7zAN}KSw9O;RZOn0;_t#;1d->wP31654h0VirB^&%h9 zOou#Zt~Ps2L<<1x3|MCy?7K1_+zA*5U>pHylrYa?|FFfPiv}O(*ib5@A9jc{XZR5o zdJz{l?v-RMFB&{*@#O(EI{(CFI{E5m)SBOq5d=b`E0z?E_GUj{GTAqOq_6tqeeBvL zoNF#T#2hahss{M)qpo~}oOLCR{^xf0O4j4D!M(*SxQe!8M@>`ltHYSlAn^xBaVs?( z!GR~V_#aHXv=|$S?Byc624z2{?B?wFWkdPiNqipGpGG4fJT_Y}-JLf&I-^l2H*pz_ zXdlB)UFu3S^Og&hfyS44G$&&;&Ca5)39vCl4GQJJnp`pT2tLEB4_`f!H_~e=TH%0w zLA5Oe5YH`%8yPXUuihG4`xmYl+;rpE<12TdJQf3hQ>8hb>sh(shu(%BpEhhil%r0Lw)PgNGTr<>QbFSe| zQW)!g4I?xsj745El)=H==4*zK5{<|xploq&N;0}xe`Q&OmK(~vucK6J7I7UuXD`;1 zf}fe`x}mg-c^D>6?Q#G)_5;{&$Zg&0D{wf50hb1T$KFXG2D1k4#1<^&CbG9{*@0h` z&Ix9vZy0<+-wZ8W*-5YhR4+jJi0W9(XEv%dL9Juo-7u6dF`rbbV85obWjAnm)rqAe z2tI_$P`CqVV-^fYa3Grms7PrsGv{5Wc?X3nd(+@qtZ6wKnl$#yulU-b=uX!8rlC@R z=Ux)?Mn3o-s7@xk1Ep{!fwAD&f^RCJLBHKJ__{PEnM8w}$Yg`h3)rojxY=f0bPIBU zr)qB*DptHeqbvpzN0@19Pe_5VROo8*i*7w&W35&f*8dht&SSH08A2Ufb9Tj~1{NzCG$+G`2ly-ctF=H!px^0NU`)+M+ z8|venZO(1D2)Oxj+b~DhgSGw>hh{U_xIYcwmj4HS>Wt@8$`b>;u*P%bn?QB$OmRjf z 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

m@96$R+<`a+$7Q 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 diff --git a/lib/libZ1_UDP_Linux64.so b/lib/libZ1_UDP_Linux64.so old mode 100644 new mode 100755 index 87b0dd04268aeddcf2c6c3901291b9022a05d433..e8acd0c7c1131074069ab95f2c8146334a7261ad GIT binary patch delta 298616 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
w4WQ1~KyY5&siEHu*N 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

V1Xs$B$wR(QjIl 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%0D_BJTbrn!@*^hTnVrbrp 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 #8*0;{bm};JWt$TjeHLRO#X93(G)$i?GGrx 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 bLcwiSB^}$>?-aJ!U!}GD_rnPHALxGpDdh@8 delta 298855 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

WfzWg;sssBL@BUT)*%*m3W+0KQG_np)alaC9q?v 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

d@?q~oY|W4o@LqGkh5(HDU*?}v3sMmoEL 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%0ANsrm&Mr4V{ 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 L^^YT#pP~N;9stateCSV = new CSVTool("../config/savedArmStates.csv"); ctrlComp->geneObj(); if(ctrlComp->ctrl == Control::SDK){ - ctrlComp->cmdPanel = new ARMSDK(events, emptyAction, "127.0.0.1", 8072, 8071, 0.002); + ctrlComp->cmdPanel = new ARMSDK(events, emptyAction, "127.0.0.1", 8072, 0.002); }else if(ctrlComp->ctrl == Control::KEYBOARD){ events.push_back(new StateAction("`", (int)ArmFSMStateName::BACKTOSTART)); events.push_back(new StateAction("1", (int)ArmFSMStateName::PASSIVE));