/tags/Root-branch-php-utl/SWIG/Examples/chicken/zlib/example.i
# · Swig · 76 lines · 52 code · 10 blank · 14 comment · 0 complexity · 69084fd365d5117a66aa83ec1adaa8e5 MD5 · raw file
- /* File : example.i */
- %module example
- %{
- /* Put headers and other declarations here */
- #include "zlib.h"
- %}
- %include typemaps.i
- %rename(VERSION) ZLIB_VERSION;
- %rename(z_error) zError;
- %apply char * { Bytef * };
- /* Allow the sourceLen to be automatically filled in from the length
- of the 'source' string */
- %typemap(in) (const Bytef *source, uLong sourceLen)
- %{ if (!C_swig_is_string ($input)) {
- swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "Argument $input is not a string");
- }
- $2 = (uLong) C_header_size ($input);
- $1 = C_c_string ($input);
- %}
- /* Allocate space the size of which is determined by the Scheme
- integer argument, and make a temporary integer so we can set
- destLen. */
- %typemap(in) (Bytef *dest, uLongf *destLen) (uLong len)
- %{ if (!C_swig_is_fixnum ($input)) {
- swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, "Argument $input is not a integer");
- }
- len = (uLong) C_unfix ($input);
- $2 = &len;
- $1 = (char *) malloc (*$2);
- %}
- /* Return the mutated string as a new object. */
- %typemap(argout) (Bytef *dest, uLongf *destLen)
- (C_word *scmstr)
- %{ scmstr = C_alloc (C_SIZEOF_STRING (*$2));
- SWIG_APPEND_VALUE(C_string (&scmstr, *$2, $1));
- free ($1);
- %}
- %include "zconf.h"
- %include "zlib.h"
- /* Ignore destLen as an input argument, and make a temporary integer so
- we can set destLen. */
- %typemap(numinputs=0) uLongf *destLen (uLong len)
- "$1 = &len;";
- /* Return a sized string as a new object. */
- %typemap(argout)
- (void *outstr, uLongf *destLen) (C_word *scmstr)
- %{ scmstr = C_alloc (C_SIZEOF_STRING (*$2));
- SWIG_APPEND_VALUE(C_string (&scmstr, *$2, $1));
- %}
- %inline %{
- /* %inline blocks are seen by SWIG and are inserted into the header
- portion of example_wrap.c, so that they are also seen by the C
- compiler. */
- int deflate_init(z_streamp strm, int level) {
- return deflateInit(strm,level); /* call macro */
- }
- int inflate_init(z_streamp strm) {
- return inflateInit(strm); /* call macro */
- }
- void* z_stream_save_next_out(z_streamp strm) {
- return (void*) strm->next_out;
- }
- void z_stream_get_next_chunk(z_streamp strm, void *outstr, uLongf *destLen) {
- *destLen = strm->next_out - (Bytef*)outstr;
- }
- %}