1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
//
// This file is part of the OpenLink Software Virtuoso Open-Source (VOS)
// project.
//
// Copyright (C) 1998-2024 OpenLink Software
//
// This project is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the
// Free Software Foundation; only version 2 of the License, dated June 1991.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
//
//
// $Id$
//
using System;
using System.Runtime.InteropServices;
using System.Text;
#if ODBC_CLIENT
namespace OpenLink.Data.VirtuosoOdbcClient
#elif CLIENT
namespace OpenLink.Data.VirtuosoClient
#else
namespace OpenLink.Data.Virtuoso
#endif
{
internal sealed class UnixMono : PlatformBase
{
public override IntPtr MarshalAlloc (int size)
{
return Marshal.AllocHGlobal (size);
}
public override IntPtr MarshalReAlloc (IntPtr handle, int size)
{
return Marshal.ReAllocHGlobal (handle, (IntPtr) size);
}
public override void MarshalFree (IntPtr handle)
{
Marshal.FreeHGlobal (handle);
}
public override int WideCharSize
{
get { return 4; }
}
public override int StringToWideChars (string source, IntPtr buffer, int length)
{
length /= 4;
int size = source.Length;
if (size > length - 1)
size = length - 1;
for (int i = 0; i < size; i++)
{
int c = (int) source[i];
Marshal.WriteInt32 (buffer, i * 4, c);
}
Marshal.WriteInt32 (buffer, size * 4, 0);
return size * 4;
}
public override string WideCharsToString (IntPtr buffer, int length)
{
length /= 4;
StringBuilder sb = new StringBuilder (length);
for (int i = 0; i < length; i++)
{
int c = Marshal.ReadInt32 (buffer, i * 4);
sb.Append (c < UInt16.MaxValue ? (char) c : '?');
}
return sb.ToString ();
}
public override char[] WideCharsToArray (IntPtr buffer, int length)
{
length /= 4;
char[] chars = new char[length];
for (int i = 0; i < length; i++)
{
int c = Marshal.ReadInt32 (buffer, i * 4);
chars[i] = (c < UInt16.MaxValue ? (char) c : '?');
}
return chars;
}
public override int CaseInsensitiveCompare (string strA, string strB)
{
return String.Compare (strA, strB, true);
}
}
}
|