#ifdef __PRIVATE__
//#
//#	File:		Extensn.idl
//#
//#	Contains:	Class definition for ODExtension
//#
//#	Owned by:	Nick Pilch
//#
//#	Copyright:	c 1994 by Apple Computer, Inc., all rights reserved.
//#
//#	Change History (most recent first):
//#
//#		 <6>	 8/28/94	VL		1181298: ODExtension is a subclass of
//#									REfCntObject now.
//#		 <5>	 8/19/94	NP		1181622: Ownership fix.
//#		 <4>	 8/15/94	T 		#1181162 Added BaseRemoved, IsValid &
//#									CheckValid
//#		 <3>	  7/8/94	NP		Fixed InitExtension.
//#		 <2>	 6/23/94	CG		Added functionprefix.
//#		 <1>	  6/8/94	CG		first checked in
//#		 <4>	  6/7/94	RR		Privatise change log
//#
//#	To Do:
//#
#else
//#	Copyright:	c 1993-1994 by Apple Computer, Inc., all rights reserved.
#endif

#ifndef _EXTENSN_
#define _EXTENSN_

#ifndef _REFCTOBJ_
#include "RefCtObj.idl"
#endif

//==============================================================================
// Theory of Operation
//==============================================================================

/*
  ODExtension is the abstract base class from which object extension interfaces
  are derived.  The base class itself has minimal behavior.  It knows which
  object it is an extension of, and how to release resources in itself and in
  its object.  Further behavior should be implemented in derived classes.
*/

//==============================================================================
// Classes defined in this interface
//==============================================================================

interface  ODExtension;

//==============================================================================
// Classes used by this interface
//==============================================================================

//==============================================================================
// ODExtension
//==============================================================================

interface ODExtension : ODRefCntObject
{
   
   void InitExtension(in ODObject base);

   ODObject GetBase();
   
   void BaseRemoved();
   
   ODBoolean IsValid();
   
   void CheckValid();

#ifdef __SOMIDL__
	implementation
	{
  	functionprefix = ODExtension;

	override:
		somInit,
		somUninit;
		
	releaseorder:
		InitExtension,
		GetBase,
  		BaseRemoved,
   		IsValid,
   		CheckValid;
		
	#ifdef __PRIVATE__
	  ODObject  fBase;
	#endif
	
	};
#endif
};

#endif // _EXTENSN_
