%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Support for load-on-demand using SWI Prolog 6.6.0 and later versions
% Last updated on June 25, 2017
%
% This file is part of Logtalk
% SPDX-FileCopyrightText: 1998-2023 Paulo Moura
%
% Licensed under the Apache License, Version 2.0 (the "License");
% you may not use this file except in compliance with the License.
% You may obtain a copy of the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS,
% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
% See the License for the specific language governing permissions and
% limitations under the License.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
:- module(logtalk, [
'::'/2,
'<<'/2,
'{}'/1,
op(600, xfy, ::), op(600, fy, ::), op(600, fy, ^^),
op(200, fy, (+)), op(200, fy, (?)), op(200, fy, (@)), op(200, fy, (-)),
op(200, fy, ++), op(200, fy, --),
% compiling and loading predicates
logtalk_compile/1,
logtalk_compile/2,
logtalk_load/1,
logtalk_load/2,
logtalk_make/0,
logtalk_make/1,
logtalk_load_context/2,
logtalk_library_path/2,
% entity properties
protocol_property/2,
category_property/2,
object_property/2,
% entity enumeration
current_protocol/1,
current_category/1,
current_object/1,
% entity creation predicates
create_object/4,
create_category/4,
create_protocol/3,
% entity abolishing predicates
abolish_object/1,
abolish_category/1,
abolish_protocol/1,
% entity relations
implements_protocol/2,
implements_protocol/3,
imports_category/2,
imports_category/3,
instantiates_class/2,
instantiates_class/3,
specializes_class/2,
specializes_class/3,
extends_protocol/2,
extends_protocol/3,
extends_object/2,
extends_object/3,
extends_category/2,
extends_category/3,
complements_object/2,
% protocol conformance
conforms_to_protocol/2,
conforms_to_protocol/3,
% events
abolish_events/5,
define_events/5,
current_event/5,
% flags
current_logtalk_flag/2,
set_logtalk_flag/2,
create_logtalk_flag/3,
% multi-threading predicates
threaded/1,
threaded_call/2,
threaded_call/1,
threaded_once/2,
threaded_once/1,
threaded_ignore/1,
threaded_exit/2,
threaded_exit/1,
threaded_peek/2,
threaded_peek/1,
threaded_wait/1,
threaded_notify/1,
% threaded engines predicates
threaded_engine_create/3,
threaded_engine_destroy/1,
threaded_engine_self/1,
threaded_engine/1,
threaded_engine_next/2,
threaded_engine_next_reified/2,
threaded_engine_yield/1,
threaded_engine_post/2,
threaded_engine_fetch/1
]).
goal_expansion(op(A,B,C), op(A,B,user:C)) :-
\+ functor(C, (:), 2).
goal_expansion(current_op(A,B,C), current_op(A,B,user:C)) :-
\+ functor(C, (:), 2).
:- prolog_load_context(directory, Directory),
atom_concat(Directory, '/../logtalk-3.77.0/', Location),
setenv('LOGTALKHOME', Location),
setenv('LOGTALKUSER', Location),
load_files('../logtalk-3.77.0/integration/logtalk_swi.pl').