String.Split(char[],int,StringSplitOptions) should remove empty entries while
[mono.git] / mcs / class / corlib / System / GC.cs
1 //
2 // System.GC.cs
3 //
4 // Author:
5 //   Paolo Molaro (lupus@ximian.com)
6 //
7 // (C) 2001 Ximian, Inc.  http://www.ximian.com
8 //
9
10 //
11 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
20 // 
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
23 // 
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 //
32
33 using System.Runtime.CompilerServices;
34
35 #if NET_2_0
36 using System.Runtime.ConstrainedExecution;
37 #endif
38
39 namespace System
40 {
41         public
42 #if NET_2_0
43         static
44 #else
45         sealed
46 #endif
47         class GC
48         {
49
50 #if !NET_2_0
51                 private GC ()
52                 {
53                 }
54 #endif
55
56                 public extern static int MaxGeneration {
57                         [MethodImplAttribute(MethodImplOptions.InternalCall)]
58                         get;
59                 }
60
61                 [MethodImplAttribute (MethodImplOptions.InternalCall)]
62                 extern static void InternalCollect (int generation);
63                 
64                 public static void Collect () {
65                         InternalCollect (MaxGeneration);
66                 }
67
68                 // LAMESPEC: MS documentation says that it raises an error
69                 // when the argument generation is greater than MaxGeneration,
70                 // but it doesn't. (The documentation is fixed in 2.0.)
71                 public static void Collect (int generation) {
72                         if (generation < 0)
73                                 throw new ArgumentOutOfRangeException ("generation");
74                         InternalCollect (generation);
75                 }
76
77                 [MethodImplAttribute (MethodImplOptions.InternalCall)]
78                 public extern static int GetGeneration (object obj);
79
80                 public static int GetGeneration (WeakReference wo) {
81                         object obj = wo.Target;
82                         if (obj == null)
83                                 throw new ArgumentException ();
84                         return GetGeneration (obj);
85                 }
86
87                 [MethodImplAttribute (MethodImplOptions.InternalCall)]
88                 public extern static long GetTotalMemory (bool forceFullCollection);
89
90                 /* this icall has weird semantics check the docs... */
91 #if NET_2_0
92                 [ReliabilityContract (Consistency.WillNotCorruptState, Cer.Success)]
93 #endif
94                 [MethodImplAttribute (MethodImplOptions.InternalCall)]
95                 public extern static void KeepAlive (object obj);
96                 
97                 [MethodImplAttribute (MethodImplOptions.InternalCall)]
98                 public extern static void ReRegisterForFinalize (object obj);
99
100 #if NET_2_0
101                 [ReliabilityContractAttribute (Consistency.WillNotCorruptState, Cer.Success)]
102 #endif
103                 [MethodImplAttribute (MethodImplOptions.InternalCall)]
104                 public extern static void SuppressFinalize (object obj);
105
106                 [MethodImplAttribute (MethodImplOptions.InternalCall)]
107                 public extern static void WaitForPendingFinalizers ();
108
109 #if NET_2_0
110                 [ReliabilityContractAttribute (Consistency.WillNotCorruptState, Cer.Success)]
111                 [MethodImplAttribute (MethodImplOptions.InternalCall)]
112                 public extern static int CollectionCount (int generation);
113
114                 [MethodImplAttribute (MethodImplOptions.InternalCall)]
115                 public extern static void RecordPressure (long diff);
116
117                 public static void AddMemoryPressure (long bytesAllocated) {
118                         RecordPressure (bytesAllocated);
119                 }
120
121                 public static void RemoveMemoryPressure (long bytesAllocated) {
122                         RecordPressure (-bytesAllocated);
123                 }
124 #endif
125         }
126 }