//---------------------------------------------------------------------------- // EgalTech 2015-2015 //---------------------------------------------------------------------------- // File : ToolData.cpp Data : 04.06.15 Versione : 1.6f1 // Contenuto : Implementazione struttura dati utensile. // // // // Modifiche : 04.06.15 DS Creazione modulo. // // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "ToolData.h" #include "/EgtDev/Include/EGnStringUtils.h" #include #include using namespace std ; //---------------------------------------------------------------------------- enum nToolKey { TK_COR = 0, TK_CRAD, TK_D, TK_DRAW, TK_DT, TK_EXI, TK_F, TK_FE, TK_FS, TK_FT, TK_HEA, TK_L, TK_LT, TK_MM, TK_NAME, TK_NS, TK_NU, TK_OL, TK_OR, TK_S, TK_SANG, TK_SM, TK_SUP, TK_TH, TK_TYP, TK_UUID, TK_ZZZ} ; // rappresenta il numero di elementi static const std::array sToolKey = { "COR", "CRAD", "D", "DRAW", "DT", "EXI", "F", "FE", "FS", "FT", "HEA", "L", "LT", "MM", "NAME", "NS", "NU", "OL", "OR", "S", "SANG", "SM", "SUP", "TH", "TYP", "UUID"} ; //---------------------------------------------------------------------------- int ToolData::GetSize( void) const { // in debug verifico validità ultimo campo assert( sToolKey[TK_UUID] == "UUID") ; return TK_ZZZ ; } //---------------------------------------------------------------------------- int FindToolKey( const string& sKey) { auto TheRange = equal_range( sToolKey.cbegin(), sToolKey.cend(), sKey) ; if ( TheRange.first == TheRange.second) return - 1 ; return int( TheRange.first - sToolKey.cbegin()) ; } //---------------------------------------------------------------------------- bool ToolData::FromString( const string& sString, int& nKey) { // separo chiave da valore string sKey, sVal ; SplitFirst( sString, "=", sKey, sVal) ; // riconosco la chiave nKey = FindToolKey( ToUpper( sKey)) ; bool bOk = ( nKey >= 0) ; switch ( nKey) { case TK_COR : bOk = ::FromString( sVal, m_nCorr) ; break ; case TK_CRAD : bOk = ::FromString( sVal, m_dCornRad) ; break ; case TK_D : bOk = ::FromString( sVal, m_dDiam) ; break ; case TK_DRAW : m_sDraw = sVal ; break ; case TK_DT : bOk = ::FromString( sVal, m_dTDiam) ; break ; case TK_EXI : bOk = ::FromString( sVal, m_nExit) ; break ; case TK_F : bOk = ::FromString( sVal, m_dFeed) ; break ; case TK_FE : bOk = ::FromString( sVal, m_dEndFeed) ; break ; case TK_FS : bOk = ::FromString( sVal, m_dStartFeed) ; break ; case TK_FT : bOk = ::FromString( sVal, m_dTipFeed) ; break ; case TK_HEA : m_sHead = sVal ; bOk = ! m_sHead.empty() ; break ; case TK_L : bOk = ::FromString( sVal, m_dLen) ; break ; case TK_LT : bOk = ::FromString( sVal, m_dTLen) ; break ; case TK_MM : bOk = ::FromString( sVal, m_dMaxMat) ; break ; case TK_NAME : m_sName = sVal ; bOk = ! m_sName.empty() ; break ; case TK_NS : m_sSysNotes = sVal ; break ; case TK_NU : m_sUserNotes = sVal ; break ; case TK_OL : bOk = ::FromString( sVal, m_dOffsL) ; break ; case TK_OR : bOk = ::FromString( sVal, m_dOffsR) ; break ; case TK_S : bOk = ::FromString( sVal, m_dSpeed) ; break ; case TK_SANG : bOk = ::FromString( sVal, m_dSideAng) ; break ; case TK_SM : bOk = ::FromString( sVal, m_dMaxSpeed) ; break ; case TK_SUP : m_sTcPos = sVal ; break ; case TK_TH : bOk = ::FromString( sVal, m_dThick) ; break ; case TK_TYP : bOk = ::FromString( sVal, m_nType) ; break ; case TK_UUID : bOk = ::FromString( sVal, m_Uuid) ; break ; default : bOk = false ; break ; } return bOk ; } //---------------------------------------------------------------------------- string ToolData::ToString( int nInd) const { switch ( nInd) { case TK_COR : return ( sToolKey[TK_COR] + "=" + ::ToString( m_nCorr)) ; case TK_CRAD : return ( sToolKey[TK_CRAD] + "=" + ::ToString( m_dCornRad)) ; case TK_D : return ( sToolKey[TK_D] + "=" + ::ToString( m_dDiam)) ; case TK_DRAW : return ( sToolKey[TK_DRAW] + "=" + m_sDraw) ; case TK_DT : return ( sToolKey[TK_DT] + "=" + ::ToString( m_dTDiam)) ; case TK_EXI : return ( sToolKey[TK_EXI] + "=" + ::ToString( m_nExit)) ; case TK_F : return ( sToolKey[TK_F] + "=" + ::ToString( m_dFeed)) ; case TK_FE : return ( sToolKey[TK_FE] + "=" + ::ToString( m_dEndFeed)) ; case TK_FS : return ( sToolKey[TK_FS] + "=" + ::ToString( m_dStartFeed)) ; case TK_FT : return ( sToolKey[TK_FT] + "=" + ::ToString( m_dTipFeed)) ; case TK_HEA : return ( sToolKey[TK_HEA] + "=" + m_sHead) ; case TK_L : return ( sToolKey[TK_L] + "=" + ::ToString( m_dLen)) ; case TK_LT : return ( sToolKey[TK_LT] + "=" + ::ToString( m_dTLen)) ; case TK_MM : return ( sToolKey[TK_MM] + "=" + ::ToString( m_dMaxMat)) ; case TK_NAME : return ( sToolKey[TK_NAME] + "=" + m_sName) ; case TK_NS : return ( sToolKey[TK_NS] + "=" + m_sSysNotes) ; case TK_NU : return ( sToolKey[TK_NU] + "=" + m_sUserNotes) ; case TK_OL : return ( sToolKey[TK_OL] + "=" + ::ToString( m_dOffsL)) ; case TK_OR : return ( sToolKey[TK_OR] + "=" + ::ToString( m_dOffsR)) ; case TK_S : return ( sToolKey[TK_S] + "=" + ::ToString( m_dSpeed)) ; case TK_SANG : return ( sToolKey[TK_SANG] + "=" + ::ToString( m_dSideAng)) ; case TK_SM : return ( sToolKey[TK_SM] + "=" + ::ToString( m_dMaxSpeed)) ; case TK_SUP : return ( sToolKey[TK_SUP] + "=" + m_sTcPos) ; case TK_TH : return ( sToolKey[TK_TH] + "=" + ::ToString( m_dThick)) ; case TK_TYP : return ( sToolKey[TK_TYP] + "=" + ::ToString( m_nType)) ; case TK_UUID : return ( sToolKey[TK_UUID] + "=" + ::ToString( m_Uuid)) ; default : return "" ; } }