Back to index

salome-kernel  6.5.0
SALOMEDSImpl_ScalarVariable.cxx
Go to the documentation of this file.
00001 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
00002 //
00003 // This library is free software; you can redistribute it and/or
00004 // modify it under the terms of the GNU Lesser General Public
00005 // License as published by the Free Software Foundation; either
00006 // version 2.1 of the License.
00007 //
00008 // This library is distributed in the hope that it will be useful,
00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011 // Lesser General Public License for more details.
00012 //
00013 // You should have received a copy of the GNU Lesser General Public
00014 // License along with this library; if not, write to the Free Software
00015 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00016 //
00017 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
00018 //
00019 
00020 //  File   : SALOMEDSImpl_ScalarVariable.cxx
00021 //  Author : Roman NIKOLAEV, Open CASCADE S.A.S.
00022 //  Module : SALOME
00023 //
00024 #include "SALOMEDSImpl_ScalarVariable.hxx"
00025 #include "SALOMEDSImpl_GenericVariable.hxx"
00026 #include "Basics_Utils.hxx"
00027 #include <iostream>
00028 #include <cstdlib>
00029 #include <cstdio>
00030 
00031 #define OLDSTUDY_COMPATIBILITY
00032 
00033 //============================================================================
00037 //============================================================================
00038 SALOMEDSImpl_ScalarVariable::
00039 SALOMEDSImpl_ScalarVariable(SALOMEDSImpl_GenericVariable::VariableTypes type,
00040                             const std::string& theName):
00041   SALOMEDSImpl_GenericVariable(type,theName)
00042 {}
00043 
00044 //============================================================================
00048 //============================================================================
00049 SALOMEDSImpl_ScalarVariable::~SALOMEDSImpl_ScalarVariable(){}
00050 
00051 //============================================================================
00055 //============================================================================
00056 bool SALOMEDSImpl_ScalarVariable::setValue(const double theValue)
00057 {
00058   
00059   if(myValue == theValue) 
00060     return false;
00061   
00062   myValue = theValue;
00063   return true;
00064 }
00065 
00066 //============================================================================
00070 //============================================================================
00071 bool SALOMEDSImpl_ScalarVariable::setStringValue(const std::string& theValue)
00072 {
00073   
00074   if(myStrValue == theValue) 
00075     return false;
00076   
00077   myStrValue = theValue;
00078   return true;
00079 }
00080 
00081 //============================================================================
00085 //============================================================================
00086 double SALOMEDSImpl_ScalarVariable::getValue() const
00087 {
00088   return myValue;
00089 }
00090 
00091 //============================================================================
00095 //============================================================================
00096 std::string SALOMEDSImpl_ScalarVariable::getStringValue() const
00097 {
00098   return myStrValue;
00099 }
00100 
00101 //============================================================================
00105 //============================================================================
00106 std::string SALOMEDSImpl_ScalarVariable::Save() const{
00107   Kernel_Utils::Localizer loc;
00108 
00109   char buffer[255];
00110   switch(Type())
00111     {
00112     case SALOMEDSImpl_GenericVariable::REAL_VAR:
00113       {
00114         sprintf(buffer, "%.64e", myValue);
00115         break;
00116       }
00117     case SALOMEDSImpl_GenericVariable::BOOLEAN_VAR:
00118     case SALOMEDSImpl_GenericVariable::INTEGER_VAR:
00119       {
00120         sprintf(buffer, "%d", (int)myValue);
00121         break;
00122       }
00123     case SALOMEDSImpl_GenericVariable::STRING_VAR:
00124       {
00125         sprintf(buffer, "%s", myStrValue.c_str());
00126         break;
00127       }
00128     default:break;
00129     }
00130   return std::string(buffer);
00131 }
00132 
00133 //============================================================================
00137 //============================================================================
00138 std::string SALOMEDSImpl_ScalarVariable::SaveToScript() const
00139 {
00140   Kernel_Utils::Localizer loc;
00141 
00142   char buffer[255];
00143   switch(Type())
00144     {
00145     case SALOMEDSImpl_GenericVariable::REAL_VAR:
00146       {
00147         sprintf(buffer, "%g", myValue);
00148         break;
00149       }
00150     case SALOMEDSImpl_GenericVariable::INTEGER_VAR:
00151       {
00152         sprintf(buffer, "%d", (int)myValue);
00153         break;
00154       }
00155     case SALOMEDSImpl_GenericVariable::BOOLEAN_VAR:
00156       {
00157        sprintf(buffer, "%s", ((bool)myValue) ? "True" : "False");
00158         break;
00159       }
00160     case SALOMEDSImpl_GenericVariable::STRING_VAR:
00161       {
00162         sprintf(buffer, "\"%s\"", myStrValue.c_str());
00163         break;
00164       }
00165     default:break;
00166     }
00167   return std::string(buffer);
00168 }
00169 
00170 //============================================================================
00174 //============================================================================
00175 std::string SALOMEDSImpl_ScalarVariable::SaveType() const{
00176   char buffer[255];
00177   sprintf(buffer, "%d", (int)Type());
00178   return std::string(buffer);
00179 }
00180 
00181 //============================================================================
00185 //============================================================================
00186 void SALOMEDSImpl_ScalarVariable::Load(const std::string& theStrValue)
00187 {
00188   Kernel_Utils::Localizer loc;
00189 
00190   std::string strCopy = theStrValue;
00191   if ( Type() == SALOMEDSImpl_GenericVariable::STRING_VAR ) {
00192 #ifdef OLDSTUDY_COMPATIBILITY
00193     if (strCopy.size() > 1 && strCopy[0] == '\"' && strCopy[strCopy.size()-1] == '\"')
00194       strCopy = strCopy.substr(1, strCopy.size()-2);
00195 #endif // OLDSTUDY_COMPATIBILITY
00196     setStringValue( strCopy );
00197   }
00198   else {
00199 #ifdef OLDSTUDY_COMPATIBILITY
00200     int dotpos = strCopy.find(',');
00201     if (dotpos != std::string::npos)
00202       strCopy.replace(dotpos, 1, ".");
00203 #endif // OLDSTUDY_COMPATIBILITY
00204     double aValue = atof(strCopy.c_str());
00205     setValue(aValue);
00206   }
00207 }