blob: fadf4a52c4a100fd8fcd0953c29d337e39f1338a [file] [log] [blame]
/*
* Copyright (c) 2022, Alliance for Open Media. All rights reserved
*
* This source code is subject to the terms of the BSD 3-Clause Clear License
* and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear
* License was not distributed with this source code in the LICENSE file, you
* can obtain it at www.aomedia.org/license/software-license/bsd-3-c-c. If the
* Alliance for Open Media Patent License 1.0 was not distributed with this
* source code in the PATENTS file, you can obtain it at
* www.aomedia.org/license/patent.
*/
#ifndef COMMON_UTILS_MACROS_H_
#define COMMON_UTILS_MACROS_H_
namespace iamf_tools {
// For propagating errors when calling a function.
#define RETURN_IF_NOT_OK(...) \
do { \
absl::Status _status = (__VA_ARGS__); \
if (!_status.ok()) return _status; \
} while (0)
// For propagating errors when calling a function, but ignoring errors when
// built with `-DIGNORE_ERRORS_USE_ONLY_FOR_IAMF_TEST_SUITE`. Beware that
// defining `IGNORE_ERRORS_USE_ONLY_FOR_IAMF_TEST_SUITE` is not thoroughly
// tested and may result in unexpected behavior. This define should only be used
// when creating test files which intentionally violate the IAMF spec.
#ifdef IGNORE_ERRORS_USE_ONLY_FOR_IAMF_TEST_SUITE
#define MAYBE_RETURN_IF_NOT_OK(...) \
do { \
(__VA_ARGS__).IgnoreError(); \
} while (0)
#else
#define MAYBE_RETURN_IF_NOT_OK(...) RETURN_IF_NOT_OK(__VA_ARGS__)
#endif
} // namespace iamf_tools
#endif // COMMON_UTILS_MACROS_H_