###
# Modern Albufeira Prolog Interpreter
#
# Warranty & Liability
# To the extent permitted by applicable law and unless explicitly
# otherwise agreed upon, XLOG Technologies AG makes no warranties
# regarding the provided information. XLOG Technologies AG assumes
# no liability that any problems might be solved with the information
# provided by XLOG Technologies AG.
#
# Rights & License
# All industrial property rights regarding the information - copyright
# and patent rights in particular - are the sole property of XLOG
# Technologies AG. If the company was not the originator of some
# excerpts, XLOG Technologies AG has at least obtained the right to
# reproduce, change and translate the information.
#
# Reproduction is restricted to the whole unaltered document. Reproduction
# of the information is only allowed for non-commercial uses. Selling,
# giving away or letting of the execution of the library is prohibited.
# The library can be distributed as part of your applications and libraries
# for execution provided this comment remains unchanged.
#
# Restrictions
# Only to be distributed with programs that add significant and primary
# functionality to the library. Not to be distributed with additional
# software intended to replace any components of the library.
#
# Trademarks
# Jekejeke is a registered trademark of XLOG Technologies AG.
##

################################################################
# Import Native API                                            #
################################################################

# embedding native API
import nova.store as store
from nova.store import (Clause, add, set, Cache, make_defined,
    set_stage, clear, set_partition, Goal, is_provable)
import nova.machine as machine
from nova.machine import (run, Context,
      is_cache, VOID_ARGS, launch_async, task_async)
from nova.runtime import (
      check_provable)

# engine native API
from nova.store import (is_compound, Item, is_logical, is_stick,
    stack_push, stack_peek, stack_pop, size_peek, check_nonvar)
from nova.machine import ( cont, make_error,
     register_signal, real_time,
     gc_major, is_frozen, Frozen, is_special)
from nova.special import (check_atom, narrow_float,
     make_arithmetic, make_check, check_number, check_integer,
     check_atomic, check_callable, MAX_ARITY,
     check_clause, check_goal, make_special)

# term native API
from nova.store import (Variable, is_variable, Compound,
     is_structure, VAR_MASK_SEEN, deref, copy_term,
     VAR_MASK_STATE, VAR_MASK_SERNO, variable_serno)
from nova.machine import (is_atom, is_number, is_integer,
     unify, bind, exec_deref, is_pending,
     union_find, union_add, union_undo, is_float,
     exec_eval, exec_unify, exec_build)
from nova.special import (objects_list, list_objects,
     walk_vars, atom_integer_encode)
from nova.eval import (equal_term, walk_compute,
     walk_uncompute, Triple, is_triple)

# stream native API
from nova.runtime import (Source, Sink, check_sink, check_source,
     put_atom, stream_close, stream_flush, MASK_DST_FEAT,
     MASK_SRC_AREAD, map_stream_error, get_encoding,
     set_bootbase, file_read_promise, MASK_DST_LINE)

# theatre native API
from nova.theatre import (post, perform, set_to_list,
     perform_async, FFI_FUNC, register)

# specific native API
from nova.machine import (object_equals, int32,
    object_hash_code)

# engine native API
def get_cont():
    return machine.call


def get_mark():
    return machine.trail


def get_engine():
    return store.engine


def get_ctx():
    return machine.ctx


def get_stage():
    return store.stage


def get_gc_enter():
    return machine.gc_enter


def get_gc_time():
    return machine.gc_time


def get_gc_maxinfs():
    return machine.gc_maxinfs
