The constructors are defined as subclasses of PlTerm
,
with a name that reflects the Prolog type of what is being created
(e.g., PlTerm_atom
creates an atom; PlTerm_string
creates a Prolog string). All of the constructors are "explicit" because
implicit creation of PlTerm
objects can lead to subtle and
difficult to debug errors.
- PlTerm :: PlTerm()
- Creates a new initialised "null" term (holding a Prolog variable).
- PlTerm_term_t :: PlTerm_term_t(term_t t)
- Converts between the C-interface and the C++ interface by turning the
term-reference into an instance of
PlTerm
. Note that, being
a lightweight class, this is a no-op at the machine-level!
- PlTerm_atom :: PlTerm_atom(const char *text)
- Creates a term-references holding a Prolog atom representing text.
- PlTerm_atom :: PlTerm_atom(const wchar_t *text)
- Creates a term-references holding a Prolog atom representing text.
- PlTerm_atom :: PlTerm_atom(const PlAtom &atom)
- Creates a term-references holding a Prolog atom from an atom-handle.
- PlTerm_int :: PlTerm_int(long n)
- Creates a term-references holding a Prolog integer representing n.
- PlTerm_int :: PlTerm_int(int64_t n)
- Creates a term-references holding a Prolog integer representing n
(up to 64 bits signed).
- PlTerm_int :: PlTerm_int(uint64_t n)
- Creates a term-references holding a Prolog integer representing n
(up to 64 bits unsigned).
- PlTerm_float :: PlTerm_float(double f)
- Creates a term-references holding a Prolog float representing f.
- PlTerm_pointer :: PlTerm_pointer(void *ptr)
- Creates a term-references holding a Prolog pointer. A pointer is
represented in Prolog as a mangled integer. The mangling is designed to
make most pointers fit into a tagged-integer. Any valid pointer
can be represented. This mechanism can be used to represent pointers to
C++ objects in Prolog. Please note that‘MyClass' should define
conversion to and from
void *
. Also note that in general blobs
are a better way of doing this (see the section on blobs in the
Foreign Language Interface part of the SWI-Prolog manual).
PREDICATE(make_my_object, 1)
{ auto myobj = new MyClass();
return A1.unify_pointer(myobj);
}
PREDICATE(my_object_contents, 2)
{ auto myobj = static_cast<MyClass*>(A1.pointer());
return A2.unify_string(myobj->contents);
}
PREDICATE(free_my_object, 1)
{ auto myobj = static_cast<MyClass*>(A1.pointer());
delete myobj;
return true;
}