%module xdelta3
%import cstring.i
%import argcargv.i
%{
#include "xdelta3.h"

int xd3_main_cmdline (int ARGC, char **ARGV);
%}

%cstring_input_binary(const char *input, unsigned int input_size);
%cstring_input_binary(const char *source, unsigned int source_size);

%define %max_output_withsize(TYPEMAP, SIZE, MAXSIZE)
%typemap(in) MAXSIZE (unsigned int alloc_size) {
  $1 = alloc_size = PyInt_AsLong(obj2);
}
%typemap(in,numinputs=0) (TYPEMAP, SIZE) {
}
%typemap(check) (TYPEMAP, SIZE) {
  // alloc_size input is #7th position in xd3_xxcode_memory()
  $1 = malloc(alloc_size7);
  $2 = &alloc_size7;
}
%typemap(argout,fragment="t_output_helper") (TYPEMAP, SIZE) {
  if (result == 0) {
    PyObject *o;
    // alloc_size7 now carries actual size
    o = PyString_FromStringAndSize($1,alloc_size7);
    $result = t_output_helper($result,o);
  } else {
    $result = t_output_helper($result,Py_None);
  }
  free($1);
}
%typemap(default) int flags {
  $1 = 0;
}
%enddef

%max_output_withsize(char *output_buf, unsigned int *output_size, unsigned int max_output);

int     xd3_encode_memory (const uint8_t *input,
			   usize_t        input_size,
			   const uint8_t *source,
			   usize_t        source_size,
			   uint8_t       *output_buffer,
			   usize_t       *output_size,
			   usize_t        avail_output,
			   int            flags);

int     xd3_decode_memory (const uint8_t *input,
			   usize_t        input_size,
			   const uint8_t *source,
			   usize_t        source_size,
			   uint8_t       *output_buf,
			   usize_t       *output_size,
			   usize_t        avail_output,
			   int            flags);

int     xd3_main_cmdline (int ARGC, char **ARGV);

/* Is this the right way? */
enum {
  /*XD3_JUST_HDR,*/
  /*XD3_SKIP_WINDOW,*/
  /*XD3_SKIP_EMIT,*/
  /*XD3_FLUSH,*/
  XD3_SEC_DJW,
  XD3_SEC_FGK,
  /*XD3_SEC_TYPE,*/
  XD3_SEC_NODATA,
  XD3_SEC_NOINST,
  XD3_SEC_NOADDR,
  /*XD3_SEC_OTHER,*/
  XD3_ADLER32,
  XD3_ADLER32_NOVER,
  XD3_ALT_CODE_TABLE,
  XD3_NOCOMPRESS,
  XD3_BEGREEDY,
  XD3_COMPLEVEL_SHIFT,
  XD3_COMPLEVEL_MASK,
  XD3_COMPLEVEL_1,
  XD3_COMPLEVEL_3,
  XD3_COMPLEVEL_6,
  XD3_COMPLEVEL_9,
};
