48 E_UTF16, E_UNICODE = E_UTF16
66 template<
typename StringType>
struct IsManagedString {
enum { Result =
false }; };
70 template<
bool expression>
struct Select;
72 template<
typename TrueType,
typename FalseType>
struct Type {
typedef FalseType Result; };
75 template<
typename TrueType,
typename FalseType>
struct Type {
typedef TrueType Result; };
79 enum MarshalingDirection {
90 template<Encoding encoding,
typename SourceType>
91 static System::String ^marshal(
const SourceType &
string) {
93 return marshalCxxString<encoding, SourceType>(string);
96 template<Encoding encoding,
typename SourceType>
97 static System::String ^marshalCxxString(
101 size_t byteCount = cxxString.length() *
sizeof(SourceStringType::value_type);
104 array<unsigned char> ^bytes =
gcnew array<unsigned char>(byteCount);
105 { pin_ptr<unsigned char> pinnedBytes = &bytes[0];
106 memcpy(pinnedBytes, cxxString.c_str(), byteCount);
110 return decode<encoding>(bytes);
115 template<Encoding encoding>
static System::String ^decode(array<unsigned char> ^bytes);
116 template<>
static System::String ^decode<E_ANSI>(array<unsigned char> ^bytes) {
117 return System::Text::Encoding::Default->GetString(bytes);
119 template<>
static System::String ^decode<E_UTF8>(array<unsigned char> ^bytes) {
120 return System::Text::Encoding::UTF8->GetString(bytes);
122 template<>
static System::String ^decode<E_UTF16>(array<unsigned char> ^bytes) {
123 return System::Text::Encoding::Unicode->GetString(bytes);
130 template<Encoding encoding,
typename SourceType>
132 System::String ^
string 137 array<unsigned char> ^bytes = encode<encoding>(string);
140 if (bytes->Length == 0)
return StringType();
143 pin_ptr<unsigned char> pinnedBytes(&bytes[0]);
145 reinterpret_cast<StringType::value_type *>(static_cast<unsigned char *>(pinnedBytes)),
146 bytes->Length /
sizeof(StringType::value_type)
150 template<>
static std::wstring marshal<E_UTF16, System::String ^>(
151 System::String ^string
154 if (string->Length == 0)
return std::wstring();
157 pin_ptr<const wchar_t> pinnedChars(::PtrToStringChars(
string));
158 return std::wstring(pinnedChars, string->Length);
163 template<Encoding encoding>
static array<unsigned char> ^encode(System::String ^
string);
164 template<>
static array<unsigned char> ^encode<E_ANSI>(System::String ^string) {
165 return System::Text::Encoding::Default->GetBytes(
string);
167 template<>
static array<unsigned char> ^encode<E_UTF8>(System::String ^string) {
168 return System::Text::Encoding::UTF8->GetBytes(
string);
170 template<>
static array<unsigned char> ^encode<E_UTF16>(System::String ^string) {
171 return System::Text::Encoding::Unicode->GetBytes(
string);
189 template<Encoding encoding,
typename SourceType>
193 >::Result marshalString(SourceType
string) {
198 >::marshal<encoding, SourceType>(string);
Definition: EventStreamDetail.h:15