connection_header.cpp
Go to the documentation of this file.
00001 //=================================================================================================
00002 // Copyright (c) 2013, Johannes Meyer, TU Darmstadt
00003 // All rights reserved.
00004 
00005 // Redistribution and use in source and binary forms, with or without
00006 // modification, are permitted provided that the following conditions are met:
00007 //     * Redistributions of source code must retain the above copyright
00008 //       notice, this list of conditions and the following disclaimer.
00009 //     * Redistributions in binary form must reproduce the above copyright
00010 //       notice, this list of conditions and the following disclaimer in the
00011 //       documentation and/or other materials provided with the distribution.
00012 //     * Neither the name of the Flight Systems and Automatic Control group,
00013 //       TU Darmstadt, nor the names of its contributors may be used to
00014 //       endorse or promote products derived from this software without
00015 //       specific prior written permission.
00016 
00017 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00018 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00019 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00020 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
00021 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00022 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00023 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00024 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00025 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00026 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027 //=================================================================================================
00028 
00029 #include <rosmatlab/connection_header.h>
00030 #include <rosmatlab/options.h>
00031 #include <boost/lexical_cast.hpp>
00032 
00033 namespace rosmatlab {
00034 
00035 ConnectionHeader::ConnectionHeader()
00036 {
00037 }
00038 
00039 ConnectionHeader::ConnectionHeader(const mxArray *array)
00040 {
00041   fromMatlab(array);
00042 }
00043 
00044 ConnectionHeader::ConnectionHeader(const boost::shared_ptr<ros::M_string> &connection_header)
00045   : data_(connection_header)
00046 {
00047 }
00048 
00049 ConnectionHeader::~ConnectionHeader()
00050 {
00051 }
00052 
00053 bool ConnectionHeader::fromMatlab(const mxArray *array)
00054 {
00055   data_.reset();
00056   if (!mxIsStruct(array) && !mxGetNumberOfElements(array) == 1) return false;
00057 
00058   data_.reset(new ros::M_string);
00059   int numberOfFields = mxGetNumberOfFields(array);
00060   for(int i = 0; i < numberOfFields; i++) {
00061     std::string key = mxGetFieldNameByNumber(array, i);
00062     const mxArray *value = mxGetFieldByNumber(array, 0, i);
00063     if (Options::isString(value)) {
00064       data_->insert(ros::StringPair(key, Options::getString(value)));
00065     } else if (Options::isDoubleScalar(value)) {
00066       data_->insert(ros::StringPair(key, boost::lexical_cast<std::string>(Options::getDoubleScalar(value))));
00067     } else if (Options::isIntegerScalar(value)) {
00068       data_->insert(ros::StringPair(key, boost::lexical_cast<std::string>(Options::getIntegerScalar(value))));
00069     } else if (Options::isLogicalScalar(value)) {
00070       data_->insert(ros::StringPair(key, boost::lexical_cast<std::string>(Options::getLogicalScalar(value))));
00071     }
00072   }
00073 
00074   return true;
00075 }
00076 
00077 mxArray *ConnectionHeader::toMatlab() const {
00078   mxArray *header = mxCreateStructMatrix(1, 1, 0, 0);
00079   if (!data_) return header;
00080 
00081   for(ros::M_string::iterator it = data_->begin(); it != data_->end(); ++it) {
00082     mxAddField(header, it->first.c_str());
00083     mxSetField(header, 0, it->first.c_str(), mxCreateString(it->second.c_str()));
00084   }
00085 
00086   return header;
00087 }
00088 
00089 }


rosmatlab
Author(s): Johannes Meyer
autogenerated on Fri Jul 25 2014 06:48:12