/* ------------------------------------------------------------
 *  Typemap specializations for Ruby
 * ------------------------------------------------------------ */
/* ------------------------------------------------------------
 *  Fragment section
 * ------------------------------------------------------------ */

/* Include fundamental fragemt definitions */
%include <typemaps/fragments.swg>

/* Look for user fragments file. */
%include <rubyfragments.swg>

/* Ruby fragments for primitive types */
%include <rubyprimtypes.swg>

/* Ruby fragments for char* strings */
%include <rubystrings.swg>

/* Backward compatibility output helper */
%fragment("output_helper","header") %{
#define output_helper SWIG_Ruby_AppendOutput
%}

/* ------------------------------------------------------------
 *  Unified typemap section
 * ------------------------------------------------------------ */

/* Directors are supported in Ruby */
#ifndef SWIG_DIRECTOR_TYPEMAPS
#define SWIG_DIRECTOR_TYPEMAPS
#endif

#ifndef SWIG_INOUT_NODEF
#define SWIG_INOUT_NODEF
#endif

/* Ruby types */
#define SWIG_Object                      VALUE
#define VOID_Object                      Qnil

/* Ruby $track flag */
#define %convertptr_flags                $track
#define %newpointer_flags                $track
#define %newinstance_flags               $track

/* Simple overload of the output/constant/exception handling */
#define SWIG_AppendOutput(result,obj)    SWIG_Ruby_AppendOutput(result, obj)
#define SWIG_SetConstant(name, obj)      rb_define_const($module, name, obj)
#define SWIG_Raise(obj, type, desc)      rb_exc_raise(rb_exc_new3(rb_eRuntimeError, rb_obj_as_string(obj)))

/* Include the unified typemap library */
%include <typemaps/swigtypemaps.swg>


