/*
* Copyright 2011, 2013 Steven Gribble, Hal Perkins
*
* This file is the solution to an exercise problem posed during
* one of the UW CSE 333 lectures (333exercises).
*
* 333exercises is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 333exercises is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 333exercises. If not, see .
*/
#ifndef _TRACER_H_
#define _TRACER_H_
#include
#include
// This class is useful when you are exploring the behavior of STL
// containers. The class gives each instance that is manufactured
// using the default constructor a unique ID and a current value. The
// current value is initialized to be the unique ID.
//
// Whenever an object is manufactured using the copy constructor, its
// value is copied from the argument. Similarly, whenever an object
// is the target of an assignment operator, then its value is copied
// from the source.
//
// Finally, objects print messages out whenever important events
// happen, including default construction, copy construction,
// destruction, assignment, and "less than" operator invocation.
// (Less than is used as a comparator for things like sorting or
// inserting into the right sorted spot in a map.)
class Tracer {
public:
// Constructors.
Tracer();
~Tracer();
Tracer(const Tracer &rhs);
// Assignment operator.
Tracer &operator=(const Tracer &rhs);
// Less-than comparison operator.
bool operator<(const Tracer &rhs) const;
// << operator
friend std::ostream &operator<<(std::ostream &out, const Tracer &rhs);
private:
// Return "(id_,value_)" as a string
std::string PrintID(void) const;
// This static (class member) tracks the next id_ to hand out.
static unsigned int nextid_;
unsigned int id_;
unsigned int value_;
};
#endif // _TRACER_H_