]> git.saurik.com Git - apple/mdnsresponder.git/blob - mDNSWindows/DLL.NET/PString.h
mDNSResponder-379.37.tar.gz
[apple/mdnsresponder.git] / mDNSWindows / DLL.NET / PString.h
1 /* -*- Mode: C; tab-width: 4 -*-
2 *
3 * Copyright (c) 2003-2004 Apple Computer, Inc. All rights reserved.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 #pragma once
19
20 using namespace System;
21 using namespace System::Text;
22
23 namespace Apple
24 {
25 __gc class PString
26 {
27 public:
28
29 PString(String* string)
30 {
31 if (string != NULL)
32 {
33 Byte unicodeBytes[] = Encoding::Unicode->GetBytes(string);
34 Byte utf8Bytes[] = Encoding::Convert(Encoding::Unicode, Encoding::UTF8, unicodeBytes);
35 m_p = Marshal::AllocHGlobal(utf8Bytes->Length + 1);
36
37 Byte __pin * p = &utf8Bytes[0];
38 char * hBytes = static_cast<char*>(m_p.ToPointer());
39 memcpy(hBytes, p, utf8Bytes->Length);
40 hBytes[utf8Bytes->Length] = '\0';
41 }
42 else
43 {
44 m_p = NULL;
45 }
46 }
47
48 ~PString()
49 {
50 Marshal::FreeHGlobal(m_p);
51 }
52
53 const char*
54 c_str()
55 {
56 if (m_p != NULL)
57 {
58 return static_cast<const char*>(m_p.ToPointer());
59 }
60 else
61 {
62 return NULL;
63 }
64 }
65
66 protected:
67
68 IntPtr m_p;
69 };
70 }