$treeview $search $mathjax
00001 // ////////////////////////////////////////////////////////////////////// 00002 // Import section 00003 // ////////////////////////////////////////////////////////////////////// 00004 // STL 00005 #include <cassert> 00006 #include <sstream> 00007 // StdAir 00008 #include <stdair/stdair_exceptions.hpp> 00009 #include <stdair/basic/PartnershipTechnique.hpp> 00010 00011 namespace stdair { 00012 00013 // ////////////////////////////////////////////////////////////////////// 00014 const std::string PartnershipTechnique::_labels[LAST_VALUE] = 00015 { "None", 00016 "RevenueAvailabilityExchangeDemandAggregation", 00017 "RevenueAvailabilityExchangeYieldProration", 00018 "InterlineBidPriceDemandAggregation", 00019 "InterlineBidPriceYieldProration", 00020 "NonProtectionistInterlineBidPriceYieldProration", 00021 "RevenueManagementCooperation", 00022 "AdvancedRevenueManagementCooperation"}; 00023 00024 // ////////////////////////////////////////////////////////////////////// 00025 const char PartnershipTechnique::_techniqueLabels[LAST_VALUE] = { 'N', 00026 'r', 00027 'R', 00028 'i', 00029 'I', 00030 'U', 00031 'C', 00032 'A'}; 00033 00034 00035 // ////////////////////////////////////////////////////////////////////// 00036 PartnershipTechnique::PartnershipTechnique() : _technique (LAST_VALUE) { 00037 assert (false); 00038 } 00039 00040 // ////////////////////////////////////////////////////////////////////// 00041 PartnershipTechnique:: 00042 PartnershipTechnique (const PartnershipTechnique& iPartnershipTechnique) 00043 : _technique (iPartnershipTechnique._technique) { 00044 } 00045 00046 // ////////////////////////////////////////////////////////////////////// 00047 PartnershipTechnique:: 00048 PartnershipTechnique (const EN_PartnershipTechnique& iPartnershipTechnique) 00049 : _technique (iPartnershipTechnique) { 00050 } 00051 00052 // ////////////////////////////////////////////////////////////////////// 00053 PartnershipTechnique::EN_PartnershipTechnique 00054 PartnershipTechnique::getTechnique (const char iTechniqueChar) { 00055 EN_PartnershipTechnique oTechnique; 00056 switch (iTechniqueChar) { 00057 case 'N': oTechnique = NONE; break; 00058 case 'r': oTechnique = RAE_DA; break; 00059 case 'R': oTechnique = RAE_YP; break; 00060 case 'i': oTechnique = IBP_DA; break; 00061 case 'I': oTechnique = IBP_YP; break; 00062 case 'U': oTechnique = IBP_YP_U; break; 00063 case 'C': oTechnique = RMC; break; 00064 case 'A': oTechnique = A_RMC; break; 00065 default: oTechnique = LAST_VALUE; break; 00066 } 00067 00068 if (oTechnique == LAST_VALUE) { 00069 const std::string& lLabels = describeLabels(); 00070 std::ostringstream oMessage; 00071 oMessage << "The partnership technique '" 00072 << iTechniqueChar 00073 << "' is not known. Known partnership techniques: " 00074 << lLabels; 00075 throw CodeConversionException (oMessage.str()); 00076 } 00077 00078 return oTechnique; 00079 } 00080 00081 // ////////////////////////////////////////////////////////////////////// 00082 PartnershipTechnique::PartnershipTechnique (const char iTechniqueChar) 00083 : _technique (getTechnique (iTechniqueChar)) { 00084 } 00085 00086 // ////////////////////////////////////////////////////////////////////// 00087 PartnershipTechnique:: 00088 PartnershipTechnique (const std::string& iTechniqueStr) { 00089 // 00090 const size_t lSize = iTechniqueStr.size(); 00091 assert (lSize == 1); 00092 const char lTechniqueChar = iTechniqueStr[0]; 00093 _technique = getTechnique (lTechniqueChar); 00094 } 00095 00096 // ////////////////////////////////////////////////////////////////////// 00097 const std::string& PartnershipTechnique:: 00098 getLabel (const EN_PartnershipTechnique& iTechnique) { 00099 return _labels[iTechnique]; 00100 } 00101 00102 // ////////////////////////////////////////////////////////////////////// 00103 char PartnershipTechnique:: 00104 getTechniqueLabel (const EN_PartnershipTechnique& iTechnique) { 00105 return _techniqueLabels[iTechnique]; 00106 } 00107 00108 // ////////////////////////////////////////////////////////////////////// 00109 std::string PartnershipTechnique:: 00110 getTechniqueLabelAsString (const EN_PartnershipTechnique& iTechnique) { 00111 std::ostringstream oStr; 00112 oStr << _techniqueLabels[iTechnique]; 00113 return oStr.str(); 00114 } 00115 00116 // ////////////////////////////////////////////////////////////////////// 00117 std::string PartnershipTechnique::describeLabels() { 00118 std::ostringstream ostr; 00119 for (unsigned short idx = 0; idx != LAST_VALUE; ++idx) { 00120 if (idx != 0) { 00121 ostr << ", "; 00122 } 00123 ostr << _labels[idx] << " (" << _techniqueLabels[idx] << ")"; 00124 } 00125 return ostr.str(); 00126 } 00127 00128 // ////////////////////////////////////////////////////////////////////// 00129 PartnershipTechnique::EN_PartnershipTechnique 00130 PartnershipTechnique::getTechnique() const { 00131 return _technique; 00132 } 00133 00134 // ////////////////////////////////////////////////////////////////////// 00135 char PartnershipTechnique::getTechniqueAsChar() const { 00136 const char oTechniqueChar = _techniqueLabels[_technique]; 00137 return oTechniqueChar; 00138 } 00139 00140 // ////////////////////////////////////////////////////////////////////// 00141 std::string PartnershipTechnique::getTechniqueAsString() const { 00142 std::ostringstream oStr; 00143 oStr << _techniqueLabels[_technique]; 00144 return oStr.str(); 00145 } 00146 00147 // ////////////////////////////////////////////////////////////////////// 00148 const std::string PartnershipTechnique::describe() const { 00149 std::ostringstream ostr; 00150 ostr << _labels[_technique]; 00151 return ostr.str(); 00152 } 00153 00154 // ////////////////////////////////////////////////////////////////////// 00155 bool PartnershipTechnique:: 00156 operator== (const EN_PartnershipTechnique& iTechnique) const { 00157 return (_technique == iTechnique); 00158 } 00159 00160 }