/*****************************************************************************
* Definitions, visible to others, of the dynamic allocator module.	     *
*									     *
* Written by:  Gershon Elber				Ver 0.2, Mar. 1990   *
*****************************************************************************/

#ifndef	ALLOCATE_GH
#define	ALLOCATE_GH

#include "iritprsr.h"
#include "cagd_lib.h"

IPVertexStruct *IPAllocVertex(ByteType Count, ByteType Tags,
				IPPolygonStruct *PAdj, IPVertexStruct *Pnext);
IPPolygonStruct *IPAllocPolygon(ByteType Count, ByteType Tags,
				IPVertexStruct *V, IPPolygonStruct *Pnext);
IPObjectStruct *IPAllocObject(char *Name, IPObjStructType ObjType,
						 IPObjectStruct *Pnext);
void IPFreeVertex(IPVertexStruct *V);
void IPFreePolygon(IPPolygonStruct *P);
void IPFreeObject(IPObjectStruct *O);
void IPFreeVertexList(IPVertexStruct *VFirst);
void IPFreePolygonList(IPPolygonStruct *PPoly);
void IPFreeObjectList(IPObjectStruct *O);

int ListObjectLength(IPObjectStruct *PObj);
void ListObjectInsert(IPObjectStruct *PObjList, int Index,
						     IPObjectStruct *PObjItem);
IPObjectStruct *ListObjectGet(IPObjectStruct *PObjList, int Index);
void ReallocNewTypeObject(IPObjectStruct *PObj, IPObjStructType ObjType);

IPObjectStruct *GenPolyObject(char *Name, IPPolygonStruct *Pl,
							IPObjectStruct *Pnext);
IPObjectStruct *GenPOLYObject(IPPolygonStruct *Pl);
IPObjectStruct *GenCrvObject(char *Name, CagdCrvStruct *Crv,
							IPObjectStruct *Pnext);
IPObjectStruct *GenCRVObject(CagdCrvStruct *Crv);
IPObjectStruct *GenSrfObject(char *Name, CagdSrfStruct *Srf,
							IPObjectStruct *Pnext);
IPObjectStruct *GenSRFObject(CagdSrfStruct *Srf);
IPObjectStruct *GenCtlPtObject(char *Name, CagdPointType PtType,
		CagdRType *CagdCoords, RealType *Coords, IPObjectStruct *Pnext);
IPObjectStruct *GenCTLPTObject(CagdPointType PtType, CagdRType *CagdCoords,
							RealType *Coords);
IPObjectStruct *GenNumObject(char *Name, RealType *R, IPObjectStruct *Pnext);
IPObjectStruct *GenNUMObject(RealType *R);
IPObjectStruct *GenNUMValObject(RealType R);
IPObjectStruct *GenPtObject(char *Name, RealType *Pt0, RealType *Pt1,
					RealType *Pt2, IPObjectStruct *Pnext);
IPObjectStruct *GenPTObject(RealType *Pt0, RealType *Pt1, RealType *Pt2);
IPObjectStruct *GenVecObject(char *Name, RealType *Vec0, RealType *Vec1,
					RealType *Vec2, IPObjectStruct *Pnext);
IPObjectStruct *GenVECObject(RealType *Vec0, RealType *Vec1, RealType *Vec2);
IPObjectStruct *GenPlaneObject(char *Name, RealType *Plane0, RealType *Plane1,
		    RealType *Plane2, RealType *Plane3, IPObjectStruct *Pnext);
IPObjectStruct *GenPLANEObject(RealType *Plane0, RealType *Plane1,
					   RealType *Plane2, RealType *Plane3);
IPObjectStruct *GenMatObject(char *Name, MatrixType Mat, IPObjectStruct *Pnext);
IPObjectStruct *GenMATObject(MatrixType Mat);

IPObjectStruct *CopyObject(IPObjectStruct *Dest, IPObjectStruct *Src,
								int CopyAll);

IPObjectStruct *CopyObjectList(IPObjectStruct *PObjs, int CopyAll);
IPPolygonStruct *CopyPolygonList(IPPolygonStruct *Src);
IPVertexStruct *CopyVertexList(IPVertexStruct *Src);

#endif	/* ALLOCATE_GH */
