bingo/sqlserver/Source/BingoCore.cs (281 lines of code) (raw):
using System;
using System.Runtime.InteropServices;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using System.Collections;
using System.IO;
using System.Text;
using Microsoft.Win32;
namespace indigo
{
public unsafe class BingoCore
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate int GetNextRecordHandler (IntPtr context);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void ProcessResultHandler (IntPtr context);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void ProcessErrorHandler (int id, IntPtr context);
private static BingoCoreLib _lib = null;
public static BingoCoreLib lib
{
get
{
if (_lib == null)
{
BingoDllLoader.Instance.loadLibrary(null, "bingo-core-c.dll", "indigo.resource", false);
_lib = BingoDllLoader.Instance.getInterface<BingoCoreLib>("bingo-core-c.dll");
}
return _lib;
}
}
public static string bingoGetNameCore (byte[] buffer)
{
sbyte* res = lib.bingoGetNameCore(buffer, buffer.Length);
if ((IntPtr)res == IntPtr.Zero)
throw new Exception(lib.bingoGetError());
return new String(res);
}
public static string mangoGrossGetConditions ()
{
sbyte* res = lib.mangoGrossGetConditions();
if ((IntPtr)res == IntPtr.Zero)
throw new Exception(lib.bingoGetError());
return new String(res);
}
public static string mangoGross (byte[] target_buf)
{
sbyte* res = lib.mangoGross(target_buf, target_buf.Length);
if ((IntPtr)res == IntPtr.Zero)
return null;
return new String(res);
}
public static string checkMolecule (byte[] molecule)
{
sbyte* res = lib.mangoCheckMolecule(molecule, molecule.Length);
if ((IntPtr)res == IntPtr.Zero)
return null;
return new String(res);
}
public static string checkReaction (byte[] reaction)
{
sbyte* res = lib.ringoCheckReaction(reaction, reaction.Length);
if ((IntPtr)res == IntPtr.Zero)
return null;
return new String(res);
}
public static string ringoAAM (byte[] reaction, string options)
{
sbyte* res = lib.ringoAAM(reaction, reaction.Length, options);
if ((IntPtr)res == IntPtr.Zero)
throw new Exception(lib.bingoGetError());
return new String(res);
}
public static string ringoGetHightlightedReaction ()
{
sbyte* res = lib.ringoGetHightlightedReaction();
if ((IntPtr)res == IntPtr.Zero)
throw new Exception(lib.bingoGetError());
return new String(res);
}
public static string mangoGetHightlightedMolecule ()
{
sbyte* res = lib.mangoGetHightlightedMolecule();
if ((IntPtr)res == IntPtr.Zero)
throw new Exception(lib.bingoGetError());
return new String(res);
}
public static string mangoTauGetQueryGross ()
{
return new String(lib.mangoTauGetQueryGross());
}
public static string mangoGetCountedElementName (int index)
{
return new String(lib.mangoGetCountedElementName(index));
}
public static string bingoProfilingGetStatistics (bool for_session)
{
return new String(lib.bingoProfilingGetStatistics(for_session));
}
public static string ringoRxnfile (byte[] reaction)
{
sbyte* res = lib.ringoRxnfile(reaction, reaction.Length);
if ((IntPtr)res == IntPtr.Zero)
return null;
return new String(res);
}
public static string ringoRCML (byte[] reaction)
{
sbyte* res = lib.ringoRCML(reaction, reaction.Length);
if ((IntPtr)res == IntPtr.Zero)
return null;
return new String(res);
}
public static string mangoMolfile (byte[] molecule)
{
sbyte* res = lib.mangoMolfile(molecule, molecule.Length);
if ((IntPtr)res == IntPtr.Zero)
return null;
return new String(res);
}
public static string mangoCML (byte[] molecule)
{
sbyte* res = lib.mangoCML(molecule, molecule.Length);
if ((IntPtr)res == IntPtr.Zero)
return null;
return new String(res);
}
public static byte[] mangoICM (byte[] molecule, bool save_xyz)
{
int out_len;
IntPtr icm_ptr = lib.mangoICM(molecule, molecule.Length, save_xyz, out out_len);
if ((IntPtr)icm_ptr == IntPtr.Zero)
return null;
byte[] icm = new byte[out_len];
Marshal.Copy(icm_ptr, icm, 0, out_len);
return icm;
}
public static byte[] ringoICR (byte[] reaction, bool save_xyz)
{
int out_len;
IntPtr icr_ptr = lib.ringoICR(reaction, reaction.Length, save_xyz, out out_len);
if ((IntPtr)icr_ptr == IntPtr.Zero)
return null;
byte[] icr = new byte[out_len];
Marshal.Copy(icr_ptr, icr, 0, out_len);
return icr;
}
public static string ringoRSMILES (byte[] buffer)
{
sbyte* res = lib.ringoRSMILES(buffer, buffer.Length);
if ((IntPtr)res == IntPtr.Zero)
return null;
return new String(res);
}
public static string mangoSMILES (byte[] buffer, bool canonical)
{
sbyte* res = lib.mangoSMILES(buffer, buffer.Length, canonical ? 1 : 0);
if ((IntPtr)res == IntPtr.Zero)
return null;
return new String(res);
}
public static byte[] mangoFingerprint(byte[] molecule, string options)
{
int fp_len;
IntPtr fp_ptr = lib.mangoFingerprint(molecule, molecule.Length, options, out fp_len);
if (fp_ptr == IntPtr.Zero)
return null;
byte[] fp = new byte[fp_len];
Marshal.Copy(fp_ptr, fp, 0, fp_len);
return fp;
}
public static byte[] ringoFingerprint(byte[] reaction, string options)
{
int fp_len;
IntPtr fp_ptr = lib.ringoFingerprint(reaction, reaction.Length, options, out fp_len);
if (fp_ptr == IntPtr.Zero)
return null;
byte[] fp = new byte[fp_len];
Marshal.Copy(fp_ptr, fp, 0, fp_len);
return fp;
}
public static string mangoInChI(byte[] molecule, string options)
{
int out_len;
sbyte* res = lib.mangoInChI(molecule, molecule.Length, options, out out_len);
if ((IntPtr)res == IntPtr.Zero)
return null;
return new String(res);
}
public static string mangoInChIKey(string incho)
{
sbyte* res = lib.mangoInChIKey(incho);
if ((IntPtr)res == IntPtr.Zero)
return null;
return new String(res);
}
public static int mangoGetQueryFingerprint(out byte[] fp)
{
IntPtr fp_ptr;
int fp_len;
int ret = lib.mangoGetQueryFingerprint(out fp_ptr, out fp_len);
fp = new byte[fp_len];
Marshal.Copy(fp_ptr, fp, 0, fp_len);
return ret;
}
public static int ringoGetQueryFingerprint (out byte[] fp)
{
IntPtr fp_ptr;
int fp_len;
int ret = lib.ringoGetQueryFingerprint(out fp_ptr, out fp_len);
fp = new byte[fp_len];
Marshal.Copy(fp_ptr, fp, 0, fp_len);
return ret;
}
public static string bingoRDFImportGetNext ()
{
return new String(lib.bingoRDFImportGetNext());
}
public static string bingoRDFImportGetParameter (string param_name)
{
return new String(lib.bingoRDFImportGetProperty(param_name));
}
public static string bingoSDFImportGetNext ()
{
return new String(lib.bingoSDFImportGetNext());
}
public static string bingoSDFImportGetParameter (string param_name)
{
return new String(lib.bingoSDFImportGetProperty(param_name));
}
public static void tautomerRulesReady ()
{
if (lib.bingoTautomerRulesReady() == 0)
throw new Exception(lib.bingoGetError());
}
public static void addTautomerRule (int n, string beg, string end)
{
if (lib.bingoAddTautomerRule(n, beg, end) == 0)
throw new Exception(lib.bingoGetError());
}
public static void clearTautomerRules ()
{
if (lib.bingoClearTautomerRules() == 0)
throw new Exception(lib.bingoGetError());
}
public static byte[] getConfigBin (string name)
{
IntPtr value_ptr;
int value_len;
if (lib.bingoGetConfigBin(name, out value_ptr, out value_len) == 0)
throw new Exception(lib.bingoGetError());
byte[] data = new byte[value_len];
Marshal.Copy(value_ptr, data, 0, value_len);
return data;
}
public static void setConfigBin (string name, byte[] value)
{
if (lib.bingoSetConfigBin(name, value, value.Length) == 0)
throw new Exception(lib.bingoGetError());
}
public static int getConfigInt (string name)
{
int value;
if (lib.bingoGetConfigInt(name, out value) == 0)
throw new Exception(lib.bingoGetError());
return value;
}
public static void setConfigInt (string name, int value)
{
if (lib.bingoSetConfigInt(name, value) == 0)
throw new Exception(lib.bingoGetError());
}
public static void setContext (int id)
{
if (lib.bingoSetContext(id) == 0)
throw new Exception(lib.bingoGetError());
}
}
}