2003-05-19 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / corlib / System.Reflection.Emit / UnmanagedMarshal.cs
1
2 //
3 // System.Reflection.Emit/UnmanagedMarshal.cs
4 //
5 // Author:
6 //   Paolo Molaro (lupus@ximian.com)
7 //
8 // (C) 2001-2002 Ximian, Inc.  http://www.ximian.com
9 //
10
11 using System.Reflection.Emit;
12 using System.Runtime.InteropServices;
13 using System;
14
15 namespace System.Reflection.Emit {
16
17         [Serializable]
18         public sealed class UnmanagedMarshal {
19                 private int count;
20                 private UnmanagedType t;
21                 private UnmanagedType tbase;
22                 
23                 private UnmanagedMarshal (UnmanagedType maint, int cnt) {
24                         count = cnt;
25                         t = maint;
26                         tbase = maint;
27                 }
28                 private UnmanagedMarshal (UnmanagedType maint, UnmanagedType elemt) {
29                         count = 0;
30                         t = maint;
31                         tbase = elemt;
32                 }
33                 
34                 public UnmanagedType BaseType {
35                         get {
36                                 if (t == UnmanagedType.LPArray || t == UnmanagedType.SafeArray)
37                                         throw new ArgumentException ();
38                                 return tbase;
39                         }
40                 }
41
42                 public int ElementCount {
43                         get {return count;}
44                 }
45
46                 public UnmanagedType GetUnmanagedType {
47                         get {return t;}
48                 }
49
50                 public Guid IIDGuid {
51                         get {return Guid.Empty;}
52                 }
53
54                 public static UnmanagedMarshal DefineByValArray( int elemCount) {
55                         return new UnmanagedMarshal (UnmanagedType.ByValArray, elemCount);
56                 }
57
58                 public static UnmanagedMarshal DefineByValTStr( int elemCount) {
59                         return new UnmanagedMarshal (UnmanagedType.ByValTStr, elemCount);
60                 }
61
62                 public static UnmanagedMarshal DefineLPArray( UnmanagedType elemType) {
63                         return new UnmanagedMarshal (UnmanagedType.LPArray, elemType);
64                 }
65
66                 public static UnmanagedMarshal DefineSafeArray( UnmanagedType elemType) {
67                         return new UnmanagedMarshal (UnmanagedType.SafeArray, elemType);
68                 }
69
70                 public static UnmanagedMarshal DefineUnmanagedMarshal( UnmanagedType unmanagedType) {
71                         return new UnmanagedMarshal (unmanagedType, unmanagedType);
72                 }
73                 
74         }
75 }