1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team
3
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
4
// software and associated documentation files (the "Software"), to deal in the Software
5
// without restriction, including without limitation the rights to use, copy, modify, merge,
6
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
7
// to whom the Software is furnished to do so, subject to the following conditions:
9
// The above copyright notice and this permission notice shall be included in all copies or
10
// substantial portions of the Software.
12
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
13
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
15
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
16
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
17
// DEALINGS IN THE SOFTWARE.
21
public class UnsafeCode
23
public unsafe int* NullPointer
31
public unsafe long ConvertDoubleToLong(double d)
36
public unsafe double ConvertLongToDouble(long d)
38
return *(double*)(&d);
41
public unsafe int ConvertFloatToInt(float d)
46
public unsafe float ConvertIntToFloat(int d)
51
public unsafe void PassRefParameterAsPointer(ref int p)
55
this.PassPointerAsRefParameter(ptr);
59
public unsafe void PassPointerAsRefParameter(int* p)
61
this.PassRefParameterAsPointer(ref *p);
64
public unsafe void AddressInMultiDimensionalArray(double[,] matrix)
66
fixed (double* ptr = &matrix[1, 2])
68
this.PointerReferenceExpression(ptr);
72
public unsafe void FixedStringAccess(string text)
74
fixed (char* ptr = text)
85
public unsafe void PutDoubleIntoLongArray1(long[] array, int index, double val)
87
fixed (long* ptr = array)
89
((double*)ptr)[index] = val;
93
public unsafe void PutDoubleIntoLongArray2(long[] array, int index, double val)
95
fixed (long* ptr = &array[index])
101
public unsafe string PointerReferenceExpression(double* d)
103
return d->ToString();
106
public unsafe void FixMultipleStrings(string text)
108
fixed (char* ptr = text, userName = Environment.UserName, ptr2 = text)
116
public unsafe string StackAlloc(int count)
118
char* ptr = stackalloc char[count];
119
for (int i = 0; i < count; i++)
123
return this.PointerReferenceExpression((double*)ptr);
128
this.PassPointerAsRefParameter(this.NullPointer);