17 #ifndef INC_KY_Kernel_MsgFormat_H
18 #define INC_KY_Kernel_MsgFormat_H
36 template <
typename T>
struct FmtInfo;
52 virtual ~FmtResource() {};
57 TAttrs() : Num(0), Attrs(NULL) {}
67 virtual unsigned Reflect(
const TAttrs*& attrs)
const;
75 class Formatter :
public FmtResource
87 typedef UInt8 requirements_t;
104 Formatter(MsgFormat& f)
109 virtual ~Formatter();
113 virtual void Parse(
const StringDataPtr& str);
115 virtual void Convert() = 0;
117 virtual StringDataPtr GetResult()
const = 0;
120 virtual UPInt GetSize()
const = 0;
122 virtual requirements_t GetRequirements()
const;
124 bool Converted()
const {
return IsConverted; }
130 virtual void SetPrevStr(
const StringDataPtr& );
131 virtual StringDataPtr GetPrevStr()
const;
134 virtual void SetNextStr(
const StringDataPtr& );
135 virtual StringDataPtr GetNextStr()
const;
138 virtual ParentRef GetParentRef()
const;
139 virtual unsigned char GetParentPos()
const;
140 virtual void SetParent(
const FmtResource&);
143 bool HasParent()
const
145 return pParentFmt != NULL;
148 MsgFormat& GetParent()
150 KY_ASSERT(pParentFmt);
153 const MsgFormat& GetParent()
const
155 KY_ASSERT(pParentFmt);
161 virtual void SetParentRef(ParentRef);
163 virtual void SetParentPos(
unsigned char);
166 void SetConverted(
bool value =
true)
172 Formatter& operator = (
const Formatter&);
175 MsgFormat* pParentFmt;
186 class StrFormatter :
public Formatter
189 StrFormatter(
const char* v);
190 StrFormatter(
const StringDataPtr& v);
191 StrFormatter(
const String& v);
193 StrFormatter(MsgFormat& f,
const char* v);
194 StrFormatter(MsgFormat& f,
const StringDataPtr& v);
195 StrFormatter(MsgFormat& f,
const String& v);
198 virtual void Parse(
const StringDataPtr& str);
199 virtual void Convert();
200 virtual StringDataPtr GetResult()
const;
201 virtual UPInt GetSize()
const;
204 StrFormatter& operator = (
const StrFormatter&);
207 const StringDataPtr Value;
211 struct FmtInfo<const char*>
213 typedef StrFormatter formatter;
217 struct FmtInfo<char*>
219 typedef StrFormatter formatter;
223 struct FmtInfo<const unsigned char*>
225 typedef StrFormatter formatter;
229 struct FmtInfo<unsigned char*>
231 typedef StrFormatter formatter;
235 struct FmtInfo<const signed char*>
237 typedef StrFormatter formatter;
241 struct FmtInfo<signed char*>
243 typedef StrFormatter formatter;
247 struct FmtInfo<const char[N]>
249 typedef StrFormatter formatter;
253 struct FmtInfo<char[N]>
255 typedef StrFormatter formatter;
259 struct FmtInfo<const unsigned char[N]>
261 typedef StrFormatter formatter;
265 struct FmtInfo<unsigned char[N]>
267 typedef StrFormatter formatter;
271 struct FmtInfo<const signed char[N]>
273 typedef StrFormatter formatter;
277 struct FmtInfo<signed char[N]>
279 typedef StrFormatter formatter;
283 struct FmtInfo<const StringDataPtr>
285 typedef StrFormatter formatter;
289 struct FmtInfo<StringDataPtr>
291 typedef StrFormatter formatter;
295 struct FmtInfo<const String>
297 typedef StrFormatter formatter;
301 struct FmtInfo<String>
303 typedef StrFormatter formatter;
307 struct FmtInfo<const StringLH>
309 typedef StrFormatter formatter;
313 struct FmtInfo<StringLH>
315 typedef StrFormatter formatter;
319 struct FmtInfo<const StringDH>
321 typedef StrFormatter formatter;
325 struct FmtInfo<StringDH>
327 typedef StrFormatter formatter;
346 class BoolFormatter :
public Formatter
349 BoolFormatter(MsgFormat& f,
bool v);
352 virtual void Parse(
const StringDataPtr& str);
353 virtual void Convert();
354 virtual StringDataPtr GetResult()
const;
355 virtual UPInt GetSize()
const;
358 BoolFormatter& operator = (
const BoolFormatter&);
363 StringDataPtr result;
369 typedef BoolFormatter formatter;
384 char* ToCStr()
const {
return ValueStr; }
387 void SetPrecision(
unsigned prec = 1)
391 void SetWidth(
unsigned width = 1)
396 void SetShowSign(
bool flag =
true)
400 void SetPrefixChar(
char prefix =
' ')
404 void SetSeparatorChar(
char sep =
',')
408 void SetBigLetters(
bool flag =
true)
412 void SetBlankPrefix(
bool flag =
true)
416 void SetAlignLeft(
bool flag =
true)
420 void SetSharpSign(
bool flag =
true)
426 void ReadPrintFormat(StringDataPtr token);
427 void ReadWidth(StringDataPtr token);
429 void ULongLong2String(
char* buff, UInt64 value,
bool separator,
unsigned base = 10);
430 void ULong2String(
char* buff, UInt32 value,
bool separator,
unsigned base = 10);
433 unsigned Precision:5;
436 char SeparatorChar:7;
464 class LongFormatter :
public Formatter,
public NumericBase,
public String::InitStruct
467 LongFormatter(
int v);
468 LongFormatter(
unsigned int v);
470 LongFormatter(
long v);
471 LongFormatter(
unsigned long v);
473 #if !defined(KY_64BIT_POINTERS) || defined(KY_OS_WIN32)
475 LongFormatter(SInt64 v);
476 LongFormatter(UInt64 v);
479 LongFormatter(MsgFormat& f,
int v);
480 LongFormatter(MsgFormat& f,
unsigned int v);
482 LongFormatter(MsgFormat& f,
long v);
483 LongFormatter(MsgFormat& f,
unsigned long v);
485 #if !defined(KY_64BIT_POINTERS) || defined(KY_OS_WIN32)
487 LongFormatter(MsgFormat& f, SInt64 v);
488 LongFormatter(MsgFormat& f, UInt64 v);
492 virtual void Parse(
const StringDataPtr& str);
493 virtual void Convert();
494 virtual StringDataPtr GetResult()
const;
495 virtual UPInt GetSize()
const;
496 virtual void InitString(
char* pbuffer, UPInt size)
const;
499 LongFormatter& SetPrecision(
unsigned prec = 1)
501 KY_ASSERT(prec <= 20);
502 NumericBase::SetPrecision(prec);
505 LongFormatter& SetWidth(
unsigned width = 1)
507 KY_ASSERT(width <= 20);
508 NumericBase::SetWidth(width);
511 LongFormatter& SetShowSign(
bool flag =
true)
513 NumericBase::SetShowSign(flag);
518 LongFormatter& SetBase(
unsigned base)
520 KY_ASSERT(base >= 2 && base <= 16);
524 LongFormatter& SetPrefixChar(
char prefix =
' ')
526 NumericBase::SetPrefixChar(prefix);
529 LongFormatter& SetSeparatorChar(
char sep =
',')
531 NumericBase::SetSeparatorChar(sep);
534 LongFormatter& SetBigLetters(
bool flag =
true)
536 NumericBase::SetBigLetters(flag);
541 void AppendSignCharLeft(
bool negative);
542 LongFormatter& operator = (
const LongFormatter&);
544 UPInt GetSizeInternal()
const
546 return Buff +
sizeof(Buff) - 1 - ValueStr;
551 const bool SignedValue:1;
563 typedef LongFormatter formatter;
567 struct FmtInfo<unsigned char>
569 typedef LongFormatter formatter;
573 struct FmtInfo<signed char>
575 typedef LongFormatter formatter;
579 struct FmtInfo<short>
581 typedef LongFormatter formatter;
585 struct FmtInfo<unsigned short>
587 typedef LongFormatter formatter;
593 typedef LongFormatter formatter;
597 struct FmtInfo<unsigned int>
599 typedef LongFormatter formatter;
605 typedef LongFormatter formatter;
609 struct FmtInfo<unsigned long>
611 typedef LongFormatter formatter;
614 #if !defined(KY_64BIT_POINTERS) || defined(KY_OS_WIN32)
616 struct FmtInfo<SInt64>
618 typedef LongFormatter formatter;
622 struct FmtInfo<UInt64>
624 typedef LongFormatter formatter;
635 class DoubleFormatter :
public Formatter,
public NumericBase,
public String::InitStruct
638 enum PresentationType { FmtDecimal, FmtScientific, FmtSignificant };
641 DoubleFormatter(Double v);
642 DoubleFormatter(MsgFormat& f, Double v);
645 virtual void Parse(
const StringDataPtr& str);
646 virtual void Convert();
647 virtual StringDataPtr GetResult()
const;
648 virtual UPInt GetSize()
const;
649 virtual void InitString(
char* pbuffer, UPInt size)
const;
652 DoubleFormatter& SetType(PresentationType ptype)
657 DoubleFormatter& SetPrecision(
unsigned prec = 1)
659 NumericBase::SetPrecision(prec);
662 DoubleFormatter& SetWidth(
unsigned width = 1)
664 NumericBase::SetWidth(width);
667 DoubleFormatter& SetShowSign(
bool flag =
true)
669 NumericBase::SetShowSign(flag);
672 DoubleFormatter& SetPrefixChar(
char prefix =
' ')
674 NumericBase::SetPrefixChar(prefix);
677 DoubleFormatter& SetSeparatorChar(
char sep =
',')
679 NumericBase::SetSeparatorChar(sep);
682 DoubleFormatter& SetBigLetters(
bool flag =
true)
684 NumericBase::SetBigLetters(flag);
687 DoubleFormatter& SetAlignLeft(
bool flag =
true)
689 NumericBase::SetAlignLeft(flag);
694 DoubleFormatter& operator = (
const DoubleFormatter&);
696 void AppendSignCharLeft(
bool negative,
bool show_sign =
false);
700 void DecimalFormat(Double v);
701 void ScientificFormat();
704 UPInt GetSizeInternal()
const
706 return Buff +
sizeof(Buff) - 1 - ValueStr;
710 PresentationType Type;
718 struct FmtInfo<float>
720 typedef DoubleFormatter formatter;
724 struct FmtInfo<double>
726 typedef DoubleFormatter formatter;
731 class ResouceProvider;
739 class ResourceFormatter :
public Formatter
746 ValueType(UPInt rc,
const ResouceProvider& provider);
749 explicit ValueType(
int rc);
752 explicit ValueType(
int rc,
const ResouceProvider& provider);
753 ValueType(
const char* rc);
754 ValueType(
const char* rc,
const ResouceProvider& provider);
757 bool IsStrResource()
const
761 const char* GetStrResource()
const
763 KY_ASSERT(IsStrResource());
764 return Resource.RStr;
766 UPInt GetLongResource()
const
768 KY_ASSERT(!IsStrResource());
769 return Resource.RLong;
773 const ResouceProvider* GetResouceProvider()
const
777 void SetResouceProvider(
const ResouceProvider* rp)
783 ValueType& operator = (
const ValueType&);
792 ResourceType Resource;
794 const ResouceProvider* RC_Provider;
798 ResourceFormatter(MsgFormat& f,
const ValueType& v);
799 virtual ~ResourceFormatter();
802 virtual void Parse(
const StringDataPtr& str);
803 virtual void Convert();
804 virtual StringDataPtr GetResult()
const;
805 virtual UPInt GetSize()
const;
808 StringDataPtr MakeString(
const TAttrs& attrs)
const;
811 ResourceFormatter& operator = (
const ResourceFormatter&);
814 const ValueType Value;
815 const ResouceProvider* pRP;
817 StringDataPtr Result;
821 struct FmtInfo<ResourceFormatter::ValueType>
823 typedef ResourceFormatter formatter;
832 class ResouceProvider :
public NewOverrideBase<Stat_Default_Mem>
835 ResouceProvider(
const ResouceProvider* next = NULL) : nextRP(next) {}
836 virtual ~ResouceProvider() {}
839 virtual unsigned Reflect(
const ResourceFormatter::ValueType& ,
const FmtResource::TAttrs** attrs)
const = 0;
840 virtual StringDataPtr MakeString(
const ResourceFormatter::ValueType& ,
const FmtResource::TAttrs& )
const = 0;
843 const ResouceProvider* GetNext()
const {
return nextRP; }
846 const ResouceProvider* nextRP;
855 class FormatterFactory
858 virtual ~FormatterFactory() {}
863 Args(MsgFormat&f,
const StringDataPtr& n,
const ResourceFormatter::ValueType& v)
864 : Fmt(f), Name(n), Value(v)
869 const StringDataPtr& Name;
870 const ResourceFormatter::ValueType& Value;
873 Args& operator = (
const Args&);
877 virtual Formatter* MakeFormatter(
const Args& args)
const = 0;
887 class LocaleProvider :
public FormatterFactory
890 virtual ~LocaleProvider() {}
893 virtual const Locale& GetLocale()
const = 0;
894 virtual ResouceProvider* GetDefaultRCProvider()
const = 0;
910 class MsgFormat : String::InitStruct
915 friend class MsgFormat;
919 : Type(tStr), SinkData(str) {}
920 Sink(StringBuffer& buffer)
921 : Type(tStrBuffer), SinkData(buffer) {}
922 Sink(
const StringDataPtr& strData)
923 : Type(tDataPtr), SinkData(strData) {}
924 template <
typename T,
int N>
925 Sink(
const T (&v)[N])
926 : Type(tDataPtr), SinkData(StringDataPtr(v, N)) {}
929 enum DataType {tStr, tStrBuffer, tDataPtr};
940 SinkDataType(String& str)
944 SinkDataType(StringBuffer& buffer)
945 : pStrBuffer(&buffer)
948 SinkDataType(
const StringDataPtr& strData)
950 DataPtr.pStr = strData.ToCStr();
951 DataPtr.Size = strData.GetSize();
956 StringBuffer* pStrBuffer;
961 SinkDataType SinkData;
965 MsgFormat(
const Sink& r);
966 MsgFormat(
const Sink& r,
const LocaleProvider& loc);
970 typedef UInt8 ArgNumType;
971 typedef StackMemPool<> MemoryPoolType;
976 void Parse(
const char* fmt);
980 void FormatF(
const StringDataPtr& fmt, va_list argList);
985 bool ReplaceFormatter(Formatter* oldf, Formatter* newf,
bool allocated);
987 ArgNumType GetFirstArgNum()
const
991 void SetFirstArgNum(ArgNumType num)
997 const LocaleProvider* GetLocaleProvider()
const
999 return pLocaleProvider;
1003 MemoryPoolType& GetMemoryPool()
1009 UPInt GetStrSize()
const
1015 UInt8 GetEscapeChar()
const
1019 void SetEscapeChar(UInt8 c)
1030 template <
typename T>
1031 void FormatD1(
const T& v)
1033 while (NextFormatter())
1035 Bind(
new (GetMemoryPool())
typename FmtInfo<T>::formatter(*
this, v),
true);
1041 void FinishFormatD();
1044 enum ERecType {eStrType, eParamStrType, eFmtType};
1050 unsigned char ArgNum;
1055 Kaim::Formatter* Formatter;
1068 fmt_record(ERecType type,
const fmt_value& value)
1074 ERecType GetType()
const
1078 const fmt_value& GetValue()
const
1091 bool NextFormatter();
1093 void Bind(Formatter* formatter,
const bool allocated);
1096 void Evaluate(UPInt ind);
1098 void AddStringRecord(
const StringDataPtr& str);
1099 void AddFormatterRecord(Formatter* f,
bool allocated);
1102 virtual void InitString(
char* pbuffer, UPInt size)
const;
1105 MsgFormat& operator = (
const MsgFormat&);
1110 template <
typename T, UPInt SS = 8,
class DA = Array<T> >
1114 typedef T ValueType;
1122 UPInt GetSize()
const {
return Size; }
1124 void PushBack(
const ValueType& val)
1127 *
reinterpret_cast<ValueType*
>(StaticArray + Size *
sizeof(T)) = val;
1129 DynamicArray.PushBack(val);
1134 ValueType& operator [] (UPInt index)
1137 return *
reinterpret_cast<ValueType*
>(StaticArray + index *
sizeof(T));
1139 return DynamicArray[index - SS];
1141 const ValueType& operator [] (UPInt index)
const
1144 return *
reinterpret_cast<const ValueType*
>(StaticArray + index *
sizeof(T));
1146 return DynamicArray[index - SS];
1152 char StaticArray[SS *
sizeof(T)];
1157 typedef StackArray<fmt_record, 16, ArrayPOD<fmt_record> > DataType;
1161 UInt16 NonPosParamNum;
1162 UInt16 UnboundFmtrInd;
1165 const LocaleProvider* pLocaleProvider;
1169 MemoryPoolType MemPool;
1176 template <
typename T>
1191 const MsgFormat::Sink& result,
1195 MsgFormat parsed_format(result);
1197 parsed_format.Parse(fmt);
1198 parsed_format.FinishFormatD();
1199 return parsed_format.GetStrSize();
1204 const MsgFormat::Sink& result,
1205 const LocaleProvider& loc,
1209 MsgFormat parsed_format(result, loc);
1211 parsed_format.Parse(fmt);
1212 parsed_format.FinishFormatD();
1213 return parsed_format.GetStrSize();
1221 template <
typename T1>
1224 const MsgFormat::Sink& result,
1229 MsgFormat parsed_format(result);
1231 parsed_format.Parse(fmt);
1232 parsed_format.FormatD1(v1);
1233 parsed_format.FinishFormatD();
1234 return parsed_format.GetStrSize();
1237 template <
typename T1>
1240 const MsgFormat::Sink& result,
1241 const LocaleProvider& loc,
1246 MsgFormat parsed_format(result, loc);
1248 parsed_format.Parse(fmt);
1249 parsed_format.FormatD1(v1);
1250 parsed_format.FinishFormatD();
1251 return parsed_format.GetStrSize();
1255 template <
typename T1,
typename T2>
1258 const MsgFormat::Sink& result,
1264 MsgFormat parsed_format(result);
1266 parsed_format.Parse(fmt);
1267 parsed_format.FormatD1(v1);
1268 parsed_format.FormatD1(v2);
1269 parsed_format.FinishFormatD();
1270 return parsed_format.GetStrSize();
1273 template <
typename T1,
typename T2>
1276 const MsgFormat::Sink& result,
1277 const LocaleProvider& loc,
1283 MsgFormat parsed_format(result, loc);
1285 parsed_format.Parse(fmt);
1286 parsed_format.FormatD1(v1);
1287 parsed_format.FormatD1(v2);
1288 parsed_format.FinishFormatD();
1289 return parsed_format.GetStrSize();
1293 template <
typename T1,
typename T2,
typename T3>
1296 const MsgFormat::Sink& result,
1303 MsgFormat parsed_format(result);
1305 parsed_format.Parse(fmt);
1306 parsed_format.FormatD1(v1);
1307 parsed_format.FormatD1(v2);
1308 parsed_format.FormatD1(v3);
1309 parsed_format.FinishFormatD();
1310 return parsed_format.GetStrSize();
1313 template <
typename T1,
typename T2,
typename T3>
1316 const MsgFormat::Sink& result,
1317 const LocaleProvider& loc,
1324 MsgFormat parsed_format(result, loc);
1326 parsed_format.Parse(fmt);
1327 parsed_format.FormatD1(v1);
1328 parsed_format.FormatD1(v2);
1329 parsed_format.FormatD1(v3);
1330 parsed_format.FinishFormatD();
1331 return parsed_format.GetStrSize();
1335 template <
typename T1,
typename T2,
typename T3,
typename T4>
1338 const MsgFormat::Sink& result,
1346 MsgFormat parsed_format(result);
1348 parsed_format.Parse(fmt);
1349 parsed_format.FormatD1(v1);
1350 parsed_format.FormatD1(v2);
1351 parsed_format.FormatD1(v3);
1352 parsed_format.FormatD1(v4);
1353 parsed_format.FinishFormatD();
1354 return parsed_format.GetStrSize();
1357 template <
typename T1,
typename T2,
typename T3,
typename T4>
1360 const MsgFormat::Sink& result,
1361 const LocaleProvider& loc,
1369 MsgFormat parsed_format(result, loc);
1371 parsed_format.Parse(fmt);
1372 parsed_format.FormatD1(v1);
1373 parsed_format.FormatD1(v2);
1374 parsed_format.FormatD1(v3);
1375 parsed_format.FormatD1(v4);
1376 parsed_format.FinishFormatD();
1377 return parsed_format.GetStrSize();
1381 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
1384 const MsgFormat::Sink& result,
1393 MsgFormat parsed_format(result);
1395 parsed_format.Parse(fmt);
1396 parsed_format.FormatD1(v1);
1397 parsed_format.FormatD1(v2);
1398 parsed_format.FormatD1(v3);
1399 parsed_format.FormatD1(v4);
1400 parsed_format.FormatD1(v5);
1401 parsed_format.FinishFormatD();
1402 return parsed_format.GetStrSize();
1405 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
1408 const MsgFormat::Sink& result,
1409 const LocaleProvider& loc,
1418 MsgFormat parsed_format(result, loc);
1420 parsed_format.Parse(fmt);
1421 parsed_format.FormatD1(v1);
1422 parsed_format.FormatD1(v2);
1423 parsed_format.FormatD1(v3);
1424 parsed_format.FormatD1(v4);
1425 parsed_format.FormatD1(v5);
1426 parsed_format.FinishFormatD();
1427 return parsed_format.GetStrSize();
1431 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
1434 const MsgFormat::Sink& result,
1444 MsgFormat parsed_format(result);
1446 parsed_format.Parse(fmt);
1447 parsed_format.FormatD1(v1);
1448 parsed_format.FormatD1(v2);
1449 parsed_format.FormatD1(v3);
1450 parsed_format.FormatD1(v4);
1451 parsed_format.FormatD1(v5);
1452 parsed_format.FormatD1(v6);
1453 parsed_format.FinishFormatD();
1454 return parsed_format.GetStrSize();
1457 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
1460 const MsgFormat::Sink& result,
1461 const LocaleProvider& loc,
1471 MsgFormat parsed_format(result, loc);
1473 parsed_format.Parse(fmt);
1474 parsed_format.FormatD1(v1);
1475 parsed_format.FormatD1(v2);
1476 parsed_format.FormatD1(v3);
1477 parsed_format.FormatD1(v4);
1478 parsed_format.FormatD1(v5);
1479 parsed_format.FormatD1(v6);
1480 parsed_format.FinishFormatD();
1481 return parsed_format.GetStrSize();
1485 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
1488 const MsgFormat::Sink& result,
1499 MsgFormat parsed_format(result);
1501 parsed_format.Parse(fmt);
1502 parsed_format.FormatD1(v1);
1503 parsed_format.FormatD1(v2);
1504 parsed_format.FormatD1(v3);
1505 parsed_format.FormatD1(v4);
1506 parsed_format.FormatD1(v5);
1507 parsed_format.FormatD1(v6);
1508 parsed_format.FormatD1(v7);
1509 parsed_format.FinishFormatD();
1510 return parsed_format.GetStrSize();
1513 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
1516 const MsgFormat::Sink& result,
1517 const LocaleProvider& loc,
1528 MsgFormat parsed_format(result, loc);
1530 parsed_format.Parse(fmt);
1531 parsed_format.FormatD1(v1);
1532 parsed_format.FormatD1(v2);
1533 parsed_format.FormatD1(v3);
1534 parsed_format.FormatD1(v4);
1535 parsed_format.FormatD1(v5);
1536 parsed_format.FormatD1(v6);
1537 parsed_format.FormatD1(v7);
1538 parsed_format.FinishFormatD();
1539 return parsed_format.GetStrSize();
1543 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
1546 const MsgFormat::Sink& result,
1558 MsgFormat parsed_format(result);
1560 parsed_format.Parse(fmt);
1561 parsed_format.FormatD1(v1);
1562 parsed_format.FormatD1(v2);
1563 parsed_format.FormatD1(v3);
1564 parsed_format.FormatD1(v4);
1565 parsed_format.FormatD1(v5);
1566 parsed_format.FormatD1(v6);
1567 parsed_format.FormatD1(v7);
1568 parsed_format.FormatD1(v8);
1569 parsed_format.FinishFormatD();
1570 return parsed_format.GetStrSize();
1573 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
1576 const MsgFormat::Sink& result,
1577 const LocaleProvider& loc,
1589 MsgFormat parsed_format(result, loc);
1591 parsed_format.Parse(fmt);
1592 parsed_format.FormatD1(v1);
1593 parsed_format.FormatD1(v2);
1594 parsed_format.FormatD1(v3);
1595 parsed_format.FormatD1(v4);
1596 parsed_format.FormatD1(v5);
1597 parsed_format.FormatD1(v6);
1598 parsed_format.FormatD1(v7);
1599 parsed_format.FormatD1(v8);
1600 parsed_format.FinishFormatD();
1601 return parsed_format.GetStrSize();
1605 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
1608 const MsgFormat::Sink& result,
1621 MsgFormat parsed_format(result);
1623 parsed_format.Parse(fmt);
1624 parsed_format.FormatD1(v1);
1625 parsed_format.FormatD1(v2);
1626 parsed_format.FormatD1(v3);
1627 parsed_format.FormatD1(v4);
1628 parsed_format.FormatD1(v5);
1629 parsed_format.FormatD1(v6);
1630 parsed_format.FormatD1(v7);
1631 parsed_format.FormatD1(v8);
1632 parsed_format.FormatD1(v9);
1633 parsed_format.FinishFormatD();
1634 return parsed_format.GetStrSize();
1637 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9>
1640 const MsgFormat::Sink& result,
1641 const LocaleProvider& loc,
1654 MsgFormat parsed_format(result, loc);
1656 parsed_format.Parse(fmt);
1657 parsed_format.FormatD1(v1);
1658 parsed_format.FormatD1(v2);
1659 parsed_format.FormatD1(v3);
1660 parsed_format.FormatD1(v4);
1661 parsed_format.FormatD1(v5);
1662 parsed_format.FormatD1(v6);
1663 parsed_format.FormatD1(v7);
1664 parsed_format.FormatD1(v8);
1665 parsed_format.FormatD1(v9);
1666 parsed_format.FinishFormatD();
1667 return parsed_format.GetStrSize();
1671 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
1674 const MsgFormat::Sink& result,
1688 MsgFormat parsed_format(result);
1690 parsed_format.Parse(fmt);
1691 parsed_format.FormatD1(v1);
1692 parsed_format.FormatD1(v2);
1693 parsed_format.FormatD1(v3);
1694 parsed_format.FormatD1(v4);
1695 parsed_format.FormatD1(v5);
1696 parsed_format.FormatD1(v6);
1697 parsed_format.FormatD1(v7);
1698 parsed_format.FormatD1(v8);
1699 parsed_format.FormatD1(v9);
1700 parsed_format.FormatD1(v10);
1701 parsed_format.FinishFormatD();
1702 return parsed_format.GetStrSize();
1705 template <
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10>
1708 const MsgFormat::Sink& result,
1709 const LocaleProvider& loc,
1723 MsgFormat parsed_format(result, loc);
1725 parsed_format.Parse(fmt);
1726 parsed_format.FormatD1(v1);
1727 parsed_format.FormatD1(v2);
1728 parsed_format.FormatD1(v3);
1729 parsed_format.FormatD1(v4);
1730 parsed_format.FormatD1(v5);
1731 parsed_format.FormatD1(v6);
1732 parsed_format.FormatD1(v7);
1733 parsed_format.FormatD1(v8);
1734 parsed_format.FormatD1(v9);
1735 parsed_format.FormatD1(v10);
1736 parsed_format.FinishFormatD();
1737 return parsed_format.GetStrSize();
1746 UPInt SPrintF(
const MsgFormat::Sink& result,
const char* fmt, ...);
1755 int ReadInteger(StringDataPtr& str,
int defaultValue,
char separator =
':');
1757 template <
typename T>
1758 String AsString(
const T& v)
1761 Format(sink,
"{0}", v);
1767 #endif //INC_SF_Kernel_MsgFormat_H
Definition: gamekitcrowddispersion.h:20