Go to the documentation of this file.00001
00002
00003
00004
00005 #include <cassert>
00006 #include <sstream>
00007
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];
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 }