log.h revision f4c12fce1ee58e670f9c3fce46c40296ba9ee8a2
1aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger// log.h
2aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger//
3aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger// Licensed under the Apache License, Version 2.0 (the "License");
4aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger// you may not use this file except in compliance with the License.
5aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger// You may obtain a copy of the License at
6aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger//
7aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger//      http://www.apache.org/licenses/LICENSE-2.0
8aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger//
9aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger// Unless required by applicable law or agreed to in writing, software
10aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger// distributed under the License is distributed on an "AS IS" BASIS,
11aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger// See the License for the specific language governing permissions and
13aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger// limitations under the License.
14aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger//
15aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger// Author: riley@google.com (Michael Riley)
16aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger//
17aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger// \file
18aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger// Google-style logging declarations and inline definitions.
19aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
20aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#ifndef FST_LIB_LOG_H__
21aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#define FST_LIB_LOG_H__
22aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
23aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <cassert>
245dfe556188df2a3b2bfe73c8bc3b3b9216171a93osdl.org!shemminger#include <iostream>
25aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger#include <string>
2690f93024a0818dc691138d8401721e797004b042shemminger
2790f93024a0818dc691138d8401721e797004b042shemminger#include <fst/types.h>
2830d10db5667d3ca86917ca86c1a65cfcc45965f9Hagen Paul Pfeifer#include <fst/flags.h>
2990f93024a0818dc691138d8401721e797004b042shemminger
30aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerusing std::string;
31aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
32aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerDECLARE_int32(v);
334094db72b61dadd16e180eab5f62ccbc82e3976dosdl.org!shemminger
34aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemmingerclass LogMessage {
35aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger public:
36aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  LogMessage(const string &type) : fatal_(type == "FATAL") {
37aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    std::cerr << type << ": ";
38aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  }
39aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  ~LogMessage() {
40aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    std::cerr << std::endl;
41aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger    if(fatal_)
42aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger      exit(1);
43aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  }
44aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger  std::ostream &stream() { return std::cerr; }
45aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger
46aba5acdfdb347d2c21fc67d613d83d4430ca3937osdl.org!shemminger private:
476b1ac654e9364ad279d3c82d8a3ef93efa9f3dfaStephen Hemminger  bool fatal_;
484b270b172a6e570f4e9fa1ebb4bc67b0e715ee48Stephen Hemminger};
494b270b172a6e570f4e9fa1ebb4bc67b0e715ee48Stephen Hemminger
506b1ac654e9364ad279d3c82d8a3ef93efa9f3dfaStephen Hemminger#define LOG(type) LogMessage(#type).stream()
516b1ac654e9364ad279d3c82d8a3ef93efa9f3dfaStephen Hemminger#define VLOG(level) if ((level) <= FLAGS_v) LOG(INFO)
524b270b172a6e570f4e9fa1ebb4bc67b0e715ee48Stephen Hemminger
536b1ac654e9364ad279d3c82d8a3ef93efa9f3dfaStephen Hemminger// Checks
546b1ac654e9364ad279d3c82d8a3ef93efa9f3dfaStephen Hemmingerinline void CHECK(bool x) { assert(x); }
556b1ac654e9364ad279d3c82d8a3ef93efa9f3dfaStephen Hemminger
564b270b172a6e570f4e9fa1ebb4bc67b0e715ee48Stephen Hemminger#define CHECK_EQ(x, y) CHECK((x) == (y))
576b1ac654e9364ad279d3c82d8a3ef93efa9f3dfaStephen Hemminger#define CHECK_LT(x, y) CHECK((x) < (y))
586b1ac654e9364ad279d3c82d8a3ef93efa9f3dfaStephen Hemminger#define CHECK_GT(x, y) CHECK((x) > (y))
594b270b172a6e570f4e9fa1ebb4bc67b0e715ee48Stephen Hemminger#define CHECK_LE(x, y) CHECK((x) <= (y))
604b270b172a6e570f4e9fa1ebb4bc67b0e715ee48Stephen Hemminger#define CHECK_GE(x, y) CHECK((x) >= (y))
614b270b172a6e570f4e9fa1ebb4bc67b0e715ee48Stephen Hemminger#define CHECK_NE(x, y) CHECK((x) != (y))
625a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
635a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson// Ports
645a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson#define ATTRIBUTE_DEPRECATED __attribute__((deprecated))
655a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson
665a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson#endif  // FST_LIB_LOG_H__
675a0d1cbf69269bfcb510a8b861b8a83aed0f6b85Andreas Henriksson