/*** generated by caesar.adt 5.2 with options -cc "" ***/

#define CAESAR_ADT 5.2

#include <stdio.h>
#include <signal.h>
#include <string.h>
#include <stdlib.h>

#ifndef CAESAR_ADT_ALLOC

#ifndef CAESAR_ADT_GARBAGE_COLLECTION
#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0)
#else
extern char *GC_malloc ();
#endif

#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n     penurie de memoire pour les types abstraits\n     dans l'operation %s\n     implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); }

#endif

#ifndef CAESAR_ADT_ERROR
#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n     cas imprevu (non defini par les equations)\n     dans l'operation %s\n     implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else
#endif

/* LINTLIBRARY */

/* ========================================================================= */

#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT

#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0))

#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT

 /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT);
 /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT ();
 /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT ();

/* ========================================================================= */

typedef unsigned char ADT_BOOL;

#define CAESAR_ADT_SCALAR_ADT_BOOL

#define CAESAR_ADT_BITS_ADT_BOOL : 1

/* ------------------------------------------------------------------------- */

#define ADT_FALSE() ((ADT_BOOL) 0)
#define ADT_TRUE() ((ADT_BOOL) 1)

/* ------------------------------------------------------------------------- */

#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2))

/* ------------------------------------------------------------------------- */

#ifdef CAESAR_ADT_INTERFACE

extern char *CAESAR_ADT_ASCII_ADT_BOOL[];

#else

char *CAESAR_ADT_ASCII_ADT_BOOL[] = {
     "FALSE",
     "TRUE"
};

#endif				/* CAESAR_ADT_INTERFACE */

#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0])

/* ------------------------------------------------------------------------- */

#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE())
#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE())

/* ========================================================================= */

#include "spec_1.t"

#define CAESAR_ADT_INCLUDE_T

/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */

/* (1) the type ADT_NAT implementing sort NAT */
/* (2) the comparison function ADT_CMP_NAT for sort NAT */
/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */
/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */
/* (5) the printing function ADT_PRINT_NAT for sort NAT */
/* (6) the function ADT_N0 implementing constructor 0 */
/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */
/* (8) the function ADT_SUCC implementing constructor SUCC */
/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */
/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */

/* ========================================================================= */

#ifndef ADT_ENUM_FIRST_BOOL
#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE())
#endif

#ifndef ADT_ENUM_NEXT_BOOL
#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE())
#endif

/* ========================================================================= */

#define CAESAR_ADT_CASE_NIL ((unsigned char) 0)
#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1)

typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT {
     unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1;
     union {
	  struct {
	       ADT_NAT CAESAR_ADT_1_ENQUEUE
#ifdef CAESAR_ADT_BITS_ADT_NAT
	            CAESAR_ADT_BITS_ADT_NAT
#endif
	           ;
	       CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE
#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT
	            CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT
#endif
	           ;
	  } CAESAR_ADT_FIELD_ENQUEUE;
     } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT;
} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT;

/* ========================================================================= */

#ifndef CAESAR_ADT_INTERFACE

int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2)
CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1;
CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2;
{
     if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL))
	  return (CAESAR_ADT_1 == CAESAR_ADT_2);
     if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT)
	  return 0;
     switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) {
     case CAESAR_ADT_CASE_NIL:
	  return 1;
     case CAESAR_ADT_CASE_ENQUEUE:
	  return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE);
     }
     /* NOTREACHED */
}

#endif				/* CAESAR_ADT_INTERFACE */

/* ------------------------------------------------------------------------- */

#ifndef CAESAR_ADT_INTERFACE

