cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
vctStoreBackBinaryOperations.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 /*
5 
6  Author(s): Ofri Sadowsky, Anton Deguet
7  Created on: 2003-08-18
8 
9  (C) Copyright 2003-2013 Johns Hopkins University (JHU), All Rights
10  Reserved.
11 
12 --- begin cisst license - do not edit ---
13 
14 This software is provided "as is" under an open source license, with
15 no warranty. The complete license can be found in license.txt and
16 http://www.cisst.org/cisst/license.txt.
17 
18 --- end cisst license ---
19 */
20 
21 #pragma once
22 #ifndef _vctStoreBackBinaryOperations_h
23 #define _vctStoreBackBinaryOperations_h
24 
66 template<class _inputOutputType, class _input2Type = _inputOutputType>
68  public:
69  typedef _inputOutputType InputOutputType;
70  typedef _input2Type Input2Type;
71 
76  class Addition {
77  public:
83  static inline InputOutputType & Operate(InputOutputType & input1, const Input2Type & input2) {
84  input1 += input2;
85  return input1;
86  }
87  };
88 
89 
94  class Subtraction {
95  public:
101  static inline InputOutputType & Operate(InputOutputType & input1, const Input2Type & input2) {
102  input1 -= input2;
103  return input1;
104  }
105  };
106 
107 
113  public:
119  static inline InputOutputType & Operate(InputOutputType & input1, const Input2Type & input2) {
120  input1 *= input2;
121  return input1;
122  }
123  };
124 
125 
130  class Division {
131  public:
137  static inline InputOutputType & Operate(InputOutputType & input1, const Input2Type & input2) {
138  input1 /= input2;
139  return input1;
140  }
141  };
142 
143 
148  class FirstOperand {
149  public:
155  static inline InputOutputType & Operate(InputOutputType & input1, const Input2Type & CMN_UNUSED(input2)) {
156  return (input1);
157  }
158  };
159 
160 
167  public:
173  static inline InputOutputType & Operate(InputOutputType & input1, const Input2Type & input2) {
174  input1 = input2;
175  return input1;
176  }
177  };
178 
179 
186  class Maximum {
187  public:
193  static inline const InputOutputType & Operate(InputOutputType & input1,
194  const InputOutputType & input2) {
195  input1 = (input1 > input2) ? input1 : input2;
196  return input1;
197  }
198  };
199 
200 
201 
202  class ClipIn {
203  public:
209  static inline const InputOutputType & Operate(InputOutputType & input,
210  const InputOutputType & bound) {
211  if (input > bound) {
212  input = bound;
213  } else if (input < -bound) {
214  input = -bound;
215  }
216  return input;
217  }
218  };
219 
220 
227  class Minimum {
228  public:
234  static inline const InputOutputType & Operate(InputOutputType & input1,
235  const InputOutputType & input2) {
236  input1 = (input1 < input2) ? input1 : input2;
237  return input1;
238  }
239  };
240 
247  class Swap {
248  public:
254  static inline void Operate(InputOutputType & input1,
255  InputOutputType & input2) {
256  const InputOutputType tmp(input1);
257  input1 = input2;
258  input2 = tmp;
259  }
260  };
261 
262 };
263 
264 
265 #endif // _vctStoreBackBinaryOperations_h
266 
Return the first operand of (input1, input2), i.e., input1.
Definition: vctStoreBackBinaryOperations.h:148
Return the of lesser (input1, input2).
Definition: vctStoreBackBinaryOperations.h:227
static InputOutputType & Operate(InputOutputType &input1, const Input2Type &input2)
Definition: vctStoreBackBinaryOperations.h:137
static InputOutputType & Operate(InputOutputType &input1, const Input2Type &input2)
Definition: vctStoreBackBinaryOperations.h:83
static InputOutputType & Operate(InputOutputType &input1, const Input2Type &CMN_UNUSED(input2))
Definition: vctStoreBackBinaryOperations.h:155
#define CMN_UNUSED(argument)
Definition: cmnPortability.h:479
_input2Type Input2Type
Definition: vctStoreBackBinaryOperations.h:70
static const InputOutputType & Operate(InputOutputType &input, const InputOutputType &bound)
Definition: vctStoreBackBinaryOperations.h:209
static InputOutputType & Operate(InputOutputType &input1, const Input2Type &input2)
Definition: vctStoreBackBinaryOperations.h:101
Returns the sum of the two InputType object.
Definition: vctStoreBackBinaryOperations.h:76
Return the greater of (input1, input2).
Definition: vctStoreBackBinaryOperations.h:186
static const InputOutputType & Operate(InputOutputType &input1, const InputOutputType &input2)
Definition: vctStoreBackBinaryOperations.h:234
static const InputOutputType & Operate(InputOutputType &input1, const InputOutputType &input2)
Definition: vctStoreBackBinaryOperations.h:193
Definition: vctStoreBackBinaryOperations.h:202
Return the first operand of (input1, input2), i.e., input2.
Definition: vctStoreBackBinaryOperations.h:166
static InputOutputType & Operate(InputOutputType &input1, const Input2Type &input2)
Definition: vctStoreBackBinaryOperations.h:119
_inputOutputType InputOutputType
Definition: vctStoreBackBinaryOperations.h:69
Define binary operations between objects as classes.
Definition: vctStoreBackBinaryOperations.h:67
Swap the values of input1, input2.
Definition: vctStoreBackBinaryOperations.h:247
Returns the difference of the two InputType object.
Definition: vctStoreBackBinaryOperations.h:94
static InputOutputType & Operate(InputOutputType &input1, const Input2Type &input2)
Definition: vctStoreBackBinaryOperations.h:173
static void Operate(InputOutputType &input1, InputOutputType &input2)
Definition: vctStoreBackBinaryOperations.h:254
Returns the ratio of the two InputType object.
Definition: vctStoreBackBinaryOperations.h:130
Returns the product of the two InputType object.
Definition: vctStoreBackBinaryOperations.h:112