locked_logger.cpp

Go to the documentation of this file.
00001 #ifndef LOCKED_LOGGER_IMPLEMENTATION_FILE
00002 #define LOCKED_LOGGER_IMPLEMENTATION_FILE
00003 
00004 /*****************************************************************************\
00005 *                                                                             *
00006 *  Name   : locked_logger                                                     *
00007 *  Author : Chris Koeritz                                                     *
00008 *                                                                             *
00009 *******************************************************************************
00010 * Copyright (c) 2002-$now By Author.  This program is free software; you can  *
00011 * redistribute it and/or modify it under the terms of the GNU General Public  *
00012 * License as published by the Free Software Foundation; either version 2 of   *
00013 * the License or (at your option) any later version.  This is online at:      *
00014 *     http://www.fsf.org/copyleft/gpl.html                                    *
00015 * Please send any updates to: fred@gruntose.com                               *
00016 \*****************************************************************************/
00017 
00018 #ifndef OMIT_PROGRAM_WIDE_LOGGER
00019 
00020 #include "locked_logger.h"
00021 
00022 #include <basis/istring.h>
00023 #include <basis/set.cpp>
00024 
00025 locked_logger::locked_logger(log_base *the_logger)
00026 : log_base(),
00027   locked_object<log_base>(the_logger)
00028 {
00029 #ifdef NOISY_LOCKED_LOGGER
00030   // debugging code.
00031   write_to_critical_events((istring("app ") + portable::application_name()
00032       + isprintf(" pid %d creating locked logger.", process_id())).s());
00033 #endif
00034 }
00035 
00036 locked_logger::~locked_logger()
00037 {
00038   log_base *old_log = swap(NIL);
00039   WHACK(old_log);
00040 }
00041 
00042 #define LOCK_LOGGER(retval) \
00043   log_base *real_guy = lock_object(); \
00044   if (!real_guy) { \
00045     unlock_object(real_guy); \
00046     return retval; \
00047   }
00048 
00049 #define UNLOCK_LOGGER \
00050   unlock_object(real_guy)
00051 
00052 bool locked_logger::established()
00053 {
00054   LOCK_LOGGER(false);
00055   UNLOCK_LOGGER;
00056   return true;
00057 }
00058 
00059 void locked_logger::add_filter(int new_filter)
00060 {
00061   LOCK_LOGGER();
00062   real_guy->add_filter(new_filter);
00063   UNLOCK_LOGGER;
00064 }
00065 
00066 void locked_logger::remove_filter(int old_filter)
00067 {
00068   LOCK_LOGGER();
00069   real_guy->remove_filter(old_filter);
00070   UNLOCK_LOGGER;
00071 }
00072 
00073 bool locked_logger::member(int filter_to_check)
00074 {
00075   LOCK_LOGGER(false);
00076   bool to_return = real_guy->member(filter_to_check);
00077   UNLOCK_LOGGER;
00078   return to_return;
00079 }
00080 
00081 void locked_logger::clear_filters()
00082 {
00083   LOCK_LOGGER();
00084   real_guy->clear_filters();
00085   UNLOCK_LOGGER;
00086 }
00087 
00088 int_set locked_logger::filter_set()
00089 {
00090   LOCK_LOGGER(int_set());
00091   int_set to_return = real_guy->filter_set();
00092   UNLOCK_LOGGER;
00093   return to_return;
00094 }
00095 
00096 log_base::line_ending locked_logger::eol()
00097 {
00098   LOCK_LOGGER(LF_AT_END);
00099   log_base::line_ending to_return = real_guy->eol();
00100   UNLOCK_LOGGER;
00101   return to_return;
00102 }
00103 
00104 void locked_logger::eol(line_ending to_set)
00105 {
00106   LOCK_LOGGER();
00107   real_guy->eol(to_set);
00108   UNLOCK_LOGGER;
00109 }
00110 
00111 istring locked_logger::get_ending()
00112 {
00113   LOCK_LOGGER(istring::empty_string());
00114   istring to_return = real_guy->get_ending();
00115   UNLOCK_LOGGER;
00116   return to_return;
00117 }
00118 
00119 void locked_logger::get_ending(istring &to_end)
00120 {
00121   LOCK_LOGGER();
00122   real_guy->get_ending(to_end);
00123   UNLOCK_LOGGER;
00124 }
00125 
00126 outcome locked_logger::log(const istring &info, int filter)
00127 {
00128   LOCK_LOGGER(common::BAD_INPUT);
00129   outcome to_return = real_guy->log(info, filter);
00130   UNLOCK_LOGGER;
00131   return to_return;
00132 }
00133 
00134 #endif
00135 
00136 
00137 #endif //LOCKED_LOGGER_IMPLEMENTATION_FILE
00138 

Generated on Fri Nov 28 04:29:16 2008 for HOOPLE Libraries by  doxygen 1.5.1