2
2
// Copyright 2010, Novell, Inc.
3
// Copyright 2011, 2012 Xamarin Inc
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 {
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))
36
public NSDictionary (object first, object second, params object [] args) : this (PickOdd (second, args), PickEven (first, args))
41
static NSArray PickEven (NSObject f, NSObject [] args)
45
throw new ArgumentException ("The arguments to NSDictionary should be a multiple of two", "args");
46
var ret = new NSObject [1+al/2];
48
for (int i = 0, target = 1; i < al; i += 2)
49
ret [target++] = args [i];
50
return NSArray.FromNSObjects (ret);
53
static NSArray PickOdd (NSObject f, NSObject [] args)
55
var ret = new NSObject [1+args.Length/2];
57
for (int i = 1, target = 1; i < args.Length; i += 2)
58
ret [target++] = args [i];
59
return NSArray.FromNSObjects (ret);
62
static NSArray PickEven (object f, object [] args)
66
throw new ArgumentException ("The arguments to NSDictionary should be a multiple of two", "args");
67
var ret = new object [1+al/2];
69
for (int i = 0, target = 1; i < al; i += 2)
70
ret [target++] = args [i];
71
return NSArray.FromObjects (ret);
74
static NSArray PickOdd (object f, object [] args)
76
var ret = new object [1+args.Length/2];
78
for (int i = 1, target = 1; i < args.Length; i += 2)
79
ret [target++] = args [i];
80
return NSArray.FromObjects (ret);
31
83
public static NSDictionary FromObjectsAndKeys (NSObject [] objects, NSObject [] keys)
33
85
if (objects.Length != keys.Length)
61
113
if (count < 1 || objects.Length < count || keys.Length < count)
62
114
throw new ArgumentException ("count");
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);
374
public virtual NSObject this [NSString key] {
377
throw new ArgumentNullException ("key");
378
return ObjectForKey (key);
381
throw new NotSupportedException ();
385
public virtual NSObject this [string key] {
388
throw new ArgumentNullException ("key");
389
using (var nss = new NSString (key)){
390
return ObjectForKey (nss);
394
throw new NotSupportedException ();
322
398
ICollection<NSObject> IDictionary<NSObject, NSObject>.Keys {
323
399
get {return Keys;}
344
420
public IntPtr LowlevelObjectForKey (IntPtr key)
346
return MonoMac.ObjCRuntime.Messaging.IntPtr_objc_msgSend_IntPtr (this.Handle, selObjectForKey_, key);
423
return MonoMac.ObjCRuntime.Messaging.IntPtr_objc_msgSend_IntPtr (this.Handle, selObjectForKey_Handle, key);
425
return MonoMac.ObjCRuntime.Messaging.IntPtr_objc_msgSend_IntPtr (this.Handle, Selector.GetHandle (selObjectForKey_), key);