#ifndef ZFP_VERSION_H
#define ZFP_VERSION_H

/* library version information */
#define ZFP_VERSION_MAJOR 1   /* library major version number */
#define ZFP_VERSION_MINOR 0   /* library minor version number */
#define ZFP_VERSION_PATCH 0   /* library patch version number */
#define ZFP_VERSION_TWEAK 0   /* library tweak version number */

/* codec version number (see also zfp_codec_version) */
#define ZFP_CODEC 5

/* stringification */
#define _zfp_str_(x) # x
#define _zfp_str(x) _zfp_str_(x)

/* macro for generating an integer version identifier */
#define ZFP_MAKE_VERSION(major, minor, patch, tweak) \
  (((major) << 12) + \
   ((minor) << 8) + \
   ((patch) << 4) + \
   ((tweak) << 0))

/* macros for generating a version string */
#define ZFP_MAKE_VERSION_STRING(major, minor, patch) \
  _zfp_str(major) "." \
  _zfp_str(minor) "." \
  _zfp_str(patch)

#define ZFP_MAKE_FULLVERSION_STRING(major, minor, patch, tweak) \
  _zfp_str(major) "." \
  _zfp_str(minor) "." \
  _zfp_str(patch) "." \
  _zfp_str(tweak)

/* library version number (see also zfp_library_version) */
#define ZFP_VERSION \
  ZFP_MAKE_VERSION(ZFP_VERSION_MAJOR, ZFP_VERSION_MINOR, ZFP_VERSION_PATCH, ZFP_VERSION_TWEAK)

/* library version string (see also zfp_version_string) */
#if ZFP_VERSION_TWEAK == 0
  #define ZFP_VERSION_STRING \
    ZFP_MAKE_VERSION_STRING(ZFP_VERSION_MAJOR, ZFP_VERSION_MINOR, ZFP_VERSION_PATCH)
#else
  #define ZFP_VERSION_STRING \
    ZFP_MAKE_FULLVERSION_STRING(ZFP_VERSION_MAJOR, ZFP_VERSION_MINOR, ZFP_VERSION_PATCH, ZFP_VERSION_TWEAK)
#endif

#endif
