--import qvtb : 'platform:/resource/org.eclipse.qvtd.pivot.qvtbase/model/QVTbase.ecore#/';
--import ocl : 'platform:/resource/org.eclipse.ocl.pivot/model/OCL-2.5.oclstdlib';
import ocl : 'platform:/resource/org.eclipse.ocl.pivot/model/Pivot.ecore#/';

library qvtruntimelibrary : qvtrtlib = 'http://www.eclipse.org/qvt/2019/QVTruntimeLibrary'
{
	type PseudoOperations : Class {
		/**
		 * The PseudoOperations::collection(items) pseudo-operation provides items to allow a collection construction to be treated
		 * as an Operation within QVTs.
		 */
		static operation collection(T)(items : ocl::CollectionItem[*]) : ocl::CollectionLiteralExp[1];

		/**
		 * The PseudoOperations::error(elements) pseudo-operation provides parameters to allow an error construction to be treated
		 * as an Operation within QVTs.
		 */
		static operation error(T)(elements : ocl::Element[*]) : ocl::OclVoid[1];

		/**
		 * The PseudoOperations::if(condition, then, else) pseudo-operation provides parameters to allow an IfExp to be treated
		 * as an Operation within QVTs.
		 */
		static operation _'if'(T)(condition : T[?]/*ocl::Boolean[1]*/, _'then' : T[?], _'else' : T[?]) : T[?];

		/**
		 * The PseudoOperations::loop(source, iterators, body) pseudo-operation provides parameters to allow a LoopExp to be treated
		 * as an Operation within QVTs.
		 */
		static operation loop(E)(source : ocl::OCLExpression[1], iterators : E[*], _'body' : ocl::OCLExpression[1]) : ocl::OclAny[?];

		/**
		 * The PseudoOperations::map(parts) pseudo-operation provides parameters to allow a map construction to be treated
		 * as an Operation within QVTs.
		 */
		static operation map(T)(parts : ocl::Property[*]) : ocl::MapLiteralExp[1];

		/**
		 * The PseudoOperations::mapPart(key, value) pseudo-operation provides parameters to allow a MapLiteralPart to be treated
		 * as an Operation within QVTs.
		 */
		static operation mapPart(K,V)(key : K[?], value : V[?]) : ocl::MapLiteralPart[1];

		/**
		 * The PseudoOperations::range(first, last) pseudo-operation provides parameters to allow a CollectionRange to be treated
		 * as an Operation within QVTs.
		 */
		static operation range(T)(first : T[?], last : T[?]) : ocl::CollectionRange[1];

		/**
		 * The PseudoOperations::shadow(parts) pseudo-operation provides parameters to allow a shadow Class construction to be treated
		 * as an Operation within QVTs.
		 */
		static operation shadow(T)(parts : ocl::Property[*]) : ocl::ShadowExp[1];

		/**
		 * The PseudoOperations::tuple(parts) pseudo-operation provides parameters to allow a tuple construction to be treated
		 * as an Operation within QVTs.
		 */
		static operation tuple(T)(parts : ocl::TupleLiteralPart[*]) : ocl::TupleLiteralExp[1];

		/**
		 * The PseudoOperations::type(value) pseudo-operation provides parameters to allow a Type to be treated
		 * as an Operation within QVTs.
		 */
		static operation _'type'(V)(_'type' : V[?]) : ocl::TypeExp[1];
	}
	type Extent : Class {
		property elements : ocl::OrderedSet(ocl::OclElement) opposite extent : Extent[?];
	}
	type Model : TypedModel {}
	type Transformation : Transformation {}
}
