~ubuntu-branches/ubuntu/trusty/monodevelop/trusty-proposed

« back to all changes in this revision

Viewing changes to external/maccore/src/Foundation/NSDictionary.cs

  • Committer: Package Import Robot
  • Author(s): Jo Shields
  • Date: 2013-05-12 09:46:03 UTC
  • mto: This revision was merged to the branch mainline in revision 29.
  • Revision ID: package-import@ubuntu.com-20130512094603-mad323bzcxvmcam0
Tags: upstream-4.0.5+dfsg
ImportĀ upstreamĀ versionĀ 4.0.5+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
//
2
2
// Copyright 2010, Novell, Inc.
 
3
// Copyright 2011, 2012 Xamarin Inc
3
4
//
4
5
// Permission is hereby granted, free of charge, to any person obtaining
5
6
// a copy of this software and associated documentation files (the
28
29
namespace MonoMac.Foundation {
29
30
 
30
31
        public partial class NSDictionary : IDictionary, IDictionary<NSObject, NSObject> {
 
32
                public NSDictionary (NSObject first, NSObject second, params NSObject [] args) : this (PickOdd (second, args), PickEven (first, args))
 
33
                {
 
34
                }
 
35
 
 
36
                public NSDictionary (object first, object second, params object [] args) : this (PickOdd (second, args), PickEven (first, args))
 
37
                {
 
38
                }
 
39
 
 
40
                
 
41
                static NSArray PickEven (NSObject f, NSObject [] args)
 
42
                {
 
43
                        int al = args.Length;
 
44
                        if ((al % 2) != 0)
 
45
                                throw new ArgumentException ("The arguments to NSDictionary should be a multiple of two", "args");
 
46
                        var ret = new NSObject [1+al/2];
 
47
                        ret [0] = f;
 
48
                        for (int i = 0, target = 1; i < al; i += 2)
 
49
                                ret [target++] = args [i];
 
50
                        return NSArray.FromNSObjects (ret);
 
51
                }
 
52
 
 
53
                static NSArray PickOdd (NSObject f, NSObject [] args)
 
54
                {
 
55
                        var ret = new NSObject [1+args.Length/2];
 
56
                        ret [0] = f;
 
57
                        for (int i = 1, target = 1; i < args.Length; i += 2)
 
58
                                ret [target++] = args [i];
 
59
                        return NSArray.FromNSObjects (ret);
 
60
                }
 
61
 
 
62
                static NSArray PickEven (object f, object [] args)
 
63
                {
 
64
                        int al = args.Length;
 
65
                        if ((al % 2) != 0)
 
66
                                throw new ArgumentException ("The arguments to NSDictionary should be a multiple of two", "args");
 
67
                        var ret = new object [1+al/2];
 
68
                        ret [0] = f;
 
69
                        for (int i = 0, target = 1; i < al; i += 2)
 
70
                                ret [target++] = args [i];
 
71
                        return NSArray.FromObjects (ret);
 
72
                }
 
73
 
 
74
                static NSArray PickOdd (object f, object [] args)
 
75
                {
 
76
                        var ret = new object [1+args.Length/2];
 
77
                        ret [0] = f;
 
78
                        for (int i = 1, target = 1; i < args.Length; i += 2)
 
79
                                ret [target++] = args [i];
 
80
                        return NSArray.FromObjects (ret);
 
81
                }
 
82
                
31
83
                public static NSDictionary FromObjectsAndKeys (NSObject [] objects, NSObject [] keys)
32
84
                {
33
85
                        if (objects.Length != keys.Length)
61
113
                        if (count < 1 || objects.Length < count || keys.Length < count)
62
114
                                throw new ArgumentException ("count");
63
115
                        
64
 
                        var no = NSArray.FromNSObjects (objects);
65
 
                        var nk = NSArray.FromNSObjects (keys);
 
116
                        var no = NSArray.FromNSObjects ((IList<NSObject>) objects, count);
 
117
                        var nk = NSArray.FromNSObjects ((IList<NSObject>) keys, count);
66
118
                        var r = FromObjectsAndKeysInternal (no, nk);
67
119
                        no.Dispose ();
68
120
                        nk.Dispose ();
319
371
                        }
320
372
                }
321
373
 
 
374
                public virtual NSObject this [NSString key] {
 
375
                        get {
 
376
                                if (key == null)
 
377
                                        throw new ArgumentNullException ("key");
 
378
                                return ObjectForKey (key);
 
379
                        }
 
380
                        set {
 
381
                                throw new NotSupportedException ();
 
382
                        }
 
383
                }
 
384
 
 
385
                public virtual NSObject this [string key] {
 
386
                        get {
 
387
                                if (key == null)
 
388
                                        throw new ArgumentNullException ("key");
 
389
                                using (var nss = new NSString (key)){
 
390
                                        return ObjectForKey (nss);
 
391
                                }
 
392
                        }
 
393
                        set {
 
394
                                throw new NotSupportedException ();
 
395
                        }
 
396
                }
 
397
 
322
398
                ICollection<NSObject> IDictionary<NSObject, NSObject>.Keys {
323
399
                        get {return Keys;}
324
400
                }
343
419
 
344
420
                public IntPtr LowlevelObjectForKey (IntPtr key)
345
421
                {
346
 
                        return MonoMac.ObjCRuntime.Messaging.IntPtr_objc_msgSend_IntPtr (this.Handle, selObjectForKey_, key);
 
422
#if MONOMAC
 
423
                        return MonoMac.ObjCRuntime.Messaging.IntPtr_objc_msgSend_IntPtr (this.Handle, selObjectForKey_Handle, key);
 
424
#else
 
425
                        return MonoMac.ObjCRuntime.Messaging.IntPtr_objc_msgSend_IntPtr (this.Handle, Selector.GetHandle (selObjectForKey_), key);
 
426
#endif
347
427
                }
348
428
        }
349
429
}