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