/* $Id: qtBinding.cc,v 1.2 2004/11/09 09:17:26 yurug Exp $ */

#include <kde/smoke.h>

// This should be found in qt_smoke.h
  extern Smoke* qt_Smoke;
  extern void init_qt_Smoke ();

extern "C" {

#include <stdio.h>
#include <caml/memory.h>
#include <caml/mlvalues.h>
#include <caml/alloc.h>
#include <caml/custom.h>
#include <caml/intext.h>
#include <caml/fail.h>
#include <caml/callback.h>
#include <caml/bigarray.h>
#include <assert.h>

  void binding_finalize (value v)
  {
    printf ("Not implemented yet.\n");
    return;
  }

  int binding_compare (value v1, value v2)
  {
    printf ("Not implemented yet.\n");
    return -1;
  }

  long binding_hash (value v)
  {
    // FIXME: no way.
    return -1;
  }

  void binding_serialize (value v, 
			  unsigned long* wsize_32, 
			  unsigned long* wsize_64)
  {
    printf ("Not implemented yet.\n");
    return;
  }

  unsigned long binding_deserialize (void* dst)
  {
    printf ("Not implemented yet.\n");    
    return 1;
  }

  static custom_operations binding_ops =
    {
      "nikoret__binding",
      binding_finalize,
      binding_compare,
      binding_hash,
      binding_serialize,
      binding_deserialize
    };

  value nikoret__init_qt_smoke (value unit)
  {
    CAMLparam0 ();
    int size = sizeof (Smoke*);
    // FIXME: To be refined.
    int used = 0;
    int max = 1;
    value r; 
    init_qt_Smoke ();
    r = alloc_custom (& binding_ops, size, used, max);
    printf ("%p\n", qt_Smoke);
    Field(r, 1) = (long int)qt_Smoke;
    CAMLreturn (r);
  }

}
