/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 **/

#ifndef QUICKSTEP_UTILITY_MACROS_HPP_
#define QUICKSTEP_UTILITY_MACROS_HPP_

#ifdef QUICKSTEP_DEBUG
#include <cassert>
#endif
#include <cstdlib>
#include <iostream>

/**
 * This macro prevents instances of a class from being copied or assigned
 * by automatically-generated (dumb, shallow) copy constructors and assignment
 * operators. It should be placed in a class' private section, and given the
 * name of the class as its argument.
 **/
#define DISALLOW_COPY_AND_ASSIGN(classname) \
  classname(const classname &orig) = delete;\
  classname & operator=(const classname &rhs) = delete

/**
 * This macro supresses warnings that sometimes occur when GCC does not
 * recognize that the end of a non-void function is unreachable.
 **/
#if defined(__GNUC__) && !(defined(__clang__) || defined(__INTEL_COMPILER))
#define QUICKSTEP_UNREACHABLE()  \
  std::exit(1)
#else
#define QUICKSTEP_UNREACHABLE()  \
  (void)0
#endif

// TODO(chasseur): Start using a proper logging library like glog instead of
//                 these macros.

/**
 * This macro calls assert() with the given statement when QUICKSTEP_DEBUG is
 * defined (i.e. this is a debug build), otherwise it is a no-op. Remember: for
 * release builds, the provided statement is NOT called, so don't use this for
 * statements that have any side effects.
 **/
#ifdef QUICKSTEP_DEBUG
#define DEBUG_ASSERT(statement) \
  assert(statement)
#else
#define DEBUG_ASSERT(statement)
#endif

/**
 * This macro always calls the provided statement. When QUICKSTEP_DEBUG is
 * defined (i.e. this is a debug build), an assertion checks that the provided
 * statement returns 0.
 **/
#ifdef QUICKSTEP_DEBUG
#define DO_AND_DEBUG_ASSERT_ZERO(statement) \
  assert(statement == 0)
#else
#define DO_AND_DEBUG_ASSERT_ZERO(statement) \
  statement
#endif

/**
 * This macro logs the provided error message to STDERR and causes the program
 * to exit. We use a macro instead of a function so that compilers will realize
 * that calling FATAL_ERROR terminates the program, and it is OK to not return
 * from the calling function.
 **/
#define FATAL_ERROR(message) \
  std::cerr << "FATAL ERROR: " << message << "\n";\
  std::exit(1)

/**
 * This macro logs a warning message to STDERR. Note that race conditions are
 * possible when multiple threads call this, potentially garbling output.
 **/
#define LOG_WARNING(message) \
  std::cerr << "WARNING: " << message << "\n";

/**
 * This macro logs a warning message to STDERR. This is similar to LOG_WARNING,
 * but is intended for developer-specific messages indicating that there is
 * potentially a problem with some quickstep code.
 **/
#define DEV_WARNING(message) \
  std::cerr << "DEVELOPER WARNING: " << message << "\n";

#endif  // QUICKSTEP_UTILITY_MACROS_HPP_
