Libbarrett  1.2.4
include/barrett/systems/gain.h
00001 /*
00002         Copyright 2009, 2010 Barrett Technology <support@barrett.com>
00003 
00004         This file is part of libbarrett.
00005 
00006         This version of libbarrett is free software: you can redistribute it
00007         and/or modify it under the terms of the GNU General Public License as
00008         published by the Free Software Foundation, either version 3 of the
00009         License, or (at your option) any later version.
00010 
00011         This version of libbarrett is distributed in the hope that it will be
00012         useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
00013         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014         GNU General Public License for more details.
00015 
00016         You should have received a copy of the GNU General Public License along
00017         with this version of libbarrett.  If not, see
00018         <http://www.gnu.org/licenses/>.
00019 
00020         Further, non-binding information about licensing is available at:
00021         <http://wiki.barrett.com/libbarrett/wiki/LicenseNotes>
00022 */
00023 
00024 /*
00025  * gain.h
00026  *
00027  *  Created on: Sep 12, 2009
00028  *      Author: dc
00029  *              CJ Valle
00030  */
00031 
00032 #ifndef BARRETT_SYSTEMS_GAIN_H_
00033 #define BARRETT_SYSTEMS_GAIN_H_
00034 
00035 
00036 #include <Eigen/Core>
00037 
00038 #include <barrett/detail/ca_macro.h>
00039 #include <barrett/math/traits.h>
00040 #include <barrett/systems/abstract/single_io.h>
00041 
00042 
00043 namespace barrett {
00044 namespace systems {
00045 
00046 // TODO(dc): add a configuration file interface
00047 
00048 template<typename InputType,
00049                  typename GainType = InputType,
00050                  typename OutputType = InputType,
00051                  bool RequiresAlignment = (math::Traits<GainType>::RequiresAlignment || math::Traits<OutputType>::RequiresAlignment)>
00052 class Gain : public SingleIO<InputType, OutputType> {
00053 public:
00054         explicit Gain(GainType gain, const std::string& sysName = "Gain") :
00055                 SingleIO<InputType, OutputType>(sysName), gain(gain) {}
00056         virtual ~Gain() { this->mandatoryCleanUp(); }
00057 
00058         void setGain(const GainType& g) {
00059                 BARRETT_SCOPED_LOCK(this->getEmMutex());
00060                 gain = g;
00061         }
00062 
00063 protected:
00064         GainType gain;
00065         OutputType data;
00066 
00067         virtual void operate() {
00068                 data = gain * this->input.getValue();
00069                 this->outputValue->setData(&data);
00070         }
00071 
00072 private:
00073         DISALLOW_COPY_AND_ASSIGN(Gain);
00074 
00075 public:
00076         EIGEN_MAKE_ALIGNED_OPERATOR_NEW_IF(RequiresAlignment)
00077 };
00078 
00079 
00080 }
00081 }
00082 
00083 
00084 #endif /* BARRETT_SYSTEMS_GAIN_H_ */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Defines