1// Copyright 2017 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#pragma once
6
7#include <inttypes.h>
8#include <stdio.h>
9
10// TODO(johngro) : replace this with a system which...
11//
12// 1) Uses low overhead loging service infrastructure instead of printf.
13// 2) Uses C/C++ functions (either template parameter packs, or c-style
14//    var-args) instead of preprocessor macros.
15
16#define VERBOSE_LOGGING 0
17#define DEBUG_LOGGING (VERBOSE_LOGGING || 0)
18
19#define LOG_EX(obj, ...) do { \
20    (obj).PrintDebugPrefix(); \
21    printf(__VA_ARGS__);      \
22} while (false)
23
24#define LOG(...) LOG_EX(*this, __VA_ARGS__)
25
26#define DEBUG_LOG_EX(obj, ...) do {     \
27    if (DEBUG_LOGGING) {                \
28        (obj).PrintDebugPrefix();       \
29        printf(__VA_ARGS__);            \
30    }                                   \
31} while (false)
32
33#define DEBUG_LOG(...) DEBUG_LOG_EX(*this, __VA_ARGS__)
34
35#define VERBOSE_LOG_EX(obj, ...) do {   \
36    if (VERBOSE_LOGGING) {              \
37        (obj).PrintDebugPrefix();       \
38        printf(__VA_ARGS__);            \
39    }                                   \
40} while (false)
41
42#define VERBOSE_LOG(...) VERBOSE_LOG_EX(*this, __VA_ARGS__)
43