void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0)
FILE *CAESAR_ADT_FILE;
CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0;
{
     if (CAESAR_ADT_0 == NULL)
	  fprintf (CAESAR_ADT_FILE, "?");
     else {
	  switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) {
	  case CAESAR_ADT_CASE_NIL:
	       fprintf (CAESAR_ADT_FILE, "NIL");
	       break;
	  case CAESAR_ADT_CASE_ENQUEUE:
	       fprintf (CAESAR_ADT_FILE, "ENQUEUE (");
	       ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE);
	       fprintf (CAESAR_ADT_FILE, ", ");
	       CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE);
	       fprintf (CAESAR_ADT_FILE, ")");
	       break;
	  }
     }
}

#endif				/* CAESAR_ADT_INTERFACE */

/* ========================================================================= */

#ifdef CAESAR_ADT_INTERFACE

extern CAESAR_ADT_TYPE_QUEUE_NAT NIL ();

#else

CAESAR_ADT_TYPE_QUEUE_NAT NIL ()
{
     static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL;
     if (CAESAR_ADT_0 == NULL) {
	  CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL");
	  CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL;
     }
     return CAESAR_ADT_0;
}

#endif				/* CAESAR_ADT_INTERFACE */

/* ------------------------------------------------------------------------- */

#ifdef CAESAR_ADT_INTERFACE

extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE ();

#else

CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2)
ADT_NAT CAESAR_ADT_1;
CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2;
{
     CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0;
     CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE");
     CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE;
     CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1;
     CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2;
     return CAESAR_ADT_0;
}

#endif				/* CAESAR_ADT_INTERFACE */

/* ------------------------------------------------------------------------- */

#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL)
#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE)
#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE)
#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE)

/* ------------------------------------------------------------------------- */

/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */

/* ========================================================================= */

 /* forward */ ADT_BOOL ADT_AND ();
 /* forward */ ADT_BOOL ADT_OR ();
 /* forward */ ADT_BOOL ADT_XOR ();
 /* forward */ ADT_BOOL ADT_IFF ();

/* ------------------------------------------------------------------------- */

 /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE ();
 /* forward */ ADT_NAT FIRST ();
 /* forward */ ADT_NAT LAST ();
 /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY ();

/* ========================================================================= */

#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ())

/* ------------------------------------------------------------------------- */

#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))

/* ------------------------------------------------------------------------- */

#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2)

/* ------------------------------------------------------------------------- */

#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2)

/* ========================================================================= */

#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ())

/* ========================================================================= */

#ifndef CAESAR_ADT_INTERFACE

#include "spec_1.f"

#define CAESAR_ADT_INCLUDE_F

#endif				/* CAESAR_ADT_INTERFACE */

/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */

/* (1) the function ADT_PLUS implementing operation + */
/* (2) the function ADT_MULT implementing operation * */
/* (3) the function ADT_POWER implementing operation ** */
/* (4) the function ADT_EQ_NAT implementing operation EQ */
/* (5) the function ADT_NE_NAT implementing operation NE */
/* (6) the function ADT_LT_NAT implementing operation LT */
/* (7) the function ADT_LE_NAT implementing operation LE */
/* (8) the function ADT_GT_NAT implementing operation GT */
/* (9) the function ADT_GE_NAT implementing operation GE */
/* (10) the function ADT_N1 implementing operation 1 */
/* (11) the function ADT_N2 implementing operation 2 */
/* (12) the function ADT_N3 implementing operation 3 */
/* (13) the function ADT_N4 implementing operation 4 */
/* (14) the function ADT_N5 implementing operation 5 */
/* (15) the function ADT_N6 implementing operation 6 */
/* (16) the function ADT_N7 implementing operation 7 */
/* (17) the function ADT_N8 implementing operation 8 */
/* (18) the function ADT_N9 implementing operation 9 */
/* (19) the function ADT_MINUS implementing operation - */
/* (20) the function ADT_DIV implementing operation DIV */
/* (21) the function ADT_MOD implementing operation MOD */
/* (22) the function ADT_EQ_BIS_NAT implementing operation == */
/* (23) the function ADT_NE_BIS_NAT implementing operation <> */
/* (24) the function ADT_LT_BIS_NAT implementing operation < */
/* (25) the function ADT_LE_BIS_NAT implementing operation <= */
/* (26) the function ADT_GT_BIS_NAT implementing operation > */
/* (27) the function ADT_GE_BIS_NAT implementing operation >= */
/* (28) the function ADT_MIN implementing operation MIN */
/* (29) the function ADT_MAX implementing operation MAX */
/* (30) the function ADT_GCD implementing operation GCD */
/* (31) the function ADT_SCM implementing operation SCM */

