:- protocol(classp).


	:- info([
		version is 1.0,
		authors is 'Paulo Moura',
		date is 2000/7/24,
		comment is 'Default protocol for all instantiable classes.']).


	:- public(new/1).

	:- mode(new(?object), zero_or_one).

	:- info(new/1, [
		comment is 'Creates a new instance.',
		argnames is ['Instance']]).


	:- public(new/2).

	:- mode(new(?object, +list), zero_or_one).

	:- info(new/2, [
		comment is 'Creates a new instance using a list of initialization options.',
		argnames is ['Instance', 'Options']]).


	:- public(clone/2).

	:- mode(clone(+object, ?object), zero_or_one).

	:- info(clone/2, [
		comment is 'Clones an instance.',
		argnames is ['Instance', 'Clone']]).


	:- public(instance_base_name/1).

	:- mode(instance_base_name(-atom), one).

	:- info(instance_base_name/1, [
		comment is 'Base name to generated new instance names.',
		argnames is ['Name']]).


	:- public(delete/1).

	:- mode(delete(+object), zero_or_one).

	:- info(delete/1, [
		comment is 'Deletes a dynamic instance.',
		argnames is ['Instance']]).


	:- public(delete/2).

	:- mode(delete(+object, +list), zero_or_one).

	:- info(delete/2, [
		comment is 'Deletes a dynamic instance using a list of deleting options.',
		argnames is ['Instance', 'Options']]).


	:- public(delete_all/0).

	:- mode(delete_all, zero_or_one).

	:- info(delete_all/0, [
		comment is 'Deletes all dynamic instances. Fails if some dynamic instance can not be deleted.']).


	:- public(delete_all/1).

	:- mode(delete_all(+list), zero_or_one).

	:- info(delete_all/1, [
		comment is 'Deletes all dynamic instances using a list of deleting options. Fails if some dynamic instance can not be deleted.',
		argnames is ['Options']]).


	:- public(equals/2).

	:- mode(equals(+object, +object), zero_or_one).

	:- info(equals/2, [
		comment is 'The two instances represents the same object for some definition of equality.',
		argnames is ['Instance1', 'Instance2']]).


:- end_protocol.