FormatUtils.cpp

См. документацию.
00001 /*
00002  * CntmLib - Подсчет ссылок, потоки, синхронизация, асинхронные процедуры, события
00003  * Copyright (c) 2005, Овсеевич Роман, CntmLib@mail.ru
00004  * _______________________________________________________________________________
00005  * Разрешено свободное использование, копирование, распространение, изменение
00006  * (изменение сведений об авторских правах запрещено). Запрещена продажа и 
00007  * включение всей библиотеки или ее частей в другие библиотеки. В сведениях об
00008  * авторских правах на программу (или сведениях о программе, об авторах, 
00009  * использованных средствах разработки и т.д.) должна быть указана информация
00010  * о библиотеке CntmLib, ее авторе и, возможно, сайте или email'е.
00011  * Библиотека поставляется "как есть", без каких-либо гарантий со стороны автора.
00012  */ 
00013 
00014 #include <Cntm/Utils/FormatUtils.h>
00015 #include <Cntm/Utils/MathUtils.h>
00016 
00017 namespace Cntm
00018 {
00019 
00020         /**
00021          * Замена обозначения параметра %%PrmIx на его значение Prm в строке FillMsg.
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                 // Заменяем идентификатор параметра (%%I) на его значение
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 }

SourceForge.net Logo
© Овсеевич Р.В. Документация по CntmLib 1.1.4 от 28 May 2008. Создано системой  doxygen 1.5.3