// $Id: ESMC_Arg.h,v 1.4.4.1 2010/02/05 20:01:03 svasquez Exp $
//
// Earth System Modeling Framework
// Copyright 2002-2010, University Corporation for Atmospheric Research, 
// Massachusetts Institute of Technology, Geophysical Fluid Dynamics 
// Laboratory, University of Michigan, National Centers for Environmental 
// Prediction, Los Alamos National Laboratory, Argonne National Laboratory, 
// NASA Goddard Space Flight Center.
// Licensed under the University of Illinois-NCSA License.
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// This file is part of the pure C public ESMC API
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// ESMC optional arguments include file
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// prevent this file from being read more than once
#ifndef ESMC_Arg_H
#define ESMC_Arg_H

// Bring in the variable argument list macros.
#include <stdarg.h>

// Optional argument identifier datatype.
typedef int ESMCI_ArgID;

// The global optional argument identifier list.
// ESMCI_ArgBaseID is the starting argument identifier for local optional
// argument lists and must be the last identifier listed in the global
// identifier list.  ESMCI_ArgLastID is the global identifier for terminating
// the optional argument list.
enum {
  ESMCI_ArgLastID       = 11235813,
  ESMCI_ArgBaseID       = 1
};

// Macro for casting an optional argument into the appropriate sequence for
// passing to functions.  Each class will use this internal macro in its public
// header to declare user macros for the class specific optional arguments.
#define ESMCI_Arg(ID,ARG)  ((ESMCI_ArgID)ID),(ARG)

// Convenience macro to indicate the end of an optional argument list.
#define ESMC_ArgLast (ESMCI_ArgLastID)

//-----------------------------------------------------------------------------

#endif  // ESMC_Arg_H