00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <Cntm/Utils/FormatUtils.h>
00015 #include <Cntm/Utils/MathUtils.h>
00016
00017 namespace Cntm
00018 {
00019
00020
00021
00022
00023 static bool FormatMsgReplaceParametr(std::string& FillMsg, int PrmIx,
00024 const FormatMsgPrmConvertor& Prm)
00025 {
00026
00027 if (OutRange(PrmIx, 1, 8)) return false;
00028 if (Prm.Str.empty()) return true;
00029
00030
00031 std::ostringstream PrmId;
00032 PrmId << "%%" << PrmIx;
00033 std::string::size_type Pos = FillMsg.find(PrmId.str());
00034
00035
00036 if (Pos != std::string::npos)
00037 FillMsg.replace(Pos, 3, Prm.Str);
00038 return true;
00039 }
00040
00041 std::string FormatMsg(const std::string& Fmt,
00042 const FormatMsgPrmConvertor& Prm1, const FormatMsgPrmConvertor& Prm2)
00043 {
00044 std::string Msg = Fmt;
00045 if (FormatMsgReplaceParametr(Msg, 1, Prm1))
00046 FormatMsgReplaceParametr(Msg, 2, Prm2);
00047 return Msg;
00048 }
00049
00050 std::string FormatMsg(const std::string& Fmt,
00051 const FormatMsgPrmConvertor& Prm1, const FormatMsgPrmConvertor& Prm2,
00052 const FormatMsgPrmConvertor& Prm3, const FormatMsgPrmConvertor& Prm4)
00053 {
00054 std::string Msg = FormatMsg(Fmt, Prm1, Prm2);
00055 if (FormatMsgReplaceParametr(Msg, 3, Prm3))
00056 FormatMsgReplaceParametr(Msg, 4, Prm4);
00057 return Msg;
00058 }
00059
00060 std::string FormatMsg(const std::string& Fmt,
00061 const FormatMsgPrmConvertor& Prm1, const FormatMsgPrmConvertor& Prm2,
00062 const FormatMsgPrmConvertor& Prm3, const FormatMsgPrmConvertor& Prm4,
00063 const FormatMsgPrmConvertor& Prm5, const FormatMsgPrmConvertor& Prm6,
00064 const FormatMsgPrmConvertor& Prm7, const FormatMsgPrmConvertor& Prm8)
00065 {
00066 std::string Msg = FormatMsg(Fmt, Prm1, Prm2, Prm3, Prm4);
00067 if (FormatMsgReplaceParametr(Msg, 5, Prm5))
00068 if (FormatMsgReplaceParametr(Msg, 6, Prm6))
00069 if (FormatMsgReplaceParametr(Msg, 7, Prm7))
00070 FormatMsgReplaceParametr(Msg, 8, Prm8);
00071 return Msg;
00072 }
00073
00074 }