Listing 7 Extract from winstl_performance_counter_scope.h


/* /////////////////////////////////////////////////////////////
 * ...
 *
 * Extract from winstl_performance_counter_scope.h
 *
 * Copyright (C) 2002, Synesis Software Pty Ltd.
 * (Licensed under the Synesis Software Standard Source License:
 *  http://www.synesis.com.au/licenses/ssssl.html)
 *
 * ...
 * ////////////////////////////////////////////////////////// */

// class performance_counter_scope
template <ws_typename_param_k T>
class performance_counter_scope
{
public:
    typedef T                               counter_type;
    typedef performance_counter_scope<T>    class_type;

public:
    ws_explicit_k performance_counter_scope(counter_type &counter)
        : m_counter(counter)
    {
        m_counter.start();
    }
    ~performance_counter_scope()
    {
        m_counter.stop();
    }

    void stop()
    {
        m_counter.stop();
    }

    // This method is const, to ensure that only the stop operation 
    // (via performance_counter_scope::stop()) is accessible 
    // on the managed counter.
    const counter_type &get_counter() const
    {
        return m_counter;
    }

// Members
protected:
    T   &m_counter;

// Not to be implemented
private:
    performance_counter_scope(class_type const &rhs);
    class_type const &operator =(class_type const &rhs);
};