Log.cc revision 10448
12810Srdreslin@umich.edu/* Copyright (c) 2012 Massachusetts Institute of Technology 211051Sandreas.hansson@arm.com * 311051Sandreas.hansson@arm.com * Permission is hereby granted, free of charge, to any person obtaining a copy 411051Sandreas.hansson@arm.com * of this software and associated documentation files (the "Software"), to deal 511051Sandreas.hansson@arm.com * in the Software without restriction, including without limitation the rights 611051Sandreas.hansson@arm.com * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 711051Sandreas.hansson@arm.com * copies of the Software, and to permit persons to whom the Software is 811051Sandreas.hansson@arm.com * furnished to do so, subject to the following conditions: 911051Sandreas.hansson@arm.com * 1011051Sandreas.hansson@arm.com * The above copyright notice and this permission notice shall be included in 1111051Sandreas.hansson@arm.com * all copies or substantial portions of the Software. 1211051Sandreas.hansson@arm.com * 1311051Sandreas.hansson@arm.com * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1411051Sandreas.hansson@arm.com * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1511051Sandreas.hansson@arm.com * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 162810Srdreslin@umich.edu * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 172810Srdreslin@umich.edu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 182810Srdreslin@umich.edu * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 192810Srdreslin@umich.edu * THE SOFTWARE. 202810Srdreslin@umich.edu */ 212810Srdreslin@umich.edu 222810Srdreslin@umich.edu#include "Log.h" 232810Srdreslin@umich.edu 242810Srdreslin@umich.edu#include "Assert.h" 252810Srdreslin@umich.edu 262810Srdreslin@umich.edunamespace LibUtil 272810Srdreslin@umich.edu{ 282810Srdreslin@umich.edu using std::ostream; 292810Srdreslin@umich.edu using std::endl; 302810Srdreslin@umich.edu 312810Srdreslin@umich.edu Log* Log::msSingleton = NULL; 322810Srdreslin@umich.edu const bool Log::msIsLog = LIBUTIL_IS_LOG; 332810Srdreslin@umich.edu 342810Srdreslin@umich.edu void Log::allocate(const String& log_file_name_) 352810Srdreslin@umich.edu { 362810Srdreslin@umich.edu if(msIsLog) 372810Srdreslin@umich.edu { 382810Srdreslin@umich.edu // Allocate static Config instance 392810Srdreslin@umich.edu ASSERT(!msSingleton, "Log singleton is allocated"); 402810Srdreslin@umich.edu msSingleton = new Log(log_file_name_); 412810Srdreslin@umich.edu } 4211051Sandreas.hansson@arm.com } 4311051Sandreas.hansson@arm.com 442810Srdreslin@umich.edu void Log::release() 4511051Sandreas.hansson@arm.com { 4611051Sandreas.hansson@arm.com if(msIsLog) 472810Srdreslin@umich.edu { 482810Srdreslin@umich.edu ASSERT(msSingleton, "Log singleton is not allocated"); 492810Srdreslin@umich.edu delete msSingleton; 502810Srdreslin@umich.edu msSingleton = NULL; 5111051Sandreas.hansson@arm.com } 522810Srdreslin@umich.edu return; 532810Srdreslin@umich.edu } 5411051Sandreas.hansson@arm.com 552810Srdreslin@umich.edu void Log::print(const String& str_) 5611051Sandreas.hansson@arm.com { 5711051Sandreas.hansson@arm.com if(msIsLog) 5811051Sandreas.hansson@arm.com { 5911051Sandreas.hansson@arm.com ASSERT(msSingleton, "Log singleton is not allocated"); 6011051Sandreas.hansson@arm.com msSingleton->ofs << str_; 6111288Ssteve.reinhardt@amd.com } 6211051Sandreas.hansson@arm.com return; 6311051Sandreas.hansson@arm.com } 6411051Sandreas.hansson@arm.com 6511051Sandreas.hansson@arm.com void Log::print(ostream& stream_, const String& str_) 6611051Sandreas.hansson@arm.com { 6711053Sandreas.hansson@arm.com if(msIsLog) 6811053Sandreas.hansson@arm.com { 6911051Sandreas.hansson@arm.com ASSERT(msSingleton, "Log singleton is not allocated"); 7011051Sandreas.hansson@arm.com msSingleton->ofs << str_; 7111051Sandreas.hansson@arm.com } 7211197Sandreas.hansson@arm.com stream_ << str_; 7311197Sandreas.hansson@arm.com return; 7411199Sandreas.hansson@arm.com } 7511197Sandreas.hansson@arm.com 7611197Sandreas.hansson@arm.com void Log::printLine(const String& str_) 7711197Sandreas.hansson@arm.com { 7811051Sandreas.hansson@arm.com if(msIsLog) 7911051Sandreas.hansson@arm.com { 8011051Sandreas.hansson@arm.com ASSERT(msSingleton, "Log singleton is not allocated"); 8111051Sandreas.hansson@arm.com msSingleton->ofs << str_ << endl; 8211051Sandreas.hansson@arm.com } 8311051Sandreas.hansson@arm.com return; 8411051Sandreas.hansson@arm.com } 8511051Sandreas.hansson@arm.com 8611051Sandreas.hansson@arm.com void Log::printLine(ostream& stream_, const String& str_) 8711051Sandreas.hansson@arm.com { 8811051Sandreas.hansson@arm.com if(msIsLog) 8911051Sandreas.hansson@arm.com { 9011051Sandreas.hansson@arm.com ASSERT(msSingleton, "Log singleton is not allocated"); 9111051Sandreas.hansson@arm.com msSingleton->ofs << str_ << endl; 9211051Sandreas.hansson@arm.com } 9311051Sandreas.hansson@arm.com stream_ << str_ << endl; 9411051Sandreas.hansson@arm.com return; 9511051Sandreas.hansson@arm.com } 9611051Sandreas.hansson@arm.com 9711051Sandreas.hansson@arm.com Log::Log(const String& log_file_name_) 9811051Sandreas.hansson@arm.com { 9911051Sandreas.hansson@arm.com ofs.open(log_file_name_.c_str()); 10011051Sandreas.hansson@arm.com } 10111051Sandreas.hansson@arm.com 10211051Sandreas.hansson@arm.com Log::~Log() 10311051Sandreas.hansson@arm.com { 10411051Sandreas.hansson@arm.com ofs.close(); 10511051Sandreas.hansson@arm.com } 10611051Sandreas.hansson@arm.com} 10711051Sandreas.hansson@arm.com 10811051Sandreas.hansson@arm.com