feature/initial-dev - Commit of initial project set up and first
draft of the Makefile for this project.

. new file:   Makefile
. new file:   bin/.gitinclude
. new file:   build/.gitinclude
. new file:   include/consumer.hpp
. new file:   include/producer.hpp
. new file:   src/cpp-unit-test-example.cpp
. new file:   src/tags
. new file:   test/.gitinclude
feature/initial-dev - Interim commit. Have most of the framework in
place.  Still need to implement the basic consumer and then also
implement the proper conditional wait.
feature/initial-dev - First working version of the producer/consumer
program.  Don't have the tests completed yet, and need to implement the
conditional wait mutexes.

. new file:   include/data_entry.h
  . struct for the data to be put on the blocking_queue

. new file:   src/consumer.cpp

. modified:   Makefile
  . Added the compilation of the consumer.o file.

. modified:   include/consumer.hpp
  . Added the class definition, inheriting from thread.

. modified:   include/producer.hpp
  . Refactored the blocking_queue pointer to be templated for a
    data_entry struct.

. modified:   include/tags

. modified:   include/thread.hpp

. modified:   src/cpp-unit-test-example.cpp

. modified:   src/producer.cpp

. modified:   src/tags

. modified:   src/thread.cpp

. deleted:    src/blocking_queue.cpp
  . Not necessary as all of the implementation was folded into the .hpp
    file for the blocking_queue.
feature/initial-dev - Finished development of the functional
producer/consumer example.  Includes the usage of conditional variables
for synchronization and broadcasts instead of sleep calls from the
tutorial that got me started on the right track.

. modified:   Makefile
  . Added the compilation of the conditional_var class

. modified:   include/blocking_queue.hpp
  . Reimplemented the size, push, and pop functions to remove the usage
    of the mutex, because all calls to these functions are synchronized
    from the calling code.
  . The mutex member is now a pointer.
  . Modified constructor implementation to accept mutex * mtx argument.

. modified:   include/consumer.hpp
  . Added conditional_var * c member.
  . Refactored the constructor for an additional conditional_var
    argument.
  . Added function: virtual void shutdown();

. modified:   include/mutex.hpp
  . Added accessor: pthread_mutex_t * get_mutex();

. modified:   include/producer.hpp
  . Added private members:
    . mutex * mtx;
    . conditional_var * c;
  . Refactored the constructor to accept mutex and conditional_var
    pointer arguments
  . Added destructor definition

. modified:   include/thread.hpp
  . Refactored shutdown function:
    from: void shutdown();
    to:   virtual void shutdown();

. modified:   src/consumer.cpp
  . Refactored the run function.  It now uses the conditional_var for
    waiting.
  . Added implementation for the shutdown function.

. modified:   src/cpp-unit-test-example.cpp
  . Refactored such that the producer and consumer instances are now
    referenced from a global pointer to an array.  This was done to
    enable us to reference the instances from a signal callback
    function.
  . Added some constants to store the max number of producers, consumers
    and the maximum number of items to store on the queue.

. modified:   src/mutex.cpp
  . Added implementation of the get_mutex function.

. modified:   src/producer.cpp
  . Refactored the run function to utilize the mutex and conditional var
    properly.

. modified:   src/thread.cpp
  . Removed default constructor, as it is now defined in the header

. new:
  . src/.gitignore
  . include/.gitignore

. new: class to encapsulate the pthread_cond_t conditional variable C
  API.
  . include/conditional_var.hpp
  . src/conditional_var.cpp

. deleted:    include/tags
. deleted:    src/tags
feature/initial-dev - Refactored to enable configuration of the number of
producers, consumers, and the max items the producer creates to be passed
in via command line args to the main, or use the defaults.

. modified:   README.md
  . Continued development of the documentation.

. modified:   src/cpp-unit-test-example.cpp
  . We can now pass in command line arguments to set the number of
    producers, max_items, and consumers.
  . Updated the macro definitions for the default values
  . Define the producers, consumers, mutex and conditional_vars in the
    global scope to be able to refer to those objects from the signal
    callback handler.
  . Refactored main to accept standard cmd line args and then
    optionally parse and dynamically create the * producers[] and
    * consumers[] pointers.

. modified:   src/producer.cpp
  . Now generate entries until num_entries met.  Need to add a cmd line
    flag to enable us to go indefinitely, or until a limit.