/* ========================================================================= */

#ifndef CAESAR_ADT_INTERFACE

ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2)
ADT_BOOL CAESAR_ADT_1;
ADT_BOOL CAESAR_ADT_2;
{
     if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2))
	  return CAESAR_ADT_1;
     else
	  return CAESAR_ADT_2;
}

#endif				/* CAESAR_ADT_INTERFACE */

/* ------------------------------------------------------------------------- */

#ifndef CAESAR_ADT_INTERFACE

ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2)
ADT_BOOL CAESAR_ADT_1;
ADT_BOOL CAESAR_ADT_2;
{
     if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2))
	  return CAESAR_ADT_2;
     else
	  return CAESAR_ADT_1;
}

#endif				/* CAESAR_ADT_INTERFACE */

/* ------------------------------------------------------------------------- */

#ifndef CAESAR_ADT_INTERFACE

ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2)
ADT_BOOL CAESAR_ADT_1;
ADT_BOOL CAESAR_ADT_2;
{
     return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)));
}

#endif				/* CAESAR_ADT_INTERFACE */

/* ------------------------------------------------------------------------- */

#ifndef CAESAR_ADT_INTERFACE

ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2)
ADT_BOOL CAESAR_ADT_1;
ADT_BOOL CAESAR_ADT_2;
{
     return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1));
}

#endif				/* CAESAR_ADT_INTERFACE */

/* ========================================================================= */

#ifndef CAESAR_ADT_INTERFACE

CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1)
CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1;
{
     if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1))
	  if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))
	       return NIL ();
	  else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))))
	       return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)));
	  else
	       CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE");
     else
	  CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE");
     /* NOTREACHED */
}

#endif				/* CAESAR_ADT_INTERFACE */

/* ------------------------------------------------------------------------- */

#ifndef CAESAR_ADT_INTERFACE

ADT_NAT FIRST (CAESAR_ADT_1)
CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1;
{
     if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1))
	  if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))
	       return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1);
	  else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))))
	       return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1));
	  else
	       CAESAR_ADT_ERROR ("FIRST [12]", "FIRST");
     else
	  CAESAR_ADT_ERROR ("FIRST [12]", "FIRST");
     /* NOTREACHED */
}

#endif				/* CAESAR_ADT_INTERFACE */

/* ------------------------------------------------------------------------- */

#ifndef CAESAR_ADT_INTERFACE

ADT_NAT LAST (CAESAR_ADT_1)
CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1;
{
     if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1))
	  return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1);
     else
	  CAESAR_ADT_ERROR ("LAST [13]", "LAST");
     /* NOTREACHED */
}

#endif				/* CAESAR_ADT_INTERFACE */

/* ------------------------------------------------------------------------- */

#ifndef CAESAR_ADT_INTERFACE

CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2)
ADT_NAT CAESAR_ADT_1;
CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2;
{
     if (CAESAR_ADT_is_NIL (CAESAR_ADT_2))
	  return CAESAR_ADT_2;
     else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2)))
	  return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2));
     else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2)))
	  return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)));
     else
	  CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY");
     /* NOTREACHED */
}

#endif				/* CAESAR_ADT_INTERFACE */

/* ========================================================================= */

#ifndef CAESAR_ADT_INTERFACE

void CAESAR_ADT_INIT ()
{
}

#endif				/* CAESAR_ADT_INTERFACE */

/* ========================================================================= */