~ubuntu-branches/ubuntu/oneiric/libclaw/oneiric

« back to all changes in this revision

Viewing changes to claw/log_stream_uniq.hpp

  • Committer: Bazaar Package Importer
  • Author(s): Julien Jorge
  • Date: 2010-12-23 20:55:14 UTC
  • mfrom: (4.2.1 sid)
  • Revision ID: james.westby@ubuntu.com-20101223205514-s10m6ywla7s4ttqf
Tags: 1.6.1-3
UploadĀ inĀ sid

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
  CLAW - a C++ Library Absolutely Wonderful
 
3
 
 
4
  CLAW is a free library without any particular aim but being useful to 
 
5
  anyone.
 
6
 
 
7
  Copyright (C) 2005-2010 Julien Jorge
 
8
 
 
9
  This library is free software; you can redistribute it and/or
 
10
  modify it under the terms of the GNU Lesser General Public
 
11
  License as published by the Free Software Foundation; either
 
12
  version 2.1 of the License, or (at your option) any later version.
 
13
 
 
14
  This library is distributed in the hope that it will be useful,
 
15
  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
16
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
17
  Lesser General Public License for more details.
 
18
 
 
19
  You should have received a copy of the GNU Lesser General Public
 
20
  License along with this library; if not, write to the Free Software
 
21
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
22
 
 
23
  contact: julien_jorge@yahoo.fr
 
24
*/
 
25
/**
 
26
 * \file log_stream_uniq.hpp
 
27
 * \brief A log stream that does not output successively the same message.
 
28
 * \author Julien Jorge
 
29
 */
 
30
#ifndef __CLAW_LOG_STREAM_UNIQ_HPP__
 
31
#define __CLAW_LOG_STREAM_UNIQ_HPP__
 
32
 
 
33
#include <string>
 
34
#include <claw/log_stream.hpp>
 
35
 
 
36
#ifndef CLAW_LOGGER_EXPORT
 
37
#  ifdef CLAW_LOGGER_NO_EXPORT
 
38
#    define CLAW_LOGGER_EXPORT
 
39
#  else
 
40
#    ifdef _WIN32
 
41
#      ifdef claw_logger_EXPORTS
 
42
#        define CLAW_LOGGER_EXPORT __declspec(dllexport)
 
43
#      else
 
44
#        define CLAW_LOGGER_EXPORT __declspec(dllimport)
 
45
#      endif // def claw_logger_EXPORTS
 
46
#    else // def _WIN32
 
47
#      define CLAW_LOGGER_EXPORT
 
48
#    endif // def _WIN32
 
49
#  endif // def CLAW_LOGGER_NO_EXPORT
 
50
#endif // ndef CLAW_LOGGER_EXPORT
 
51
 
 
52
namespace claw
 
53
{
 
54
  /**
 
55
   * \brief A log stream that does not output successively the same message.
 
56
   * \author Julien Jorge
 
57
   */
 
58
  class CLAW_LOGGER_EXPORT log_stream_uniq:
 
59
    public log_stream,
 
60
    public pattern::non_copyable
 
61
  {
 
62
  public:
 
63
    explicit log_stream_uniq( log_stream* s );
 
64
    virtual ~log_stream_uniq();
 
65
 
 
66
    virtual void write( const std::string& str );
 
67
    virtual void flush();
 
68
 
 
69
  private:
 
70
    void output_current_line();
 
71
 
 
72
  private:
 
73
    /** \brief The stream in which the messages are finally written. */
 
74
    log_stream* m_stream;
 
75
 
 
76
    /** \brief The current line to send into the stream. */
 
77
    std::string m_current_line;
 
78
 
 
79
    /** \brief The previous line sent into the stream. */
 
80
    std::string m_previous_line;
 
81
 
 
82
    /** \brief How many times the previous line has been repeated. */
 
83
    std::size_t m_repetition_count;
 
84
 
 
85
  }; // class log_stream_uniq
 
86
} // namespace claw
 
87
 
 
88
#endif // __CLAW_LOG_STREAM_UNIQ_HPP__