cisst-saw
Loading...
Searching...
No Matches
prmSetpointMode.h
Go to the documentation of this file.
1// -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab:
3
4#ifndef _prmSetpointMode_h
5#define _prmSetpointMode_h
6
7#include <cstdint>
8
9// Always include last
11
12enum class prmSetpointMode : uint8_t {
13 NONE = 0,
14 POSITION = 1 << 0,
15 VELOCITY = 1 << 1,
16 EFFORT = 1 << 2
17};
18
19// operator to combine setpoint modes
21{
22 return static_cast<prmSetpointMode>(static_cast<uint8_t>(a) | static_cast<uint8_t>(b));
23}
24
25// operator to test setpoint modes
27{
28 return static_cast<bool>(static_cast<uint8_t>(a) & static_cast<uint8_t>(b));
29}
30
31inline std::ostream & operator << (std::ostream & output,
32 const prmSetpointMode & mode) {
33 std::string mode_name = "";
34 if (mode & prmSetpointMode::POSITION) {
35 mode_name += "P";
36 }
37 if (mode & prmSetpointMode::VELOCITY) {
38 mode_name += "V";
39 }
40 if (mode & prmSetpointMode::EFFORT) {
41 mode_name += "F";
42 }
43
44 if (mode_name == "") {
45 mode_name = "NONE";
46 }
47
48 return output << mode_name;
49}
50
51template <>
52inline void CISST_EXPORT cmnDataJSON<prmSetpointMode>::SerializeText(const DataType & data, Json::Value & jsonValue) {
53 jsonValue = static_cast<uint8_t>(data);
54}
55
56template <>
57inline void CISST_EXPORT cmnDataJSON<prmSetpointMode>::DeSerializeText(DataType & data, const Json::Value & jsonValue) CISST_THROW(std::runtime_error) {
58 if (jsonValue.empty()) {
59 cmnThrow("cmnDataJSON<prmSetpointMode>::DeSerializeText: empty JSON value");
60 }
61
62 // check that value can be expressed as bitwise-or of known setpoint modes
63 unsigned int raw_data = jsonValue.asUInt();
64 constexpr size_t num_nonzero_modes = 3;
65 if (raw_data >= (1 << num_nonzero_modes)) {
66 cmnThrow("cmnDataJSON<prmSetpointMode>::DeSerializeText: JSON value does not correspond to combination of known modes");
67 }
68
69 data = static_cast<prmSetpointMode>(raw_data);
70}
71
72template <>
74public:
75 enum {IS_SPECIALIZED = 1};
76
77 static void Copy(prmSetpointMode & data, const prmSetpointMode & source) {
78 data = source;
79 }
80
81 static std::string HumanReadable(const prmSetpointMode & data) {
82 switch (data)
83 {
85 return "prmSetpointMode::NONE";
87 return "prmSetpointMode::POSITION";
89 return "prmSetpointMode::VELOCITY";
91 return "prmSetpointMode::EFFORT";
92 default:
93 return "prmSetpointMode unknown";
94 }
95 }
96
97 static void SerializeBinary(const prmSetpointMode & data,
98 std::ostream & outputStream) CISST_THROW(std::runtime_error) {
99 cmnData<uint8_t>::SerializeBinary(static_cast<uint8_t>(data), outputStream);
100 }
101
102 static void DeSerializeBinary(prmSetpointMode & data, std::istream & inputStream,
103 const cmnDataFormat & localFormat,
104 const cmnDataFormat & remoteFormat) CISST_THROW(std::runtime_error) {
105 uint8_t value;
106 cmnData<uint8_t>::DeSerializeBinary(value, inputStream, localFormat, remoteFormat);
107 data = static_cast<prmSetpointMode>(value);
108 }
109
110 static void SerializeText(const prmSetpointMode & data, std::ostream & outputStream,
111 const char CMN_UNUSED(delimiter) = ',') CISST_THROW(std::runtime_error) {
112 outputStream << static_cast<uint8_t>(data);
113 }
114
115 static std::string SerializeDescription(const prmSetpointMode & CMN_UNUSED(data),
116 const char CMN_UNUSED(delimiter) = ',',
117 const std::string & userDescription = "") {
118 return (userDescription == "") ? "prmSetpointMode" : (userDescription + "prmSetpointMode");
119 }
120
121 static void DeSerializeText(prmSetpointMode & data, std::istream & inputStream,
122 const char CMN_UNUSED(delimiter) = ',') CISST_THROW(std::runtime_error) {
123 uint8_t value;
124 inputStream >> value;
125 data = static_cast<prmSetpointMode>(value);
126 }
127
128 static bool ScalarNumberIsFixed(const prmSetpointMode & CMN_UNUSED(data)) {
129 return true;
130 }
131
132 static size_t ScalarNumber(const prmSetpointMode & CMN_UNUSED(data)) {
133 return 1;
134 }
135
136 static std::string ScalarDescription(const prmSetpointMode & CMN_UNUSED(data), const size_t index,
137 const std::string & userDescription) CISST_THROW(std::out_of_range) {
138 if (index == 0) {
139 return (userDescription == "") ? "prmSetpointMode" : (userDescription + "prmSetpointMode");
140 }
141 cmnThrow(std::out_of_range("cmnDataScalarDescription: prmSetpointMode index out of range"));
142 return "";
143 }
144
145 static double Scalar(const prmSetpointMode & data, const size_t index) CISST_THROW(std::out_of_range) {
146 if (index == 0) {
147 return static_cast<double>(data);
148 }
149 cmnThrow(std::out_of_range("cmnDataScalar: prmSetpointMode index out of range"));
150 return 0.0;
151 }
152};
153
154#endif // _prmSetpointMode_h
static double Scalar(const prmSetpointMode &data, const size_t index) CISST_THROW(std
Definition prmSetpointMode.h:145
static size_t ScalarNumber(const prmSetpointMode &CMN_UNUSED(data))
Definition prmSetpointMode.h:132
@ IS_SPECIALIZED
Definition prmSetpointMode.h:75
static std::string SerializeDescription(const prmSetpointMode &CMN_UNUSED(data), const char CMN_UNUSED(delimiter)=',', const std::string &userDescription="")
Definition prmSetpointMode.h:115
static bool ScalarNumberIsFixed(const prmSetpointMode &CMN_UNUSED(data))
Definition prmSetpointMode.h:128
static std::string ScalarDescription(const prmSetpointMode &CMN_UNUSED(data), const size_t index, const std::string &userDescription) CISST_THROW(std
Definition prmSetpointMode.h:136
static void DeSerializeBinary(prmSetpointMode &data, std::istream &inputStream, const cmnDataFormat &localFormat, const cmnDataFormat &remoteFormat) CISST_THROW(std
Definition prmSetpointMode.h:102
static void SerializeText(const prmSetpointMode &data, std::ostream &outputStream, const char CMN_UNUSED(delimiter)=',') CISST_THROW(std
Definition prmSetpointMode.h:110
static std::string HumanReadable(const prmSetpointMode &data)
Definition prmSetpointMode.h:81
static void Copy(prmSetpointMode &data, const prmSetpointMode &source)
Definition prmSetpointMode.h:77
static void SerializeBinary(const prmSetpointMode &data, std::ostream &outputStream) CISST_THROW(std
Definition prmSetpointMode.h:97
static void DeSerializeText(prmSetpointMode &data, std::istream &inputStream, const char CMN_UNUSED(delimiter)=',') CISST_THROW(std
Definition prmSetpointMode.h:121
Definition cmnDataFormat.h:30
Definition cmnDataFunctions.h:51
static size_t DeSerializeBinary(DataType &data, const char *buffer, size_t bufferSize, const cmnDataFormat &CMN_UNUSED(localFormat), const cmnDataFormat &CMN_UNUSED(remoteFormat))
static size_t SerializeBinary(const DataType &data, char *buffer, size_t bufferSize)
#define CISST_EXPORT
Definition cmnExportMacros.h:50
#define CMN_UNUSED(argument)
Definition cmnPortability.h:497
#define CISST_THROW(exceptionParameter)
Somewhat portable compilation warning message. This works with very recent versions of gcc (4....
Definition cmnPortability.h:559
void cmnThrow(const _exceptionType &except, cmnLogLevel lod=CMN_LOG_LEVEL_INIT_ERROR)
Definition cmnThrow.h:76
STL namespace.
prmSetpointMode
Definition prmSetpointMode.h:12
@ VELOCITY
Definition prmSetpointMode.h:15
@ POSITION
Definition prmSetpointMode.h:14
@ NONE
Definition prmSetpointMode.h:13
@ EFFORT
Definition prmSetpointMode.h:16
std::ostream & operator<<(std::ostream &output, const prmSetpointMode &mode)
Definition prmSetpointMode.h:31
prmSetpointMode operator|(prmSetpointMode a, prmSetpointMode b)
Definition prmSetpointMode.h:20
@ NONE
Definition prmSimulationType.h:26
vctFixedSizeVector< _elementType, _size1+_size2 > operator&(const vctFixedSizeConstVectorBase< _size1, _stride1, _elementType, _dataPtr1 > &vector1, const vctFixedSizeConstVectorBase< _size2, _stride2, _elementType, _dataPtr2 > &vector2)
Definition vctFixedSizeVector.h:504