//
// This software may only be used by you under license from the
// University of Notre Dame.  A copy of the University of Notre Dame's
// Source Code Agreement is available at the inilib Internet website
// having the URL: <http://inilib.sourceforge.net/license/> If you
// received this software without first entering into a license with the
// University of Notre Dame, you have an infringing copy of this software
// and cannot use it without violating the University of Notre Dame's
// intellectual property rights.
//
// AUTOMATICALLY GENERATED BY op_overload_gen.pl
// Edit this file at your own risk.  People have been killed for less.
//
    
#ifndef ATTR_OTHER_ARITH_H_
#define ATTR_OTHER_ARITH_H_

#include <string>

#include "Debug.h"
#include "attribute.h"
#include "bool_attribute.h"
#include "double_attribute.h"
#include "int_attribute.h"
#include "string_attribute.h"

namespace INI {
inline bool
operator+(const INI::attribute& a, bool b)
{
  return ((bool) a + b);
}

inline bool
operator+(bool& a, const INI::attribute& b)
{
  return (a + (bool) b);
}


inline double
operator+(const INI::attribute& a, double b)
{
  return ((double) a + b);
}

inline double
operator+(double& a, const INI::attribute& b)
{
  return (a + (double) b);
}


inline int
operator+(const INI::attribute& a, int b)
{
  return ((int) a + b);
}

inline int
operator+(int& a, const INI::attribute& b)
{
  return (a + (int) b);
}


inline std::string
operator+(const INI::attribute& a, std::string b)
{
  return ((std::string) a + b);
}

inline std::string
operator+(std::string& a, const INI::attribute& b)
{
  return (a + (std::string) b);
}


inline bool
operator*(const INI::attribute& a, bool b)
{
  return ((bool) a * b);
}

inline bool
operator*(bool& a, const INI::attribute& b)
{
  return (a * (bool) b);
}


inline bool
operator/(const INI::attribute& a, bool b)
{
  return ((bool) a / b);
}

inline bool
operator/(bool& a, const INI::attribute& b)
{
  return (a / (bool) b);
}


inline bool
operator%(const INI::attribute& a, bool b)
{
  return ((bool) a % b);
}

inline bool
operator%(bool& a, const INI::attribute& b)
{
  return (a % (bool) b);
}


inline bool
operator-(const INI::attribute& a, bool b)
{
  return ((bool) a - b);
}

inline bool
operator-(bool& a, const INI::attribute& b)
{
  return (a - (bool) b);
}


inline double
operator*(const INI::attribute& a, double b)
{
  return ((double) a * b);
}

inline double
operator*(double& a, const INI::attribute& b)
{
  return (a * (double) b);
}


inline double
operator/(const INI::attribute& a, double b)
{
  return ((double) a / b);
}

inline double
operator/(double& a, const INI::attribute& b)
{
  return (a / (double) b);
}


inline double
operator%(const INI::attribute& a, double b)
{
   return (double) ((int) a % (int) b);
}

inline double
operator%(double& a, const INI::attribute& b)
{
   return (double) ((int) a % (int) b);
}


inline double
operator-(const INI::attribute& a, double b)
{
  return ((double) a - b);
}

inline double
operator-(double& a, const INI::attribute& b)
{
  return (a - (double) b);
}


inline int
operator*(const INI::attribute& a, int b)
{
  return ((int) a * b);
}

inline int
operator*(int& a, const INI::attribute& b)
{
  return (a * (int) b);
}


inline int
operator/(const INI::attribute& a, int b)
{
  return ((int) a / b);
}

inline int
operator/(int& a, const INI::attribute& b)
{
  return (a / (int) b);
}


inline int
operator%(const INI::attribute& a, int b)
{
  return ((int) a % b);
}

inline int
operator%(int& a, const INI::attribute& b)
{
  return (a % (int) b);
}


inline int
operator-(const INI::attribute& a, int b)
{
  return ((int) a - b);
}

inline int
operator-(int& a, const INI::attribute& b)
{
  return (a - (int) b);
}


}
#endif // ATTR_OTHER_ARITH_H_
