Home | History | Annotate | Download | only in DLL.NET
      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 }
     71