/* ----------------------------------------------------------------------------
 * This file was automatically generated by SWIG (http://www.swig.org).
 * Version 1.3.38
 *
 * Do not make changes to this file unless you know what you are doing--modify
 * the SWIG interface file instead.
 * ----------------------------------------------------------------------------- */

namespace BerkeleyDB.Internal {

using System;
using System.Runtime.InteropServices;

internal class DBT : IDisposable {
  private HandleRef swigCPtr;
  protected bool swigCMemOwn;

  internal DBT(IntPtr cPtr, bool cMemoryOwn) {
    swigCMemOwn = cMemoryOwn;
    swigCPtr = new HandleRef(this, cPtr);
  }

  internal static HandleRef getCPtr(DBT obj) {
    return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
  }

  ~DBT() {
    Dispose();
  }

  public virtual void Dispose() {
    lock(this) {
      if(swigCPtr.Handle != IntPtr.Zero && swigCMemOwn) {
        swigCMemOwn = false;
        libdb_csharpPINVOKE.delete_DBT(swigCPtr);
      }
      swigCPtr = new HandleRef(null, IntPtr.Zero);
      GC.SuppressFinalize(this);
    }
  }

	internal IntPtr dataPtr {
		get {
			return libdb_csharpPINVOKE.DBT_data_get(swigCPtr);
		}
	}

  internal uint dlen {
    set {
      libdb_csharpPINVOKE.DBT_dlen_set(swigCPtr, value);
    } 
    get {
      uint ret = libdb_csharpPINVOKE.DBT_dlen_get(swigCPtr);
      return ret;
    } 
  }

  internal uint doff {
    set {
      libdb_csharpPINVOKE.DBT_doff_set(swigCPtr, value);
    } 
    get {
      uint ret = libdb_csharpPINVOKE.DBT_doff_get(swigCPtr);
      return ret;
    } 
  }

  internal uint flags {
    set {
      libdb_csharpPINVOKE.DBT_flags_set(swigCPtr, value);
    } 
    get {
      uint ret = libdb_csharpPINVOKE.DBT_flags_get(swigCPtr);
      return ret;
    } 
  }

  internal uint size {
    set {
      libdb_csharpPINVOKE.DBT_size_set(swigCPtr, value);
    } 
    get {
      uint ret = libdb_csharpPINVOKE.DBT_size_get(swigCPtr);
      return ret;
    } 
  }

  internal uint ulen {
    set {
      libdb_csharpPINVOKE.DBT_ulen_set(swigCPtr, value);
    } 
    get {
      uint ret = libdb_csharpPINVOKE.DBT_ulen_get(swigCPtr);
      return ret;
    } 
  }

  internal byte[] data {
	set {
		IntPtr _data = Marshal.AllocHGlobal(value.Length);
        Marshal.Copy(value, 0, _data, value.Length);
        libdb_csharpPINVOKE.DBT_data_set(swigCPtr, _data);
        size = (uint)value.Length;
	}

	get {
		IntPtr datap = libdb_csharpPINVOKE.DBT_data_get(swigCPtr);
		int sz = (int)size;
		byte[] ret = new byte[sz];
		Marshal.Copy(datap, ret, 0, sz);
		return ret;
	}

  }

  internal DatabaseEntry app_data {
    set {
      libdb_csharpPINVOKE.DBT_app_data_set(swigCPtr, value);
    } 
		get { return libdb_csharpPINVOKE.DBT_app_data_get(swigCPtr); }
	
  }

  internal DBT() : this(libdb_csharpPINVOKE.new_DBT(), true) { 
		flags = DbConstants.DB_DBT_USERCOPY;
	} 
}

}