001    /*
002     * To change this template, choose Tools | Templates
003     * and open the template in the editor.
004     */
005    package org.bridj.objc;
006    
007    import java.nio.charset.Charset;
008    import java.util.Map;
009    import org.bridj.BridJ;
010    import org.bridj.CRuntime;
011    import org.bridj.Pointer;
012    import static org.bridj.Pointer.*;
013    import org.bridj.Pointer.StringType;
014    import org.bridj.ann.Library;
015    import org.bridj.ann.Ptr;
016    
017    @Library("Foundation")
018    @org.bridj.ann.Runtime(CRuntime.class)
019    public class FoundationLibrary {
020        static {
021            BridJ.register();
022        }
023        
024        public static final int 
025            kCFStringEncodingASCII = 0x0600,
026            kCFStringEncodingUnicode = 0x0100,
027            kCFStringEncodingUTF8 = 0x08000100;
028    
029        public static native Pointer<NSString> CFStringCreateWithBytes(Pointer<?> alloc, Pointer<Byte> bytes, @Ptr long  numBytes, int encoding, boolean isExternalRepresentation);
030        
031        
032        public static Pointer<NSString> pointerToNSString(String s) {
033            Pointer p = Pointer.pointerToString(s, StringType.C, Charset.forName("utf-8"));
034            assert p != null;
035            Pointer<NSString> ps = CFStringCreateWithBytes(null, p, p.getValidBytes() - 1 /* remove the trailing NULL */, kCFStringEncodingUTF8, false);
036            assert ps != null;
037            return ps;
038        }
039    }