1b9056914e2627627ffdd615e078a9b6020ab1cf2philip.liard@gmail.com// Copyright (C) 2011 The Libphonenumber Authors 21ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// 31ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Licensed under the Apache License, Version 2.0 (the "License"); 41ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// you may not use this file except in compliance with the License. 51ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// You may obtain a copy of the License at 61ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// 71ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// http://www.apache.org/licenses/LICENSE-2.0 81ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// 91ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Unless required by applicable law or agreed to in writing, software 101ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// distributed under the License is distributed on an "AS IS" BASIS, 111ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// See the License for the specific language governing permissions and 131ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// limitations under the License. 141ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 151ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Author: Philippe Liard 161ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 171ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#ifndef I18N_PHONENUMBERS_DEFAULT_LOGGER_H_ 181ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#define I18N_PHONENUMBERS_DEFAULT_LOGGER_H_ 191ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 20a6eef04c15f45d5916ee3429d24665c49148b99bphilip.liard@gmail.com#include "phonenumbers/logger.h" 21a6eef04c15f45d5916ee3429d24665c49148b99bphilip.liard@gmail.com 22fa6ddeed736e42c266027a0d7b696909083d066bphilip.liard@gmail.com#include <sstream> 23fa6ddeed736e42c266027a0d7b696909083d066bphilip.liard@gmail.com#include <string> 24edea68e5614cc3f69f4910132ff3aec8064782c0philip.liard@gmail.com 25edea68e5614cc3f69f4910132ff3aec8064782c0philip.liard@gmail.comnamespace i18n { 26edea68e5614cc3f69f4910132ff3aec8064782c0philip.liard@gmail.comnamespace phonenumbers { 27edea68e5614cc3f69f4910132ff3aec8064782c0philip.liard@gmail.com 28fa6ddeed736e42c266027a0d7b696909083d066bphilip.liard@gmail.comusing i18n::phonenumbers::Logger; 291ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comusing std::string; 304709186a7e133a95159c0eba1c8c5be69f302355philip.liard@gmail.comusing std::stringstream; 311ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 321ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Class template used to inline the right implementation for the T -> string 331ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// conversion. 341ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comtemplate <typename T> 351ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstruct ConvertToString; 361ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 371ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comtemplate <typename T> 381ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstruct ConvertToString { 391ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com static inline string DoWork(const T& s) { 401ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return string(s); 411ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 421ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com}; 431ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 441ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comtemplate <> 451ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstruct ConvertToString<int> { 464709186a7e133a95159c0eba1c8c5be69f302355philip.liard@gmail.com static inline string DoWork(int n) { 474709186a7e133a95159c0eba1c8c5be69f302355philip.liard@gmail.com stringstream stream; 484709186a7e133a95159c0eba1c8c5be69f302355philip.liard@gmail.com stream << n; 494709186a7e133a95159c0eba1c8c5be69f302355philip.liard@gmail.com string result; 504709186a7e133a95159c0eba1c8c5be69f302355philip.liard@gmail.com stream >> result; 514709186a7e133a95159c0eba1c8c5be69f302355philip.liard@gmail.com return result; 521ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 531ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com}; 541ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 551ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comclass LoggerHandler { 561ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com public: 571ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com LoggerHandler(Logger* impl) : impl_(impl) {} 581ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 591ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com ~LoggerHandler() { 601ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com if (impl_) { 611ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com impl_->WriteMessage("\n"); 621ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 631ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 641ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 651ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com template <typename T> 661ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com LoggerHandler& operator<<(const T& value) { 671ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com if (impl_) { 681ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com impl_->WriteMessage(ConvertToString<T>::DoWork(value)); 691ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 701ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return *this; 711ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 721ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 731ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com private: 741ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com Logger* const impl_; 751ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com}; 761ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 7767b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.cominline LoggerHandler LOG(int n) { 781ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com Logger* const logger_impl = Logger::mutable_logger_impl(); 791ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com if (logger_impl->level() < n) { 801ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return LoggerHandler(NULL); 811ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 821ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com logger_impl->WriteLevel(); 831ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return LoggerHandler(logger_impl); 841ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 851ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 8667b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.cominline LoggerHandler VLOG(int n) { 8767b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com // VLOG(1) is the next logging level after LOG(DEBUG). 8867b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com n += LOG_DEBUG; 8967b8ca8d34d2c1625c90af839309007b9c66f65alararennie@google.com return LOG(n); 901ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 911ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 921ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Default logger implementation used by PhoneNumberUtil class. It outputs the 931ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// messages to the standard output. 941ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comclass StdoutLogger : public Logger { 951ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com public: 961ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com virtual ~StdoutLogger() {} 971ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 981ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com virtual void WriteLevel(); 991ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com virtual void WriteMessage(const string& msg); 1001ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com}; 1011ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 1021ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} // namespace phonenumbers 1031ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} // namespace i18n 1041ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 1051ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#endif // I18N_PHONENUMBERS_DEFAULT_LOGGER_H_ 106