mirror of
				https://github.com/Ryujinx/GtkSharp.git
				synced 2025-11-04 08:24:56 +00:00 
			
		
		
		
	Variant: Add ToArray() and ToAsv() helpers
This commit is contained in:
		
							parent
							
								
									4c72b23216
								
							
						
					
					
						commit
						dc0f50729a
					
				| 
						 | 
				
			
			@ -273,5 +273,45 @@ namespace GLib {
 | 
			
		|||
			IntPtr str = g_variant_print(handle, type_annotate);
 | 
			
		||||
			return Marshaller.PtrToStringGFree (str);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		[DllImport (Global.GLibNativeDll, CallingConvention = CallingConvention.Cdecl)]
 | 
			
		||||
		static extern IntPtr g_variant_n_children (IntPtr handle);
 | 
			
		||||
 | 
			
		||||
		[DllImport (Global.GLibNativeDll, CallingConvention = CallingConvention.Cdecl)]
 | 
			
		||||
		static extern IntPtr g_variant_get_child_value (IntPtr handle, IntPtr index);
 | 
			
		||||
 | 
			
		||||
		public Variant[] ToArray ()
 | 
			
		||||
		{
 | 
			
		||||
			var n_children = (long) g_variant_n_children (Handle);
 | 
			
		||||
			var ret = new Variant[n_children];
 | 
			
		||||
 | 
			
		||||
			for (long i = 0; i < n_children; i++) {
 | 
			
		||||
				var h = g_variant_get_child_value (Handle, new IntPtr (i));
 | 
			
		||||
				ret[i] = new Variant (h);
 | 
			
		||||
				g_variant_unref (h);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return ret;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		[DllImport (Global.GLibNativeDll, CallingConvention = CallingConvention.Cdecl)]
 | 
			
		||||
		static extern IntPtr g_variant_get_variant (IntPtr handle);
 | 
			
		||||
 | 
			
		||||
		public Dictionary<string, Variant> ToAsv ()
 | 
			
		||||
		{
 | 
			
		||||
			var ret = new Dictionary<string, Variant> ();
 | 
			
		||||
 | 
			
		||||
			foreach (var dictEntry in ToArray ()) {
 | 
			
		||||
				var pair = dictEntry.ToArray ();
 | 
			
		||||
				var key = (string) pair[0];
 | 
			
		||||
				var h = g_variant_get_variant (pair[1].Handle);
 | 
			
		||||
				var value = new Variant (h);
 | 
			
		||||
				g_variant_unref (h);
 | 
			
		||||
 | 
			
		||||
				ret.Add (key, value);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return ret;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,6 +29,10 @@ namespace sample
 | 
			
		|||
			dict.Add ("unit", Variant.NewTuple (null));
 | 
			
		||||
			variant = new Variant (dict);
 | 
			
		||||
			Console.WriteLine (variant.Print (true));
 | 
			
		||||
 | 
			
		||||
			var asv = variant.ToAsv ();
 | 
			
		||||
			Console.WriteLine ("strv: " + asv["strv"].Print(true));
 | 
			
		||||
			Console.WriteLine ("unit: " + asv["unit"].Print(true));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public static void Main (string[] args)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue