12.4 The Foreign Include File
AllApplicationManualNameSummaryHelp

  • Documentation
    • Reference manual
      • Foreign Language Interface
        • The Foreign Include File
          • Argument Passing and Control
          • Atoms and functors
          • Analysing Terms via the Foreign Interface
          • Constructing Terms
          • Unifying data
          • Convenient functions to generate Prolog exceptions
          • Foreign language wrapper support functions
            • PL_cvt_i_bool()
            • PL_cvt_i_char()
            • PL_cvt_i_schar()
            • PL_cvt_i_uchar()
            • PL_cvt_i_short()
            • PL_cvt_i_ushort()
            • PL_cvt_i_int()
            • PL_cvt_i_uint()
            • PL_cvt_i_long()
            • PL_cvt_i_ulong()
            • PL_cvt_i_llong()
            • PL_cvt_i_ullong()
            • PL_cvt_i_int32()
            • PL_cvt_i_uint32()
            • PL_cvt_i_int64()
            • PL_cvt_i_uint64()
            • PL_cvt_i_size_t()
          • Serializing and deserializing Prolog terms
          • BLOBS: Using atoms to store arbitrary binary data
          • Exchanging GMP numbers
          • Calling Prolog from C
          • Discarding Data
          • String buffering
          • Foreign Code and Modules
          • Prolog exceptions in foreign code
          • Catching Signals (Software Interrupts)
          • Miscellaneous
          • Errors and warnings
          • Environment Control from Foreign Code
          • Querying Prolog
          • Registering Foreign Predicates
          • Foreign Code Hooks
          • Storing foreign data
          • Embedding SWI-Prolog in other applications
    • Packages

12.4.7 Foreign language wrapper support functions

In addition to the functions described in section 12.4.3.2, there is a family of functions that is used for automatic generation of wrapper functions, for example using the Prolog library library(qpforeign) that provides a Quintus/SICStus compatible foreign language interface.

The PL_cvt_i_*() family of functions is suitable for use with a _Generic selector or C++ overloading.216_Generic needs to take into account that there's no bool type in C but there is in C++. An overloaded integer() method is provided in the C++ interface.

Note that the documentation on this API is incomplete. Also note that many of these functions are equivalent to the PL_get_*_ex() functions described in section 12.4.6.

int PL_cvt_i_bool(term_t p, int *c)
Equivalent to PL_get_bool_ex(). Note that the pointer is to an int because C has no bool type. The return value is either 0 or 1.
int PL_cvt_i_char(term_t p, char *c)
int PL_cvt_i_schar(term_t p, signed char *c)
int PL_cvt_i_uchar(term_t p, unsigned char *c)
int PL_cvt_i_short(term_t p, short *s)
int PL_cvt_i_ushort(term_t p, unsigned short *s)
int PL_cvt_i_int(term_t p, int *c)
int PL_cvt_i_uint(term_t p, unsigned int *c)
int PL_cvt_i_long(term_t p, long *c)
int PL_cvt_i_ulong(term_t p, unsigned long *c)
int PL_cvt_i_llong(term_t p, long long *c)
int PL_cvt_i_ullong(term_t p, unsigned long long *c)
int PL_cvt_i_int32(term_t p, int32_t *c)
int PL_cvt_i_uint32(term_t p, uint32_t *c)
int PL_cvt_i_int64(term_t p, int64_t *c)
int PL_cvt_i_uint64(term_t p, uint64_t *c)
int PL_cvt_i_size_t(term_t p, size_t *c)
Convert a Prolog integer into a C integer of the specified size. Generate an exception and return FALSE if the conversion is impossible because the Prolog term is not an integer or the C type cannot represent the value of the Prolog integer.