text: // C++ informative line for the emacs editor: -*- C++ -*-
  /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
   * Copyright by The HDF Group.                                               *
   * Copyright by the Board of Trustees of the University of Illinois.         *
   * All rights reserved.                                                      *
   *                                                                           *
   * This file is part of HDF5.  The full HDF5 copyright notice, including     *
   * terms governing use, modification, and redistribution, is contained in    *
   * the files COPYING and Copyright.html.  COPYING can be found at the root   *
   * of the source code distribution tree; Copyright.html can be found at the  *
   * root level of an installed copy of the electronic HDF5 document set and   *
   * is linked from the top-level documents page.  It can also be found at     *
   * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
   * access to either file, you may request a copy from help@hdfgroup.org.     *
   * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
  
  #ifndef __H5PredType_H
  #define __H5PredType_H
  
  #ifndef H5_NO_NAMESPACE
  namespace H5 {
  #endif
  
  /*! \class PredType
      \brief Class PredType holds the definition of all the HDF5 predefined
      datatypes.
  
      These types can only be made copy of, not created by H5Tcreate or
      closed by H5Tclose.  They are treated as constants.
  */
  class H5_DLLCPP PredType : public AtomType {
     public:
  	///\brief Returns this class name.
  	virtual H5std_string fromClass () const { return("PredType"); }
  
  	// Makes a copy of the predefined type and stores the new
  	// id in the left hand side object.
  	PredType& operator=( const PredType& rhs );
  
  	// Copy constructor - makes copy of the original object
  	PredType( const PredType& original );
  
  	// Noop destructor
  	virtual ~PredType();
  
  	/*! \brief This dummy function do not inherit from DataType - it will
  	    throw a DataTypeIException if invoked.
  	*/
  	void commit(H5Location& loc, const H5std_string& name );
  	/*! \brief This dummy function do not inherit from DataType - it will
  	    throw a DataTypeIException if invoked.
  	*/
  	void commit(H5Location& loc, const char* name );
  	/*! \brief This dummy function do not inherit from DataType - it will
  	    throw a DataTypeIException if invoked.
  	*/
  	bool committed();
  
  	///\brief PredType constants
  	static const PredType& STD_I8BE;
  	static const PredType& STD_I8LE;
  	static const PredType& STD_I16BE;
  	static const PredType& STD_I16LE;
  	static const PredType& STD_I32BE;
  	static const PredType& STD_I32LE;
  	static const PredType& STD_I64BE;
  	static const PredType& STD_I64LE;
  	static const PredType& STD_U8BE;
  	static const PredType& STD_U8LE;
  	static const PredType& STD_U16BE;
  	static const PredType& STD_U16LE;
  	static const PredType& STD_U32BE;
  	static const PredType& STD_U32LE;
  	static const PredType& STD_U64BE;
  	static const PredType& STD_U64LE;
  	static const PredType& STD_B8BE;
  	static const PredType& STD_B8LE;
  	static const PredType& STD_B16BE;
  	static const PredType& STD_B16LE;
  	static const PredType& STD_B32BE;
  	static const PredType& STD_B32LE;
  	static const PredType& STD_B64BE;
  	static const PredType& STD_B64LE;
  	static const PredType& STD_REF_OBJ;
  	static const PredType& STD_REF_DSETREG;
  
  	static const PredType& C_S1;
  	static const PredType& FORTRAN_S1;
  
  	static const PredType& IEEE_F32BE;
  	static const PredType& IEEE_F32LE;
  	static const PredType& IEEE_F64BE;
  	static const PredType& IEEE_F64LE;
  
  	static const PredType& UNIX_D32BE;
  	static const PredType& UNIX_D32LE;
  	static const PredType& UNIX_D64BE;
  	static const PredType& UNIX_D64LE;
  
  	static const PredType& INTEL_I8;
  	static const PredType& INTEL_I16;
  	static const PredType& INTEL_I32;
  	static const PredType& INTEL_I64;
  	static const PredType& INTEL_U8;
  	static const PredType& INTEL_U16;
  	static const PredType& INTEL_U32;
  	static const PredType& INTEL_U64;
  	static const PredType& INTEL_B8;
  	static const PredType& INTEL_B16;
  	static const PredType& INTEL_B32;
  	static const PredType& INTEL_B64;
  	static const PredType& INTEL_F32;
  	static const PredType& INTEL_F64;
  
  	static const PredType& ALPHA_I8;
  	static const PredType& ALPHA_I16;
  	static const PredType& ALPHA_I32;
  	static const PredType& ALPHA_I64;
  	static const PredType& ALPHA_U8;
  	static const PredType& ALPHA_U16;
  	static const PredType& ALPHA_U32;
  	static const PredType& ALPHA_U64;
  	static const PredType& ALPHA_B8;
  	static const PredType& ALPHA_B16;
  	static const PredType& ALPHA_B32;
  	static const PredType& ALPHA_B64;
  	static const PredType& ALPHA_F32;
  	static const PredType& ALPHA_F64;
  
  	static const PredType& MIPS_I8;
  	static const PredType& MIPS_I16;
  	static const PredType& MIPS_I32;
  	static const PredType& MIPS_I64;
  	static const PredType& MIPS_U8;
  	static const PredType& MIPS_U16;
  	static const PredType& MIPS_U32;
  	static const PredType& MIPS_U64;
  	static const PredType& MIPS_B8;
  	static const PredType& MIPS_B16;
  	static const PredType& MIPS_B32;
  	static const PredType& MIPS_B64;
  	static const PredType& MIPS_F32;
  	static const PredType& MIPS_F64;
  
  	static const PredType& NATIVE_CHAR;
  	static const PredType& NATIVE_SCHAR;
  	static const PredType& NATIVE_UCHAR;
  	static const PredType& NATIVE_SHORT;
  	static const PredType& NATIVE_USHORT;
  	static const PredType& NATIVE_INT;
  	static const PredType& NATIVE_UINT;
  	static const PredType& NATIVE_LONG;
  	static const PredType& NATIVE_ULONG;
  	static const PredType& NATIVE_LLONG;
  	static const PredType& NATIVE_ULLONG;
  	static const PredType& NATIVE_FLOAT;
  	static const PredType& NATIVE_DOUBLE;
  	static const PredType& NATIVE_LDOUBLE;
  	static const PredType& NATIVE_B8;
  	static const PredType& NATIVE_B16;
  	static const PredType& NATIVE_B32;
  	static const PredType& NATIVE_B64;
  	static const PredType& NATIVE_OPAQUE;
  	static const PredType& NATIVE_HSIZE;
  	static const PredType& NATIVE_HSSIZE;
  	static const PredType& NATIVE_HERR;
  	static const PredType& NATIVE_HBOOL;
  
  	static const PredType& NATIVE_INT8;
  	static const PredType& NATIVE_UINT8;
  	static const PredType& NATIVE_INT16;
  	static const PredType& NATIVE_UINT16;
  	static const PredType& NATIVE_INT32;
  	static const PredType& NATIVE_UINT32;
  	static const PredType& NATIVE_INT64;
  	static const PredType& NATIVE_UINT64;
  
  // LEAST types
  #if H5_SIZEOF_INT_LEAST8_T != 0
  	static const PredType& NATIVE_INT_LEAST8;
  #endif /* H5_SIZEOF_INT_LEAST8_T */
  #if H5_SIZEOF_UINT_LEAST8_T != 0
  	static const PredType& NATIVE_UINT_LEAST8;
  #endif /* H5_SIZEOF_UINT_LEAST8_T */
  
  #if H5_SIZEOF_INT_LEAST16_T != 0
  	static const PredType& NATIVE_INT_LEAST16;
  #endif /* H5_SIZEOF_INT_LEAST16_T */
  #if H5_SIZEOF_UINT_LEAST16_T != 0
  	static const PredType& NATIVE_UINT_LEAST16;
  #endif /* H5_SIZEOF_UINT_LEAST16_T */
  
  #if H5_SIZEOF_INT_LEAST32_T != 0
  	static const PredType& NATIVE_INT_LEAST32;
  #endif /* H5_SIZEOF_INT_LEAST32_T */
  #if H5_SIZEOF_UINT_LEAST32_T != 0
  	static const PredType& NATIVE_UINT_LEAST32;
  #endif /* H5_SIZEOF_UINT_LEAST32_T */
  
  #if H5_SIZEOF_INT_LEAST64_T != 0
  	static const PredType& NATIVE_INT_LEAST64;
  #endif /* H5_SIZEOF_INT_LEAST64_T */
  #if H5_SIZEOF_UINT_LEAST64_T != 0
  	static const PredType& NATIVE_UINT_LEAST64;
  #endif /* H5_SIZEOF_UINT_LEAST64_T */
  
  // FAST types
  #if H5_SIZEOF_INT_FAST8_T != 0
  	static const PredType& NATIVE_INT_FAST8;
  #endif /* H5_SIZEOF_INT_FAST8_T */
  #if H5_SIZEOF_UINT_FAST8_T != 0
  	static const PredType& NATIVE_UINT_FAST8;
  #endif /* H5_SIZEOF_UINT_FAST8_T */
  
  #if H5_SIZEOF_INT_FAST16_T != 0
  	static const PredType& NATIVE_INT_FAST16;
  #endif /* H5_SIZEOF_INT_FAST16_T */
  #if H5_SIZEOF_UINT_FAST16_T != 0
  	static const PredType& NATIVE_UINT_FAST16;
  #endif /* H5_SIZEOF_UINT_FAST16_T */
  
  #if H5_SIZEOF_INT_FAST32_T != 0
  	static const PredType& NATIVE_INT_FAST32;
  #endif /* H5_SIZEOF_INT_FAST32_T */
  #if H5_SIZEOF_UINT_FAST32_T != 0
  	static const PredType& NATIVE_UINT_FAST32;
  #endif /* H5_SIZEOF_UINT_FAST32_T */
  
  #if H5_SIZEOF_INT_FAST64_T != 0
  	static const PredType& NATIVE_INT_FAST64;
  #endif /* H5_SIZEOF_INT_FAST64_T */
  #if H5_SIZEOF_UINT_FAST64_T != 0
  	static const PredType& NATIVE_UINT_FAST64;
  #endif /* H5_SIZEOF_UINT_FAST64_T */
  
  #ifndef DOXYGEN_SHOULD_SKIP_THIS
  
          // Deletes the PredType global constants
          static void deleteConstants();
  
          // Dummy constant
          static const PredType& PREDTYPE_CONST; // dummy constant
  
     protected:
  	// Default constructor
  	PredType();
  
  	// Creates a pre-defined type using an HDF5 pre-defined constant
  	PredType( const hid_t predtype_id );  // used by the library only
  
     private:
          // Activates the creation of the PredType global constants
          static PredType* getPredTypes();
  
          // Dynamically allocates PredType global constants
          static void makePredTypes();
  
          // Dummy constant
          static PredType* PREDTYPE_CONST_;
  
          // Declaration of pointers to constants
          static PredType* STD_I8BE_;
          static PredType* STD_I8LE_;
          static PredType* STD_I16BE_;
          static PredType* STD_I16LE_;
          static PredType* STD_I32BE_;
          static PredType* STD_I32LE_;
          static PredType* STD_I64BE_;
          static PredType* STD_I64LE_;
          static PredType* STD_U8BE_;
          static PredType* STD_U8LE_;
          static PredType* STD_U16BE_;
          static PredType* STD_U16LE_;
          static PredType* STD_U32BE_;
          static PredType* STD_U32LE_;
          static PredType* STD_U64BE_;
          static PredType* STD_U64LE_;
          static PredType* STD_B8BE_;
          static PredType* STD_B8LE_;
          static PredType* STD_B16BE_;
          static PredType* STD_B16LE_;
          static PredType* STD_B32BE_;
          static PredType* STD_B32LE_;
          static PredType* STD_B64BE_;
          static PredType* STD_B64LE_;
          static PredType* STD_REF_OBJ_;
          static PredType* STD_REF_DSETREG_;
  
          static PredType* C_S1_;
          static PredType* FORTRAN_S1_;
  
          static PredType* IEEE_F32BE_;
          static PredType* IEEE_F32LE_;
          static PredType* IEEE_F64BE_;
          static PredType* IEEE_F64LE_;
  
          static PredType* UNIX_D32BE_;
          static PredType* UNIX_D32LE_;
          static PredType* UNIX_D64BE_;
          static PredType* UNIX_D64LE_;
  
          static PredType* INTEL_I8_;
          static PredType* INTEL_I16_;
          static PredType* INTEL_I32_;
          static PredType* INTEL_I64_;
          static PredType* INTEL_U8_;
          static PredType* INTEL_U16_;
          static PredType* INTEL_U32_;
          static PredType* INTEL_U64_;
          static PredType* INTEL_B8_;
          static PredType* INTEL_B16_;
          static PredType* INTEL_B32_;
          static PredType* INTEL_B64_;
          static PredType* INTEL_F32_;
          static PredType* INTEL_F64_;
  
          static PredType* ALPHA_I8_;
          static PredType* ALPHA_I16_;
          static PredType* ALPHA_I32_;
          static PredType* ALPHA_I64_;
          static PredType* ALPHA_U8_;
          static PredType* ALPHA_U16_;
          static PredType* ALPHA_U32_;
          static PredType* ALPHA_U64_;
          static PredType* ALPHA_B8_;
          static PredType* ALPHA_B16_;
          static PredType* ALPHA_B32_;
          static PredType* ALPHA_B64_;
          static PredType* ALPHA_F32_;
          static PredType* ALPHA_F64_;
  
          static PredType* MIPS_I8_;
          static PredType* MIPS_I16_;
          static PredType* MIPS_I32_;
          static PredType* MIPS_I64_;
          static PredType* MIPS_U8_;
          static PredType* MIPS_U16_;
          static PredType* MIPS_U32_;
          static PredType* MIPS_U64_;
          static PredType* MIPS_B8_;
          static PredType* MIPS_B16_;
          static PredType* MIPS_B32_;
          static PredType* MIPS_B64_;
          static PredType* MIPS_F32_;
          static PredType* MIPS_F64_;
  
          static PredType* NATIVE_CHAR_;
          static PredType* NATIVE_SCHAR_;
          static PredType* NATIVE_UCHAR_;
          static PredType* NATIVE_SHORT_;
          static PredType* NATIVE_USHORT_;
          static PredType* NATIVE_INT_;
          static PredType* NATIVE_UINT_;
          static PredType* NATIVE_LONG_;
          static PredType* NATIVE_ULONG_;
          static PredType* NATIVE_LLONG_;
          static PredType* NATIVE_ULLONG_;
          static PredType* NATIVE_FLOAT_;
          static PredType* NATIVE_DOUBLE_;
          static PredType* NATIVE_LDOUBLE_;
          static PredType* NATIVE_B8_;
          static PredType* NATIVE_B16_;
          static PredType* NATIVE_B32_;
          static PredType* NATIVE_B64_;
          static PredType* NATIVE_OPAQUE_;
          static PredType* NATIVE_HSIZE_;
          static PredType* NATIVE_HSSIZE_;
          static PredType* NATIVE_HERR_;
          static PredType* NATIVE_HBOOL_;
  
          static PredType* NATIVE_INT8_;
          static PredType* NATIVE_UINT8_;
          static PredType* NATIVE_INT16_;
          static PredType* NATIVE_UINT16_;
          static PredType* NATIVE_INT32_;
          static PredType* NATIVE_UINT32_;
          static PredType* NATIVE_INT64_;
          static PredType* NATIVE_UINT64_;
  
  // LEAST types
  #if H5_SIZEOF_INT_LEAST8_T != 0
          static PredType* NATIVE_INT_LEAST8_;
  #endif /* H5_SIZEOF_INT_LEAST8_T */
  #if H5_SIZEOF_UINT_LEAST8_T != 0
          static PredType* NATIVE_UINT_LEAST8_;
  #endif /* H5_SIZEOF_UINT_LEAST8_T */
  
  #if H5_SIZEOF_INT_LEAST16_T != 0
          static PredType* NATIVE_INT_LEAST16_;
  #endif /* H5_SIZEOF_INT_LEAST16_T */
  #if H5_SIZEOF_UINT_LEAST16_T != 0
          static PredType* NATIVE_UINT_LEAST16_;
  #endif /* H5_SIZEOF_UINT_LEAST16_T */
  
  #if H5_SIZEOF_INT_LEAST32_T != 0
          static PredType* NATIVE_INT_LEAST32_;
  #endif /* H5_SIZEOF_INT_LEAST32_T */
  #if H5_SIZEOF_UINT_LEAST32_T != 0
          static PredType* NATIVE_UINT_LEAST32_;
  #endif /* H5_SIZEOF_UINT_LEAST32_T */
  
  #if H5_SIZEOF_INT_LEAST64_T != 0
          static PredType* NATIVE_INT_LEAST64_;
  #endif /* H5_SIZEOF_INT_LEAST64_T */
  #if H5_SIZEOF_UINT_LEAST64_T != 0
          static PredType* NATIVE_UINT_LEAST64_;
  #endif /* H5_SIZEOF_UINT_LEAST64_T */
  
  // FAST types
  #if H5_SIZEOF_INT_FAST8_T != 0
          static PredType* NATIVE_INT_FAST8_;
  #endif /* H5_SIZEOF_INT_FAST8_T */
  #if H5_SIZEOF_UINT_FAST8_T != 0
          static PredType* NATIVE_UINT_FAST8_;
  #endif /* H5_SIZEOF_UINT_FAST8_T */
  
  #if H5_SIZEOF_INT_FAST16_T != 0
          static PredType* NATIVE_INT_FAST16_;
  #endif /* H5_SIZEOF_INT_FAST16_T */
  #if H5_SIZEOF_UINT_FAST16_T != 0
          static PredType* NATIVE_UINT_FAST16_;
  #endif /* H5_SIZEOF_UINT_FAST16_T */
  
  #if H5_SIZEOF_INT_FAST32_T != 0
          static PredType* NATIVE_INT_FAST32_;
  #endif /* H5_SIZEOF_INT_FAST32_T */
  #if H5_SIZEOF_UINT_FAST32_T != 0
          static PredType* NATIVE_UINT_FAST32_;
  #endif /* H5_SIZEOF_UINT_FAST32_T */
  
  #if H5_SIZEOF_INT_FAST64_T != 0
          static PredType* NATIVE_INT_FAST64_;
  #endif /* H5_SIZEOF_INT_FAST64_T */
  #if H5_SIZEOF_UINT_FAST64_T != 0
          static PredType* NATIVE_UINT_FAST64_;
  #endif /* H5_SIZEOF_UINT_FAST64_T */
          // End of Declaration of pointers
  
  #endif // DOXYGEN_SHOULD_SKIP_THIS
  
  };
  #ifndef H5_NO_NAMESPACE
  }
  #endif
  #endif // __H5PredType_H
  