#! /bin/sh
#
# LDASTools frameCPP - A library implementing the LIGO/Virgo frame specification
#
# Copyright (C) 2018 California Institute of Technology
#
# LDASTools frameCPP is free software; you may redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 (GPLv2) of the
# License or at your discretion, any later version.
#
# LDASTools frameCPP is distributed in the hope that it will be useful, but
# without any warranty or even the implied warranty of merchantability
# or fitness for a particular purpose. See the GNU General Public
# License (GPLv2) for more details.
#
# Neither the names of the California Institute of Technology (Caltech),
# The Massachusetts Institute of Technology (M.I.T), The Laser
# Interferometer Gravitational-Wave Observatory (LIGO), nor the names
# of its contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# You should have received a copy of the licensing terms for this
# software included in the file LICENSE located in the top-level
# directory of this package. If you did not, you can view a copy at
# http://dcc.ligo.org/M1500244/LICENSE
#
version="$1"
class="$2"
case "$3" in
"")
  previous=`expr $version - 1`
  ;;
*)
  previous=$3
esac

case $class in
FrVect)
sed -e s/%version%/$version/ \
  -e s/%previous%/$previous/ \
  -e s/%class%/$class/ << EOF > "${class}.hh"
#ifndef FrameCPP__VERSION_%version%__%class%_HH
#define FrameCPP__VERSION_%version%__%class%_HH

#include "framecpp/Version%previous%/%class%.hh"

#include "framecpp/Version%version%/FrameSpec.hh"

#if defined(__cplusplus)
namespace FrameCPP
{
  namespace Version_%version%
  {
    using Previous::Dimension;
    using Previous::FrVectDataTypes;
    using Previous::%class%;
  } /* namespace - Version_%version% */
} /* namespace - FrameCPP */

#endif /* FrameCPP__VERSION_%version%__%class%_HH */
#endif /* defined(__cplusplus) */
EOF
;;
STRING)
sed -e s/%version%/$version/ \
  -e s/%previous%/$previous/ \
  -e s/%class%/$class/ << EOF > "${class}.hh"
#ifndef FrameCPP__VERSION_%version%__%class%_HH
#define FrameCPP__VERSION_%version%__%class%_HH

#include "framecpp/Version%version%/FrameSpec.hh"

#include "framecpp/Version%previous%/%class%.hh"

#if defined(__cplusplus)
#if !defined(SWIG)
namespace FrameCPP
{
  namespace Version_%version%
  {
    using Previous::%class%;
    using Previous::%class%_SHADOW;
  } /* namespace - Version_%version% */
} /* namespace - FrameCPP */
#endif /* ! defined(SWIG) */
#endif /* defined(__cplusplus) */

#endif /* FrameCPP__VERSION_%version%__%class%_HH */
EOF
;;
*)
sed -e s/%version%/$version/ \
  -e s/%previous%/$previous/ \
  -e s/%class%/$class/ << EOF > "${class}.hh"
#ifndef FrameCPP__VERSION_%version%__%class%_HH
#define FrameCPP__VERSION_%version%__%class%_HH

#include "framecpp/Version%version%/FrameSpec.hh"

#include "framecpp/Version%previous%/%class%.hh"

#if defined(__cplusplus)
#if !defined(SWIG)
namespace FrameCPP
{
  namespace Version_%version%
  {
    using Previous::%class%;
  } /* namespace - Version_%version% */
} /* namespace - FrameCPP */
#endif /* ! defined(SWIG) */
#endif /* defined(__cplusplus) */

#endif /* FrameCPP__VERSION_%version%__%class%_HH */
EOF
;;
esac
