00001
00015 #pragma once
00016
00017 #include "Loggable.h"
00018 #include "CompositeLoggable.h"
00019 #include "GenericSimpleLoggable.h"
00020 #include "VectorLoggable.h"
00021 #include "LoggableTraits.h"
00022
00023 #include "TStd.h"
00024 #include <vector>
00025
00026 #include <boost/utility/enable_if.hpp>
00027 #include <boost/type_traits.hpp>
00028
00029 namespace Nvidia {
00030 namespace Logging {
00031
00039 class LogContentsPrinter
00040 {
00041 public:
00052 template<typename T>
00053 void LogContent(const TCHAR* name, T value)
00054 {
00055 LogContentInternal(std::tstring(name), value);
00056 }
00057
00068 template<typename T>
00069 void LogContent(const std::tstring& name, T value)
00070 {
00071 LogContentInternal(name, value);
00072 }
00073
00074 protected:
00079 virtual void LogContentInternal(const std::tstring& name, const SimpleLoggable& loggable) = 0;
00080
00085 virtual void LogContentInternal(const std::tstring& name, const CompositeLoggable& loggable) = 0;
00086
00088 template<typename T>
00089 void LogContentInternal(const std::tstring& name, T value,
00090 typename boost::disable_if_c<boost::is_base_of<Loggable, T>::value, T>::type* = 0)
00091 {
00092 typename LoggableTraits<T>::LoggableType loggable(value);
00093 LogContentInternal(name, loggable);
00094 }
00095
00097 template<typename T>
00098 void LogContentInternal(const std::tstring& name, const std::vector<T>& value)
00099 {
00100 VectorLoggable<T> loggable(value);
00101 LogContentInternal(name, loggable);
00102 }
00103 };
00104
00105 }
00106 }