// PropVariantUtils.cpp #include "StdAfx.h" #include "PropVariantUtils.h" #include "Common/StringConvert.h" #include "Common/IntToString.h" using namespace NWindows; static AString GetHex(UInt32 v) { char sz[32] = { '0', 'x' }; ConvertUInt64ToString(v, sz + 2, 16); return sz; } void StringToProp(const AString &s, NCOM::CPropVariant &prop) { prop = MultiByteToUnicodeString(s); } void PairToProp(const CUInt32PCharPair *pairs, unsigned num, UInt32 value, NCOM::CPropVariant &prop) { AString s; for (unsigned i = 0; i < num; i++) { const CUInt32PCharPair &p = pairs[i]; if (p.Value == value) s = p.Name; } if (s.IsEmpty()) s = GetHex(value); StringToProp(s, prop); } AString TypeToString(const char *table[], unsigned num, UInt32 value) { if (value < num) return table[value]; return GetHex(value); } void TypeToProp(const char *table[], unsigned num, UInt32 value, NCOM::CPropVariant &prop) { StringToProp(TypeToString(table, num, value), prop); } AString FlagsToString(const CUInt32PCharPair *pairs, unsigned num, UInt32 flags) { AString s; for (unsigned i = 0; i < num; i++) { const CUInt32PCharPair &p = pairs[i]; UInt32 flag = (UInt32)1 << (unsigned)p.Value; if ((flags & flag) != 0) { if (!s.IsEmpty()) s += ' '; s += p.Name; } flags &= ~flag; } if (flags != 0) { if (!s.IsEmpty()) s += ' '; s += GetHex(flags); } return s; } void FlagsToProp(const CUInt32PCharPair *pairs, unsigned num, UInt32 flags, NCOM::CPropVariant &prop) { StringToProp(FlagsToString(pairs, num, flags), prop); }