Beispiel #1
0
 public void CFNumberRoundTrip_Byte(byte number)
 {
     using (var cfNumber = new CFNumber(number))
         Assert.Equal(number, cfNumber.ToByte());
 }
Beispiel #2
0
 public void CFNumberRoundTrip_Int16(short number)
 {
     using (var cfNumber = new CFNumber(number))
         Assert.Equal(number, cfNumber.ToInt16());
 }
Beispiel #3
0
 public void CFNumberRoundTrip_Single(float number)
 {
     using (var cfNumber = new CFNumber(number))
         Assert.Equal(number, cfNumber.ToSingle());
 }
Beispiel #4
0
 public void CFNumberRoundTrip_Double(double number)
 {
     using (var cfNumber = new CFNumber(number))
         Assert.Equal(number, cfNumber.ToDouble());
 }
Beispiel #5
0
        protected override bool StorageSetValue(string key, object value)
        {
            CFObject cfValue = null;

            try {
                switch (value)
                {
                case bool v:
                    SetValue(key, CFBoolean.ToCFBoolean(v));
                    return(true);

                case string v:
                    cfValue = new CFString(v);
                    break;

                case IEnumerable <string> v:
                    var cfArray = new CFMutableArray();
                    cfArray.AddRange(v);
                    cfValue = cfArray;
                    break;

                case sbyte v:
                    cfValue = new CFNumber(v);
                    break;

                case byte v:
                    cfValue = new CFNumber(v);
                    break;

                case short v:
                    cfValue = new CFNumber(v);
                    break;

                case ushort v:
                    cfValue = new CFNumber(v);
                    break;

                case int v:
                    cfValue = new CFNumber(v);
                    break;

                case uint v:
                    cfValue = new CFNumber(v);
                    break;

                case long v:
                    cfValue = new CFNumber(v);
                    break;

                case ulong v:
                    cfValue = new CFNumber(v);
                    break;

                case float v:
                    cfValue = new CFNumber(v);
                    break;

                case double v:
                    cfValue = new CFNumber(v);
                    break;

                default:
                    return(false);
                }

                SetValue(key, cfValue.Handle);
                return(true);
            } finally {
                cfValue?.Dispose();
            }
        }
Beispiel #6
0
 public void CFNumberRoundTrip_UInt64(ulong number)
 {
     using (var cfNumber = new CFNumber(number))
         Assert.Equal(number, cfNumber.ToUInt64());
 }
 public static extern IntPtr CFNumberCreate_5(IntPtr intptr_2, CFNumber.CFNumberType enum20_0,
     ref double double_0);
Beispiel #8
0
        protected override bool StorageTryGetValue(
            string key,
            Type valueType,
            TypeCode valueTypeCode,
            out object value)
        {
            using (var cfKey = new CFString(key)) {
                var valuePtr = CFPreferences.CopyValue(
                    cfKey.Handle,
                    applicationId.Handle,
                    CFPreferences.kCFPreferencesCurrentUser,
                    CFPreferences.kCFPreferencesAnyHost);

                if (valuePtr == IntPtr.Zero)
                {
                    value = null;
                    return(false);
                }

                var typeId = CoreFoundation.CFGetTypeID(valuePtr);

                if (typeId == CoreFoundation.CFTypeID.CFBoolean)
                {
                    value = CFBoolean.ToBoolean(valuePtr);
                    return(true);
                }

                if (typeId == CoreFoundation.CFTypeID.CFString)
                {
                    using (var cfString = new CFString(valuePtr))
                        value = cfString.ToString();
                    return(true);
                }

                if (typeId == CoreFoundation.CFTypeID.CFNumber)
                {
                    using (var cfNumber = new CFNumber(valuePtr)) {
                        switch (cfNumber.Type)
                        {
                        case CFNumberType.SInt8:
                        case CFNumberType.Char:
                            value = valueTypeCode == TypeCode.Byte
                                ? cfNumber.ToByte()
                                : (object)cfNumber.ToSByte();
                            return(true);

                        case CFNumberType.SInt16:
                        case CFNumberType.Short:
                            value = valueTypeCode == TypeCode.UInt16
                                ? cfNumber.ToUInt16()
                                : (object)cfNumber.ToInt16();
                            return(true);

                        case CFNumberType.SInt32:
                        case CFNumberType.Int:
                        case CFNumberType.Long:
                            value = valueTypeCode == TypeCode.UInt32
                                ? cfNumber.ToUInt32()
                                : (object)cfNumber.ToInt32();
                            return(true);

                        case CFNumberType.SInt64:
                        case CFNumberType.LongLong:
                        case CFNumberType.CFIndex:
                        case CFNumberType.NSInteger:
                            value = valueTypeCode == TypeCode.UInt64
                                ? cfNumber.ToUInt64()
                                : (object)cfNumber.ToInt64();
                            return(true);

                        case CFNumberType.Float32:
                        case CFNumberType.Float:
                            value = cfNumber.ToSingle();
                            return(true);

                        case CFNumberType.Float64:
                        case CFNumberType.Double:
                        case CFNumberType.CGFloat:
                            value = cfNumber.ToDouble();
                            return(true);
                        }
                    }
                }

                if (typeId == CoreFoundation.CFTypeID.CFArray)
                {
                    try {
                        value = CFArray
                                .FromCFStringArray(valuePtr)
                                ?.ToArray();
                        return(value != null);
                    } catch {
                        value = null;
                        return(false);
                    }
                }

                value = null;
                return(false);
            }
        }
 public static extern IntPtr CFNumberCreate_4(IntPtr intptr_2, CFNumber.CFNumberType enum20_0, ref float float_0);
 public static extern IntPtr CFNumberCreate_3(IntPtr intptr_2, CFNumber.CFNumberType enum20_0, ref long long_0);
 public static extern IntPtr CFNumberCreate_2(IntPtr intptr_2, CFNumber.CFNumberType enum20_0, ref int int_1);
 public static extern IntPtr CFNumberCreate_1(IntPtr intptr_2, CFNumber.CFNumberType enum20_0, ref short short_0);
 public static extern IntPtr CFNumberCreate(IntPtr intptr_2, CFNumber.CFNumberType enum20_0, IntPtr intptr_3);