• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
PString(String * string)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 
~PString()48 		~PString()
49 		{
50 			Marshal::FreeHGlobal(m_p);
51 		}
52 
53 		const char*
c_str()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 }
71