Merge pull request #3335 from lambdageek/dev/system-reflection-assembly
[mono.git] / mcs / class / corlib / Mono / RuntimeStructs.cs
1 //
2 // Mono runtime native structs surfaced to managed code.
3 //
4 // Authors:
5 //   Aleksey Kliger <aleksey@xamarin.com>
6 //   Rodrigo Kumpera <kumpera@xamarin.com>
7 //
8 // Copyright 2016 Dot net foundation.
9 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
10 //
11
12 using System;
13 using System.Runtime.InteropServices;
14
15 namespace Mono {
16         internal class RuntimeStructs {
17                 // class-internals.h MonoRemoteClass
18                 [StructLayout(LayoutKind.Sequential)]
19                 internal unsafe struct RemoteClass {
20                         internal IntPtr default_vtable;
21                         internal IntPtr xdomain_vtable;
22                         internal MonoClass* proxy_class;
23                         internal IntPtr proxy_class_name;
24                         internal uint interface_count;
25                         // FIXME: How to represent variable-length array struct member?
26                         // MonoClass* interfaces [];
27                 }
28
29                 internal struct MonoClass {
30                 }
31
32                 // class-internals.h MonoGenericParamInfo
33                 internal unsafe struct GenericParamInfo {
34                         internal MonoClass* pklass;
35                         internal IntPtr name;
36                         internal ushort flags;
37                         internal uint token;
38                         internal MonoClass** constraints; /* NULL terminated */
39                 }
40
41                 // glib.h GPtrArray
42                 internal unsafe struct GPtrArray {
43                         internal IntPtr* data;
44                         internal int len;
45                 }
46         }
47
48         //Maps to metadata-internals.h:: MonoAssemblyName
49         internal unsafe struct MonoAssemblyName
50         {
51                 const int MONO_PUBLIC_KEY_TOKEN_LENGTH = 17;
52
53                 internal IntPtr name;
54                 internal IntPtr culture;
55                 internal IntPtr hash_value;
56                 internal IntPtr public_key;
57                 internal fixed byte public_key_token [MONO_PUBLIC_KEY_TOKEN_LENGTH];
58                 internal uint hash_alg;
59                 internal uint hash_len;
60                 internal uint flags;
61                 internal ushort major, minor, build, revision;
62                 internal ushort arch;
63         }
64 }