Changeset 365


Ignore:
Timestamp:
05/16/15 17:40:16 (10 years ago)
Author:
epyon
Message:
  • overhaul of logging: no longer stream operated no longer using STL no memory allocation shorthand macros fast file and console I/O
Location:
trunk
Files:
1 added
27 edited

Legend:

Unmodified
Added
Removed
  • trunk

    • Property svn:global-ignores set to
      vs2012
      vs2013
      gmake
      gmake-clang
  • trunk/nv/core/array2d.hh

    r327 r365  
    320320                        if ( dest_start_x + min(size_x, source.m_size.x - source_start_x) > m_size.x || dest_start_y + min(size_y, source.m_size.y - source_start_y) > m_size.y )
    321321                        {
    322                                 NV_LOG( LOG_WARNING, "set_sub_array: Source area does not fit in the destination area.  Data will be truncated." );
     322                                NV_LOG_WARNING( "set_sub_array: Source area does not fit in the destination area.  Data will be truncated." );
    323323                        }
    324324               
  • trunk/nv/core/common.hh

    r357 r365  
    130130#include <cstdint>
    131131#include <cassert>
    132 #include <nv/core/logging.hh>
     132//#include <nv/core/logging.hh>
    133133
    134134#define NV_STRINGIZE_DETAIL(x) #x
     
    146146#define NV_ASSERT(cond, msg) assert( (cond) && msg )
    147147#define NV_THROW(eobj, ...) { \
    148         NV_LOG( nv::LOG_ERROR, __FILE__ " line " NV_STRINGIZE(__LINE__) " - exception thrown - " #eobj ); \
     148        NV_LOG_ERROR( __FILE__ " line " NV_STRINGIZE(__LINE__) " - exception thrown - " #eobj ); \
    149149        throw eobj( __VA_ARGS__ ); \
    150150}
  • trunk/nv/core/logger.hh

    r319 r365  
    1616#include <nv/core/string.hh>
    1717#include <nv/core/logging.hh>
    18 #include <iosfwd>
    19 #include <list>
    2018
    2119namespace nv
     
    3533                 * @param message message to be logged.
    3634                 */
    37                 virtual void log( log_level level, const std::string& message ) = 0;
     35                virtual void log( log_level level, const string_ref& message ) = 0;
    3836                /**
    3937         * Optional timestamp string
    4038                 */
    41                 const char* timestamp() const;
     39                string_ref timestamp() const;
    4240                /**
    4341         * Log level name (unpadded)
    4442                 */
    45                 const char* level_name( log_level level ) const;
     43                string_ref level_name( log_level level ) const;
    4644                /**
    4745         * Log level name (padded)
    4846                 */
    49                 const char* padded_level_name( log_level level ) const;
     47                string_ref padded_level_name( log_level level ) const;
    5048                /**
    5149                 * Enforcement of virtual destructor.
     
    8684                 * @param message message to be logged.
    8785                 */
    88                 virtual void log( log_level level, const std::string& message );
     86                virtual void log( log_level level, const string_ref& message );
    8987
    9088                /**
     
    118116
    119117        protected:
    120                 /** Type for the log sink list. */
    121                 typedef std::list< std::pair< log_level, log_sink* > > log_sink_list;
     118                struct log_sink_info
     119                {
     120                        log_sink* sink;
     121                        uint32    level;
     122                        log_sink_info() : sink( nullptr ), level(0) {}
     123                };
    122124
    123125                /** Log sink list. */
    124                 log_sink_list m_log_sinks;
     126                log_sink_info m_log_sinks[16];
    125127        };
    126128
     
    140142                 * Logging function.
    141143                 */
    142                 virtual void log( log_level level, const std::string& message );
     144                virtual void log( log_level level, const string_ref& message );
    143145
    144146        private:
     
    148150
    149151        /**
    150          * General stream sink.
    151          *
    152          * Logs to passed stream.
    153          */
    154         class log_stream_sink : public log_sink
     152        * General handle sink.
     153        *
     154        * Logs to passed handle.
     155        */
     156        class log_handle_sink : public log_sink
    155157        {
    156158        public:
     
    161163                 * Flushing can be controlled by optional flush parameter.
    162164                 *
    163                  * @param stream stream to be logged to.
     165                 * @param sys_handle system dependent handle to be logged to.
    164166                 * @param flush_always if set to false, wont flush after each line.
    165167                 */
    166                 log_stream_sink( std::ostream* stream, bool flush_always )
    167                         : m_stream(stream), m_flush(flush_always) {}
    168 
    169                 /**
    170                  * Logging function.
    171                  */
    172                 virtual void log( log_level level, const std::string& message );
     168                log_handle_sink( void* sys_handle, bool flush_always )
     169                        : m_handle( sys_handle ), m_flush( flush_always )
     170                {
     171                }
     172
     173                /**
     174                 * Logging function.
     175                 */
     176                virtual void log( log_level level, const string_ref& message );
    173177
    174178        protected:
    175                 /** Stored stream. */
    176                 std::ostream* m_stream;
     179                /** Stored handle. */
     180                void* m_handle;
    177181                /** Controls flushing. */
    178182                bool m_flush;
     
    181185        /**
    182186         * File logger sink.
    183          *
    184          * Logs to std::out -- be sure a console window is open, or std::out redirected!
    185          */
    186         class log_file_sink : public log_stream_sink
    187         {
    188         public:
    189                 /**
    190                  * Constructor.
    191                  *
    192                  * Logs to the file passed. File is closed and disposed of after ending.
    193                  * File is not appended, it's overwritten. If file is not creatable,
    194                  * the constructor will throw!
    195                  *
    196                  * @param file_name file to be logged to.
    197                  * @param flush_always if set to false, wont flush after each line.
    198                  * @throws runtime_error if file_name cannot be opened.
    199                  */
    200                 log_file_sink( const std::string file_name, bool flush_always = true );
    201 
    202                 /**
    203                  * Destructor.
    204                  *
    205                  * Flushes, closes file and disposes of the stream.
    206                  */
     187         */
     188        class log_file_sink : public log_handle_sink
     189        {
     190        public:
     191                /**
     192                * Constructor.
     193                *
     194                * Logs to the file passed. File is closed and disposed of after ending.
     195                * File is not appended, it's overwritten. If file is not createable,
     196                * the constructor will throw!
     197                *
     198                * @param file_name file to be logged to.
     199                * @param flush_always if set to false, wont flush after each line.
     200                */
     201                log_file_sink( const string_ref& file_name, bool flush_always = true );
     202
     203                /**
     204                * Destructor.
     205                *
     206                * Flushes, closes file and disposes of the stream.
     207                */
    207208                virtual ~log_file_sink();
    208209        };
  • trunk/nv/core/logging.hh

    r319 r365  
    1515
    1616#include <nv/core/common.hh>
     17#include <nv/core/string.hh>
    1718#include <nv/core/singleton.hh>
    18 #include <string>
    1919#include <sstream>
     20
     21#include <nv/core/profiler.hh>
     22
     23
    2024
    2125namespace nv
     
    3842        {
    3943        public:
     44                logger_base()
     45                {
     46                        m_pos = m_message;
     47                }
    4048                unsigned int get_level()
    4149                {
     
    4654                        m_level = level;
    4755                }
    48                 virtual void log( log_level level, const std::string& message ) = 0;
     56                virtual void log( log_level level, const string_ref& message ) = 0;
     57                void log_append( string_ref ref )
     58                {
     59                        memcpy( m_pos, ref.data(), ref.size() );
     60                        m_pos += ref.size();
     61                }
     62                void log_append( uint32 u )
     63                {
     64                        m_pos += uint32_to_buffer( u, m_pos );
     65                }
     66                void log_append( sint32 s )
     67                {
     68                        m_pos += sint32_to_buffer( s, m_pos );
     69                }
     70                void log_append( f32 f )
     71                {
     72                        m_pos += f32_to_buffer( f, m_pos );
     73                }
     74                void log( log_level level )
     75                {
     76                        *m_pos = '\0';
     77                        log( level, string_ref( m_message, (size_t) ( m_pos - m_message ) ) );
     78                        m_pos = m_message;
     79                }
     80                static bool can_log( log_level level )
     81                {
     82                        return logger_base::is_valid() && (unsigned int)reference().get_level() >= (unsigned int)level;
     83                }
    4984                virtual ~logger_base() {}
    5085        protected:
     86                char m_message[256];
     87                char* m_pos;
    5188                unsigned int m_level;
    5289        };
    5390
     91        namespace detail
     92        {
     93                inline void streamer( std::stringstream& )
     94                {
     95                        // noop;
     96                }
     97
     98                template < typename T, typename... Args >
     99                inline void streamer( std::stringstream& ss, T&& t, Args&&... args )
     100                {
     101                        ss << t;
     102                        streamer( ss, std::forward<Args>(args)... );
     103                }
     104                inline void logger( log_level level, logger_base& base )
     105                {
     106                        base.log( level );
     107                }
     108
     109                template < typename T, typename... Args >
     110                inline void logger( log_level level, logger_base& base, T&& t, Args&&... args )
     111                {
     112                        base.log_append( t );
     113                        logger( level, base, std::forward<Args>( args )... );
     114                }
     115        }
     116
    54117} // namespace nv
    55118
    56 #define NV_LOG(level, message_stream) \
    57         if ( nv::logger_base::is_valid() && \
    58                 (unsigned int)nv::logger_base::reference().get_level() >= (unsigned int)level ) \
     119#define NV_LOG_STREAM(level, message_stream) \
     120        if ( nv::logger_base::can_log(level) ) \
    59121        {       \
    60122                std::stringstream ss; \
    61                 ss << message_stream; \
    62                 nv::logger_base::reference().log( level, ss.str() ); \
     123                ss << message_stream;\
     124                nv::logger_base::reference().log( level, string_ref( ss.str() ) ); \
    63125        }
    64126
     127#define NV_LOG(level, ...) \
     128        if ( nv::logger_base::can_log(level) ) \
     129                                                                                {       \
     130                NV_PROFILE( "logging" );\
     131                nv::detail::logger( level, nv::logger_base::reference(), __VA_ARGS__ ); \
     132                                }
     133
    65134#if NV_DEBUG == 1
    66 #define NV_DEBUG_LOG(level, message_stream) \
    67         if ( nv::logger_base::is_valid() && \
    68                 (unsigned int)nv::logger_base::reference().get_level() >= (unsigned int)level ) \
     135#define NV_DEBUG_LOG(level, ...) \
     136        if ( nv::logger_base::can_log(level) ) \
    69137        {       \
    70                 std::stringstream ss; \
    71                 ss << message_stream; \
    72                 nv::logger_base::reference().log( level, ss.str() ); \
     138                nv::detail::logger( level, nv::logger_base::reference(), __VA_ARGS__ ); \
    73139        }
    74140#else
    75 #define NV_DEBUG_LOG(level, message_stream)
     141#define NV_DEBUG_LOG(level, ...)
    76142#endif
    77143
     144#define NV_LOG_FATAL(...)    NV_LOG( nv::LOG_FATAL, __VA_ARGS__ )
     145#define NV_LOG_CRITICAL(...) NV_LOG( nv::LOG_CRITICAL, __VA_ARGS__ )
     146#define NV_LOG_ERROR(...)    NV_LOG( nv::LOG_ERROR, __VA_ARGS__ )
     147#define NV_LOG_WARNING(...)  NV_LOG( nv::LOG_WARNING, __VA_ARGS__ )
     148#define NV_LOG_NOTICE(...)   NV_LOG( nv::LOG_NOTICE, __VA_ARGS__ )
     149#define NV_LOG_INFO(...)     NV_LOG( nv::LOG_INFO, __VA_ARGS__ )
     150#define NV_LOG_DEBUG(...)    NV_LOG( nv::LOG_DEBUG, __VA_ARGS__ )
     151#define NV_LOG_TRACE(...)    NV_LOG( nv::LOG_TRACE, __VA_ARGS__ )
     152
    78153#endif // NV_CORE_LOGGING_HH
  • trunk/nv/core/string.hh

    r364 r365  
    3333        using std::string;
    3434
     35
     36
    3537        /**
    3638        * Utility function for converting any value to string.
     
    4951                if ( stream.fail() )
    5052                {
    51                         NV_THROW( runtime_error, "bad cast" );
     53//                      NV_THROW( runtime_error, "bad cast" );
    5254                }
    5355
     
    7981                if ( value.fail() )
    8082                {
    81                         NV_THROW( runtime_error, "bad cast" );
     83//                      NV_THROW( runtime_error, "bad cast" );
    8284                }
    8385        }
     
    98100                if ( value.fail() )
    99101                {
    100                         NV_THROW( runtime_error, "bad cast" );
     102//                      NV_THROW( runtime_error, "bad cast" );
    101103                }
    102104                return vout;
     
    130132        {
    131133                std::ifstream input(filename);
    132                 if ( !input.is_open() ) NV_THROW( std::runtime_error, "File "+filename+" not found!");
     134//              if ( !input.is_open() ) NV_THROW( std::runtime_error, "File "+filename+" not found!");
    133135                std::stringstream sstr;
    134136                while(input >> sstr.rdbuf());
     
    328330                }
    329331
    330                 inline NV_CONSTEXPR char front()  const { return m_data[0]; }
    331                 inline NV_CONSTEXPR char back()   const { return m_data[m_size - 1]; }
     332                inline NV_CONSTEXPR char front()        const { return m_data[0]; }
     333                inline NV_CONSTEXPR char back()         const { return m_data[m_size - 1]; }
    332334                inline NV_CONSTEXPR const char* data()  const { return m_data; }
    333335
     
    472474                // Non-literal constructors
    473475                template< typename U, typename std::enable_if<std::is_same<U, const char*>::value>::type* = nullptr >
     476                inline string_ref( U str ) : string_base( str, std::strlen( str ) ) {}
     477
     478                // Non-literal constructors
     479                template< typename U, typename std::enable_if<std::is_same<U, char*>::value>::type* = nullptr >
    474480                inline string_ref( U str ) : string_base( str, std::strlen( str ) ) {}
    475481
     
    625631#undef NV_STRING_REF_CAST_OPERATORS
    626632
     633size_t sint32_to_buffer( sint32 n, char* str );
     634size_t sint64_to_buffer( sint64 n, char* str );
     635size_t uint32_to_buffer( uint32 n, char* str );
     636size_t uint64_to_buffer( uint64 n, char* str );
     637size_t f32_to_buffer( f32 n, char* str );
     638size_t f64_to_buffer( f64 n, char* str );
     639
    627640
    628641}
  • trunk/nv/lib/assimp.hh

    r319 r365  
    7878        inline void assimp_log_callback( const char* message, char* )
    7979        {
    80                 NV_LOG( LOG_DEBUG, rtrimmed( message ) );
     80                NV_LOG_DEBUG( rtrimmed( message ) );
    8181        }
    8282
  • trunk/src/core/io_event.cc

    r338 r365  
    4646void nv::log_event( const io_event& e )
    4747{
    48         NV_LOG( LOG_INFO, "Event: " << get_io_event_name( e.type ) );
     48        NV_LOG_INFO( "Event: ", get_io_event_name( e.type ) );
    4949}
    5050
  • trunk/src/core/library.cc

    r319 r365  
    7171        return true;
    7272    }
    73     NV_LOG( LOG_NOTICE, "library : loading '" + m_name + "'..." );
     73    NV_LOG_NOTICE( "library : loading '", m_name, "'..." );
    7474
    7575    string name = m_name;
     
    8686    if ( m_handle == NULL )
    8787    {
    88                 NV_LOG( LOG_NOTICE, "library : '" + name + "' failed to open." );
     88                NV_LOG_NOTICE( "library : '", name, "' failed to open." );
    8989                return false;
    9090    }
    91     NV_LOG( LOG_NOTICE, "library : '" + name + "' loaded." );
     91    NV_LOG_NOTICE( "library : '", name, "' loaded." );
    9292        return true;
    9393}
     
    117117    if ( NV_LIB_CLOSE( (NV_LIB_HANDLE)m_handle ) )
    118118    {
    119         NV_LOG( LOG_ERROR, "library : can't close library '" + m_name + "'!" );
     119        NV_LOG_ERROR( "library : can't close library '", m_name, "'!" );
    120120    }
    121121    m_handle = NULL;
  • trunk/src/core/logger.cc

    r319 r365  
    66
    77#include "nv/core/common.hh"
    8 #include <iostream>
    9 #include <utility>
    10 #include <algorithm>
    11 #include <fstream>
    12 #include <ctime>
     8#include "nv/core/time.hh"
    139#include <cstdio>
    14 #include "nv/core/exception.hh"
    1510#if NV_PLATFORM == NV_WINDOWS
    1611#define WIN32_LEAN_AND_MEAN
     
    8984
    9085// log function
    91 void logger::log( log_level level, const std::string& message )
    92 {
    93         // get the iterator to the beginning of the log_sink list
    94         log_sink_list::reverse_iterator it = m_log_sinks.rbegin();
    95 
    96         // iterate
    97         while ( it != m_log_sinks.rend() )
    98         {
    99                 // if we have a log sink with high enough level...
    100                 if ( it->first >= level )
     86void logger::log( log_level level, const string_ref& message )
     87{
     88        for ( auto& sink_info : m_log_sinks )
     89        {
     90                if ( sink_info.sink && (sink_info.level >= (uint32)level) )
    10191                {
    10292                        // log and iterate
    103                         it->second->log( level, message );
     93                        sink_info.sink->log( level, message );
    10494                }
    105                 else
     95        }
     96}
     97
     98// add a new sink
     99void logger::add_sink( log_sink* sink, int level )
     100{
     101        // add a sink
     102        for ( auto& sink_info : m_log_sinks )
     103        {
     104                if ( sink_info.sink == nullptr )
    106105                {
    107                         // otherwise return, the list is sorted by log level
     106                        sink_info.sink  = sink;
     107                        sink_info.level = (uint32)level;
    108108                        return;
    109109                }
    110                 ++it;
    111         }
    112 }
    113 
    114 // add a new sink
    115 void logger::add_sink( log_sink* sink, int level )
    116 {
    117         // add a sink
    118         m_log_sinks.push_back( std::make_pair( log_level(level), sink ) );
    119         // and sort the list (default sort of pairs is by first element)
    120         m_log_sinks.sort();
     110        }
     111        NV_ASSERT( false, "ran out of log sink space!" );
    121112}
    122113
     
    124115bool logger::remove_sink( log_sink* sink )
    125116{
    126         // get the iterator to the beginning of the log_sink list
    127         log_sink_list::iterator it = m_log_sinks.begin();
    128 
    129         // iterate
    130         while ( it != m_log_sinks.end() )
    131         {
    132                 // found?
    133                 if ( it->second == sink )
     117        for ( auto& sink_info : m_log_sinks )
     118        {
     119                if ( sink_info.sink == sink )
    134120                {
    135                         // erase and return true to report success
    136                         m_log_sinks.erase(it);
     121                        delete sink_info.sink;
     122                        sink_info.sink = nullptr;
    137123                        return true;
    138124                }
    139                 ++it;
    140         }
    141 
     125        }
    142126        // not found, return false
    143127        return false;
     
    147131logger::~logger()
    148132{
    149         // while we have sinks
    150         while ( !m_log_sinks.empty() )
    151         {
    152                 // delete the last one
    153                 delete m_log_sinks.back().second;
    154                 // and pop it
    155                 m_log_sinks.pop_back();
     133        // delete all sinks
     134        for ( auto& sink_info : m_log_sinks )
     135        {
     136                delete sink_info.sink;
    156137        }
    157138}
     
    159140
    160141// console logging
    161 void log_console_sink::log( log_level level, const std::string& message )
    162 {
    163         if (m_color)
    164         {
    165 #if NV_PLATFORM == NV_WINDOWS
    166                 SetConsoleTextAttribute( m_handle, FOREGROUND_INTENSITY );
    167                 std::cout << timestamp() << " [";
    168                 SetConsoleTextAttribute( m_handle, log_color[ (level) / 10 ] );
    169                 std::cout << NV_LOG_LEVEL_NAME_PAD(level);
    170                 SetConsoleTextAttribute( m_handle, FOREGROUND_INTENSITY );
    171                 std::cout << "] ";
    172                 SetConsoleTextAttribute( m_handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE );
    173                 std::cout << message << std::endl;
    174 #else
    175                 std::cout << "\33[30;1m" << timestamp() << " [" << log_color[ (level) / 10 ] << NV_LOG_LEVEL_NAME_PAD(level) << "\33[30;1m] \33[37;1m" << message << std::endl;
    176 #endif
    177         }
     142void log_console_sink::log( log_level level, const string_ref& message )
     143{
     144#if NV_PLATFORM == NV_WINDOWS
     145        if ( m_color ) SetConsoleTextAttribute( m_handle, FOREGROUND_INTENSITY );
     146        string_ref stamp( timestamp() );
     147        WriteConsole( m_handle, stamp.data(), stamp.size(), nullptr, nullptr );
     148        WriteConsole( m_handle, " [", 2, nullptr, nullptr );
     149        if (m_color) SetConsoleTextAttribute( m_handle, log_color[( level ) / 10] );
     150        WriteConsole( m_handle, NV_LOG_LEVEL_NAME_PAD( level ), 8, nullptr, nullptr );
     151        if ( m_color ) SetConsoleTextAttribute( m_handle, FOREGROUND_INTENSITY );
     152        WriteConsole( m_handle, "] ", 2, nullptr, nullptr );
     153        if ( m_color ) SetConsoleTextAttribute( m_handle, FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE );
     154        WriteConsole( m_handle, message.data(), message.size(), nullptr, nullptr );
     155        WriteConsole( m_handle, "\n", 1, nullptr, nullptr );
     156#else
     157        if ( m_color ) fwrite( "\33[30;1m", 7, 1, stdout );
     158        fwrite( stamp.data(), stamp.size(), 1, stdout );
     159        fwrite( " [", 2, 1, stdout );
     160        if ( m_color )
     161        {
     162                const char* lcolor = log_color[( level ) / 10];
     163                fwrite( lcolor, strlen(lcolor), 1, stdout );
     164        }
     165        fwrite( NV_LOG_LEVEL_NAME_PAD( level ), 8, 1, stdout );
     166        if ( m_color )
     167                fwrite( "\33[30;1m] \33[37;1m", 16, 1, stdout );
    178168        else
    179         {
    180         std::cout << timestamp() << " [" << NV_LOG_LEVEL_NAME_PAD(level) << "] " << message << std::endl;
    181         }
    182 }
    183 
    184 // stream logging
    185 void log_stream_sink::log( log_level level, const std::string& message )
    186 {
    187         // if flushing is enabled
    188         if ( m_flush )
    189         {
    190                 // write and flush using std::endl
    191                 *m_stream << timestamp() << " [" << NV_LOG_LEVEL_NAME(level) << "] " << message << std::endl;
    192         }
    193         else
    194         {
    195                 // write and end with "\n" (no flush)
    196                 *m_stream << timestamp() << " [" << NV_LOG_LEVEL_NAME(level) << "] " << message << "\n";
    197         }
    198 }
    199 
    200 // file logging
    201 log_file_sink::log_file_sink( const std::string file_name, bool flush_always /*= true */ )
    202         : log_stream_sink( nullptr, flush_always )
    203 {
    204         // create the stream manually
    205         std::ofstream* fstream = new std::ofstream( file_name );
    206 
    207         // check if it's open
    208         if ( !fstream->is_open() )
    209         {
    210                 // throw if not open
    211                 NV_THROW( runtime_error, "Could not open file \""+file_name+"\" for logging!" );
    212         }
    213 
    214         m_stream = fstream;
    215 }
    216 
    217 // file logger destructor
    218 log_file_sink::~log_file_sink()
    219 {
    220         // close the file
    221         dynamic_cast< std::ofstream* >(m_stream)->close();
    222         // dispose of the stream
    223         delete m_stream;
    224 }
     169                fwrite( "] ", 2, 1, stdout );
     170        fwrite( stamp.data(), stamp.size(), 1, stdout );
     171        fwrite( "\n", 1, 1, stdout );
     172#endif
     173}
     174
     175// handle logging
     176void log_handle_sink::log( log_level level, const string_ref& message )
     177{
     178        string_ref stamp( timestamp() );
     179#if 0 // NV_PLATFORM == NV_WINDOWS
     180        // Turns out WriteFile on Windows is unbuffered and quite slower than fwrite
     181        // due to this fact -- especially UNUSABLE with manual FlushFileBuffers
     182        // If we want to get rid of C runtime, this would need a buffered I/O layer.
     183        DWORD unused = 0;
     184        WriteFile( m_handle, stamp.data(), stamp.size(), &unused, nullptr );
     185        WriteFile( m_handle, " [", 2, &unused, nullptr );
     186        WriteFile( m_handle, NV_LOG_LEVEL_NAME_PAD( level ), 8, &unused, nullptr );
     187        WriteFile( m_handle, "] ", 2, &unused, nullptr );
     188        WriteFile( m_handle, message.data(), message.size(), &unused, nullptr );
     189        WriteFile( m_handle, "\n", 1, &unused, nullptr );
     190        //if ( m_flush ) FlushFileBuffers( m_handle );
     191#else
     192        fwrite( stamp.data(), stamp.size(), 1, (FILE*)m_handle );
     193        fwrite( " [", 2, 1, (FILE*)m_handle );
     194        fwrite( NV_LOG_LEVEL_NAME_PAD( level ), 8, 1, (FILE*)m_handle );
     195        fwrite( "] ", 2, 1, (FILE*)m_handle );
     196        fwrite( message.data(), message.size(), 1, (FILE*)m_handle );
     197        fwrite( "\n", 1, 1, (FILE*)m_handle );
     198        if ( m_flush ) fflush( (FILE*)m_handle );
     199#endif
     200}
     201
     202nv::log_file_sink::log_file_sink( const string_ref& file_name, bool flush_always /*= true */ )
     203        : log_handle_sink( nullptr, flush_always )
     204{
     205#if 0 // NV_PLATFORM == NV_WINDOWS
     206        // See comments in log_handle_sink
     207        HANDLE handle = CreateFile( file_name.data(), GENERIC_WRITE, 0, nullptr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr );
     208        if ( INVALID_HANDLE_VALUE == handle )
     209        {
     210                NV_ASSERT( false, "invalid log handle" );
     211        }
     212        m_handle = handle;
     213#else
     214        m_handle = fopen( file_name.data(), "w" );
     215#endif
     216}
     217
     218nv::log_file_sink::~log_file_sink()
     219{
     220#if 0 // NV_PLATFORM == NV_WINDOWS
     221        // See comments in log_handle_sink
     222        CloseHandle( m_handle );
     223#else
     224        fclose( (FILE*) m_handle );
     225#endif
     226}
     227
    225228
    226229nv::log_console_sink::log_console_sink( bool coloring )
     
    234237}
    235238
    236 const char* nv::log_sink::timestamp() const
    237 {
    238         std::clock_t time = std::clock();
    239         unsigned int secs = (unsigned int)(time / CLOCKS_PER_SEC);
    240         unsigned int mm   = (unsigned int)(time*100 / CLOCKS_PER_SEC) % 100;
     239string_ref nv::log_sink::timestamp() const
     240{
     241        uint32 ms = get_system_ms();
     242        unsigned int secs = (unsigned int)(ms / 1000);
     243        unsigned int mm   = (unsigned int)( ms * 100 / 1000 ) % 100;
    241244        unsigned int h    = (unsigned int)(secs / (60*60));
    242245        unsigned int m    = (unsigned int)(secs / 60) % 60;
    243246        unsigned int s    = secs % 60;
    244         static char buffer[128];
    245 #if NV_PLATFORM == NV_WINDOWS
    246         sprintf_s( buffer, 128, "%02d:%02d:%02d.%02d", h, m, s, mm );
    247 #else
    248         sprintf( buffer, "%02d:%02d:%02d.%02d", h, m, s, mm );
     247        static char buffer[16];
     248#if NV_PLATFORM == NV_WINDOWS
     249        sprintf_s( buffer, 16, "%02d:%02d:%02d.%02d", h, m, s, mm );
     250#else
     251        snprintf( buffer, 16, "%02d:%02d:%02d.%02d", h, m, s, mm );
    249252#endif
    250253        buffer[11] = '\0';
    251         return buffer;
    252 }
    253 
    254 const char* nv::log_sink::level_name( log_level level ) const
     254        return string_ref( buffer, 10 );
     255}
     256
     257string_ref nv::log_sink::level_name( log_level level ) const
    255258{
    256259        return NV_LOG_LEVEL_NAME( level );
    257260}
    258261
    259 const char* nv::log_sink::padded_level_name( log_level level ) const
    260 {
    261         return NV_LOG_LEVEL_NAME_PAD( level );
    262 }
     262string_ref nv::log_sink::padded_level_name( log_level level ) const
     263{
     264        return string_ref( NV_LOG_LEVEL_NAME_PAD( level ), 8 );
     265}
     266
  • trunk/src/core/profiler.cc

    r319 r365  
    88#include <ios>
    99#include "nv/core/time.hh"
     10#include "nv/core/logging.hh"
    1011
    1112using namespace nv;
     
    9798}
    9899
    99 
    100100void profiler::log_report()
    101101{
    102102        m_root->stop();
    103         NV_LOG( LOG_INFO, "-- PROFILER REPORT -----------------------------------------" );
    104         NV_LOG( LOG_INFO, std::left << std::setw(24) << "TAG"
     103        NV_LOG_INFO( "-- PROFILER REPORT -----------------------------------------" );
     104        NV_LOG_STREAM( LOG_INFO, std::left << std::setw(24) << "TAG"
    105105                << std::setw(7) << "%PARNT"
    106106                << std::setw(7) << "CALLS"
     
    108108                << std::setw(10) << "AVG(ms)" );
    109109        log_node_children( "", m_root );
    110         NV_LOG( LOG_INFO, "-- PROFILER REPORT END -------------------------------------" );
     110        NV_LOG_INFO( "-- PROFILER REPORT END -------------------------------------" );
    111111        m_root->start();
    112112}
     
    119119                if ( c->m_calls > 0 )
    120120                {
    121                         NV_LOG( LOG_INFO, std::left << std::setw(24) << ind + c->m_tag
     121                        NV_LOG_STREAM( LOG_INFO, std::left << std::setw(24) << ind + c->m_tag
    122122                                << std::setw(7) << std::setprecision(2) << std::fixed << ( (double)c->m_total_time_us / (double)c->m_parent->m_total_time_us ) * 100.0
    123123                                << std::setw(7) << c->m_calls
  • trunk/src/engine/particle_engine.cc

    r361 r365  
    303303        if ( id == "" )
    304304        {
    305                 NV_LOG( LOG_ERROR, "Bad table passed to particle_engine!" )
     305                NV_LOG_ERROR( "Bad table passed to particle_engine!" )
    306306        }
    307307        // TODO : overwrite check
     
    325325        else
    326326        {
    327                 NV_LOG( LOG_ERROR, "Unknown orientation type! (" << orientation << ")!" );
     327                NV_LOG_ERROR( "Unknown orientation type! (", orientation, ")!" );
    328328                data.orientation = particle_orientation::POINT;
    329329        }
     
    341341        else
    342342        {
    343                 NV_LOG( LOG_ERROR, "Unknown particle origin! (" << origin << ")!" );
     343                NV_LOG_ERROR( "Unknown particle origin! (", origin, ")!" );
    344344                data.origin = particle_origin::CENTER;
    345345        }
     
    368368                                {
    369369                                        edata.emmiter_func = nv_particle_emmiter_point;
    370                                         NV_LOG( LOG_WARNING, "Unknown emmiter type in particle system! (" << sub_type << ")" );
     370                                        NV_LOG_WARNING( "Unknown emmiter type in particle system! (", sub_type, ")" );
    371371                                }
    372372
     
    417417                        else
    418418                        {
    419                                 NV_LOG( LOG_ERROR, "Too many emmiters (" << MAX_PARTICLE_EMMITERS << " is MAX)!" );
     419                                NV_LOG_ERROR( "Too many emmiters (", MAX_PARTICLE_EMMITERS, " is MAX)!" );
    420420                        }
    421421                }
     
    433433                                        {
    434434                                                data.affector_count--;
    435                                                 NV_LOG( LOG_WARNING, "Bad data passed to " << sub_type << " affector in particle system!" );
     435                                                NV_LOG_WARNING( "Bad data passed to ", sub_type, " affector in particle system!" );
    436436                                        }
    437437                                }
     
    439439                                {
    440440                                        data.affector_count--;
    441                                         NV_LOG( LOG_WARNING, "Unknown affector type in particle system! (" << sub_type << ")" );
     441                                        NV_LOG_WARNING( "Unknown affector type in particle system! (", sub_type, ")" );
    442442                                }
    443443                        }
    444444                        else
    445445                        {
    446                                 NV_LOG( LOG_ERROR, "Too many affectors (" << MAX_PARTICLE_AFFECTORS << " is MAX)!" );
     446                                NV_LOG_ERROR( "Too many affectors (", MAX_PARTICLE_AFFECTORS, " is MAX)!" );
    447447                        }
    448448                }
    449449                else
    450450                {
    451                         NV_LOG( LOG_WARNING, "Unknown element in particle system! (" << type << ")" );
     451                        NV_LOG_WARNING( "Unknown element in particle system! (", type, ")" );
    452452                }
    453453        }
  • trunk/src/engine/program_manager.cc

    r361 r365  
    77#include "nv/engine/program_manager.hh"
    88#include "nv/core/range.hh"
     9#include "nv/core/logging.hh"
    910#include "nv/lua/lua_nova.hh"
     11
    1012
    1113nv::program_manager::program_manager( context* a_context ) : m_context( a_context )
     
    1719nv::resource_id nv::program_manager::load_resource( lua::table_guard& table )
    1820{
    19         NV_LOG( LOG_DEBUG, table.get_string("id") );
     21        NV_LOG_DEBUG( table.get_string("id") );
    2022        std::string vsource;
    2123        std::string fsource;
  • trunk/src/fmod/fmod_audio.cc

    r330 r365  
    2424        if ( result != FMOD_OK )
    2525        {
    26                 NV_LOG( LOG_CRITICAL, "Failed to create FMOD System -- " << FMOD_ErrorString( result ) );
     26                NV_LOG_CRITICAL( "Failed to create FMOD System -- ", FMOD_ErrorString( result ) );
    2727                return;
    2828        }
     
    3030        if ( result != FMOD_OK )
    3131        {
    32                 NV_LOG( LOG_ERROR, "Failed to initialize FMOD System -- " << FMOD_ErrorString( result ) );
     32                NV_LOG_ERROR( "Failed to initialize FMOD System -- ", FMOD_ErrorString( result ) );
    3333                return;
    3434        }
     
    4747                if ( result != FMOD_OK )
    4848                {
    49                         NV_LOG( LOG_WARNING, "FMOD failed to play sound -- " << FMOD_ErrorString( result ) );
     49                        NV_LOG_WARNING( "FMOD failed to play sound -- ", FMOD_ErrorString( result ) );
    5050                }
    5151                else
     
    7070                if ( result != FMOD_OK )
    7171                {
    72                         NV_LOG( LOG_WARNING, "FMOD failed to play sound -- " << FMOD_ErrorString( result ) );
     72                        NV_LOG_WARNING( "FMOD failed to play sound -- ", FMOD_ErrorString( result ) );
    7373                }
    7474                else
     
    9595        if ( fm_result != FMOD_OK )
    9696        {
    97                 NV_LOG( LOG_ERROR, "FMOD failed to load sample '" << a_path << "' -- " << FMOD_ErrorString( fm_result ) );
     97                NV_LOG_ERROR( "FMOD failed to load sample '", a_path, "' -- ", FMOD_ErrorString( fm_result ) );
    9898                return sound();
    9999        }
  • trunk/src/formats/assimp_loader.cc

    r332 r365  
    8989        m_scene = nullptr;
    9090        m_mesh_count = 0;
    91         NV_LOG( nv::LOG_NOTICE, "AssImp loading file..." );
     91        NV_LOG_NOTICE( "AssImp loading file..." );
    9292        size_t size = source.size();
    9393        char* data  = new char[ size ];
     
    9797        if( !scene)
    9898        {
    99                 NV_LOG( nv::LOG_ERROR, aiGetErrorString() );
     99                NV_LOG_ERROR( aiGetErrorString() );
    100100                return false;
    101101        }
    102102        m_scene      = scene;
    103103        m_mesh_count = scene->mNumMeshes;
    104         NV_LOG( nv::LOG_NOTICE, "Loading successfull" );
     104        NV_LOG_NOTICE( "Loading successfull" );
    105105        return true;
    106106}
     
    213213        if ( scene == nullptr ) return;
    214214
    215         NV_LOG( nv::LOG_NOTICE, "------------------------" );
    216         NV_LOG( nv::LOG_NOTICE, "Texture   count - " << scene->mNumTextures );
    217         NV_LOG( nv::LOG_NOTICE, "Animation count - " << scene->mNumAnimations );
    218         NV_LOG( nv::LOG_NOTICE, "Material  count - " << scene->mNumMaterials );
    219         NV_LOG( nv::LOG_NOTICE, "Meshes    count - " << scene->mNumMeshes );
    220         NV_LOG( nv::LOG_NOTICE, "------------------------" );
     215        NV_LOG_NOTICE( "------------------------" );
     216        NV_LOG_NOTICE( "Texture   count - ", scene->mNumTextures );
     217        NV_LOG_NOTICE( "Animation count - ", scene->mNumAnimations );
     218        NV_LOG_NOTICE( "Material  count - ", scene->mNumMaterials );
     219        NV_LOG_NOTICE( "Meshes    count - ", scene->mNumMeshes );
     220        NV_LOG_NOTICE( "------------------------" );
    221221
    222222        aiNode* root = scene->mRootNode;
    223223        if (root)
    224224        {
    225                 NV_LOG( nv::LOG_NOTICE, "Root node  - " << root->mName.data );
    226                 NV_LOG( nv::LOG_NOTICE, "  meshes   - " << root->mNumMeshes );
    227                 NV_LOG( nv::LOG_NOTICE, "  children - " << root->mNumChildren );
     225                NV_LOG_NOTICE( "Root node  - ", root->mName.data );
     226                NV_LOG_NOTICE( "  meshes   - ", root->mNumMeshes );
     227                NV_LOG_NOTICE( "  children - ", root->mNumChildren );
    228228        }
    229229        else
    230230        {
    231                 NV_LOG( nv::LOG_NOTICE, "No root node!" );
    232         }
    233         NV_LOG( nv::LOG_NOTICE, "------------------------" );
     231                NV_LOG_NOTICE( "No root node!" );
     232        }
     233        NV_LOG_NOTICE( "------------------------" );
    234234
    235235        if ( scene->mNumMeshes > 0 )
     
    239239                        aiMesh* mesh = scene->mMeshes[mc];
    240240
    241                         NV_LOG( nv::LOG_NOTICE, "Mesh #"<<mc<<"   - " << std::string( mesh->mName.data ) );
    242                         NV_LOG( nv::LOG_NOTICE, "  bones   - " << mesh->mNumBones );
    243                         NV_LOG( nv::LOG_NOTICE, "  uvs     - " << mesh->mNumUVComponents[0] );
    244                         NV_LOG( nv::LOG_NOTICE, "  verts   - " << mesh->mNumVertices );
    245                         NV_LOG( nv::LOG_NOTICE, "  faces   - " << mesh->mNumFaces );
    246 
    247                         //                      NV_LOG( nv::LOG_NOTICE, "Bones:" );
     241                        NV_LOG_NOTICE( "Mesh #", mc, "   - ", std::string( mesh->mName.data ) );
     242                        NV_LOG_NOTICE( "  bones   - ", mesh->mNumBones );
     243                        NV_LOG_NOTICE( "  uvs     - ", mesh->mNumUVComponents[0] );
     244                        NV_LOG_NOTICE( "  verts   - ", mesh->mNumVertices );
     245                        NV_LOG_NOTICE( "  faces   - ", mesh->mNumFaces );
     246
     247                        //                      NV_LOG_NOTICE( "Bones:" );
    248248                        //                      for (unsigned int m=0; m<mesh->mNumBones; m++)
    249249                        //                      {
    250250                        //                              aiBone* bone  = mesh->mBones[m];
    251                         //                              NV_LOG( nv::LOG_DEBUG, bone->mName.C_Str() );
     251                        //                              NV_LOG_NOTICE( bone->mName.C_Str() );
    252252                        //                      }
    253253                }
     
    255255        else
    256256        {
    257                 NV_LOG( nv::LOG_NOTICE, "No meshes!" );
    258         }
    259         NV_LOG( nv::LOG_NOTICE, "------------------------" );
     257                NV_LOG_NOTICE( "No meshes!" );
     258        }
     259        NV_LOG_NOTICE( "------------------------" );
    260260
    261261
     
    270270        //                      {
    271271        //                              texFound = scene->mMaterials[m]->GetTexture(aiTextureType_DIFFUSE, texIndex, &path);
    272         //                              NV_LOG( nv::LOG_NOTICE, "  material - " << path.data );
     272        //                              NV_LOG_NOTICE( "  material - ", path.data );
    273273        //                              texIndex++;
    274274        //                      }
     
    277277        //      else
    278278        //      {
    279         //              NV_LOG( nv::LOG_NOTICE, "No materials" );
     279        //              NV_LOG_NOTICE( "No materials" );
    280280        //      }
    281         //      NV_LOG( nv::LOG_NOTICE, "------------------------" );
     281        //      NV_LOG_NOTICE( "------------------------" );
    282282
    283283}
  • trunk/src/formats/md2_loader.cc

    r319 r365  
    155155        }
    156156
    157         NV_LOG( LOG_INFO, "num_skins    = " << md2->header.num_skins );
    158         NV_LOG( LOG_INFO, "num_vertices = " << md2->header.num_vertices );
    159         NV_LOG( LOG_INFO, "num_st       = " << md2->header.num_st );
    160         NV_LOG( LOG_INFO, "num_tris     = " << md2->header.num_tris );
    161         NV_LOG( LOG_INFO, "num_frames   = " << md2->header.num_frames );
     157        NV_LOG_INFO( "num_skins    = ", md2->header.num_skins );
     158        NV_LOG_INFO( "num_vertices = ", md2->header.num_vertices );
     159        NV_LOG_INFO( "num_st       = ", md2->header.num_st );
     160        NV_LOG_INFO( "num_tris     = ", md2->header.num_tris );
     161        NV_LOG_INFO( "num_frames   = ", md2->header.num_frames );
    162162
    163163
     
    295295        }
    296296
    297         NV_LOG( LOG_INFO, "New vertex count = " << m_new_vindexes.size() );
    298         NV_LOG( LOG_INFO, "Collisions       = " << stats_collision );
    299         NV_LOG( LOG_INFO, "Reuse count      = " << stats_reuse );
     297        NV_LOG_INFO( "New vertex count = ", m_new_vindexes.size() );
     298        NV_LOG_INFO( "Collisions       = ", stats_collision );
     299        NV_LOG_INFO( "Reuse count      = ", stats_reuse );
    300300}
    301301
     
    335335        {
    336336                const md2_frame_t& cframe = md2->frames[current_frame];
    337                 NV_LOG( LOG_INFO, "FrameID = " << cframe.name );
     337                NV_LOG_INFO( "FrameID = ", cframe.name );
    338338
    339339                vec3 scale     = md2_vec3( cframe.scale );
  • trunk/src/gfx/texture_font.cc

    r319 r365  
    99#include <stdexcept>
    1010#include "nv/lib/freetype2.hh"
     11#include "nv/core/logging.hh"
    1112
    1213using namespace nv;
  • trunk/src/gl/gl_context.cc

    r364 r365  
    88#include "nv/lib/gl.hh"
    99#include "nv/gl/gl_device.hh"
     10#include "nv/core/logger.hh"
    1011
    1112using namespace nv;
     
    168169                switch ( result )
    169170                {
    170                 case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT         : NV_LOG( LOG_ERROR, "gl_context::check : Framebuffer incomplete attachment!" ); break;
    171                 case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT : NV_LOG( LOG_ERROR, "gl_context::check : Framebuffer missing attachment!" ); break;
    172                 case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS         : NV_LOG( LOG_ERROR, "gl_context::check : Framebuffer incomplete dimensions!" ); break;
    173                 case GL_FRAMEBUFFER_INCOMPLETE_FORMATS            : NV_LOG( LOG_ERROR, "gl_context::check : Framebuffer incomplete formats!" ); break;
    174                 case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER        : NV_LOG( LOG_ERROR, "gl_context::check : Framebuffer incomplete draw buffer!" ); break;
    175                 case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER        : NV_LOG( LOG_ERROR, "gl_context::check : Framebuffer incomplete read buffer!" ); break;
    176                 case GL_FRAMEBUFFER_UNSUPPORTED                   : NV_LOG( LOG_ERROR, "gl_context::check : Framebuffer format combination unsupported!" ); break;
    177                 default : NV_LOG( LOG_ERROR, "gl_context::check : Unknown Framebuffer error! (" << result << ")" ); break;
     171                case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT         : NV_LOG_ERROR( "gl_context::check : Framebuffer incomplete attachment!" ); break;
     172                case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT : NV_LOG_ERROR( "gl_context::check : Framebuffer missing attachment!" ); break;
     173                case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS         : NV_LOG_ERROR( "gl_context::check : Framebuffer incomplete dimensions!" ); break;
     174                case GL_FRAMEBUFFER_INCOMPLETE_FORMATS            : NV_LOG_ERROR( "gl_context::check : Framebuffer incomplete formats!" ); break;
     175                case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER        : NV_LOG_ERROR( "gl_context::check : Framebuffer incomplete draw buffer!" ); break;
     176                case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER        : NV_LOG_ERROR( "gl_context::check : Framebuffer incomplete read buffer!" ); break;
     177                case GL_FRAMEBUFFER_UNSUPPORTED                   : NV_LOG_ERROR( "gl_context::check : Framebuffer format combination unsupported!" ); break;
     178                default: NV_LOG_ERROR( "gl_context::check : Unknown Framebuffer error! (", result, ")" ); break;
    178179                }
    179180        }
    180181        else
    181182        {
    182                 NV_LOG( LOG_ERROR, "gl_context::check : Framebuffer extensions not loaded!" );
     183                NV_LOG_ERROR( "gl_context::check : Framebuffer extensions not loaded!" );
    183184        }
    184185        return false;
  • trunk/src/gl/gl_device.cc

    r364 r365  
    4141        if (!image)
    4242        {
    43                 NV_LOG( LOG_ERROR, "Image file " << filename << " not found!" );
     43                NV_LOG_ERROR( "Image file ", filename, " not found!" );
    4444                return nullptr;
    4545        }
     
    5959        if ( !image )
    6060        {
    61                 NV_LOG( LOG_ERROR, "Image binary data cannot be loaded found!" );
     61                NV_LOG_ERROR( "Image binary data cannot be loaded found!" );
    6262                return nullptr;
    6363        }
     
    228228                if ( fatal )
    229229                {
    230                         NV_LOG( LOG_ERROR, "Uniform '" << name << "' not found in program!" );
     230                        NV_LOG_ERROR( "Uniform '", name, "' not found in program!" );
    231231                        NV_THROW( runtime_error, ( "Uniform '"+name+"' not found!" ) );
    232232                }
     
    247247                if ( fatal )
    248248                {
    249                         NV_LOG( LOG_ERROR, "Attribute '" << name << "' not found in program!" );
    250                         NV_THROW( runtime_error, ( "Attribute '"+name+"' not found!" ) );
     249                        NV_LOG_ERROR( "Attribute '", name, "' not found in program!" );
     250                        NV_THROW( runtime_error, ( "Attribute '"+ name + "' not found!" ) );
    251251                }
    252252        }
     
    279279        glGetProgramInfoLog( p->glid, buffer_size, &length, buffer );
    280280
    281         NV_LOG( LOG_INFO, "Program #" << p->glid << (status == GL_FALSE ? " failed to compile!" : " compiled successfully.") );
     281        NV_LOG_INFO( "Program #", p->glid, (status == GL_FALSE ? " failed to compile!" : " compiled successfully.") );
    282282
    283283        if ( length > 0 )
    284284        {
    285                 NV_LOG( LOG_INFO, "Program #" << p->glid << " log: " << buffer );
     285                NV_LOG_INFO( "Program #", p->glid, " log: ", buffer );
    286286        }
    287287
     
    297297        {
    298298                glGetProgramInfoLog( p->glid, buffer_size, &length, buffer );
    299                 NV_LOG( LOG_ERROR, "Program #" << p->glid << " validation error : " << buffer );
     299                NV_LOG_ERROR( "Program #", p->glid, " validation error : ", buffer );
    300300                return false;
    301301        }
     
    418418                if ( compile_ok == 0 )
    419419                {
    420                         NV_LOG( LOG_ERROR, "Shader #" << glid << " error: " << buffer );
     420                        NV_LOG_ERROR( "Shader #", glid, " error: ", buffer );
    421421                }
    422422                else
    423423                {
    424                         NV_LOG( LOG_INFO, "Shader #" << glid << " compiled successfully: " << buffer );
     424                        NV_LOG_INFO( "Shader #", glid, " compiled successfully: ", buffer );
    425425                }
    426426        }
    427427        else
    428428        {
    429                 NV_LOG( LOG_INFO, "Shader #" << glid << " compiled successfully." );
     429                NV_LOG_INFO( "Shader #", glid, " compiled successfully." );
    430430        }
    431431        return compile_ok != 0;
  • trunk/src/gui/gui_ascii_renderer.cc

    r364 r365  
    66
    77#include "nv/gui/gui_ascii_renderer.hh"
     8
     9#include "nv/core/logging.hh"
    810
    911using namespace nv;
     
    115117        // TODO: FIX
    116118        int fix_me;
    117         NV_LOG( nv::LOG_DEBUG, "on_hover_change" );
     119        NV_LOG_DEBUG( "on_hover_change" );
    118120        e->m_flags[DIRTY] = true;
    119121}
     
    123125        // TODO: FIX
    124126        int fix_me;
    125         NV_LOG( nv::LOG_DEBUG, "on_select_change" );
     127        NV_LOG_DEBUG( "on_select_change" );
    126128        e->m_flags[DIRTY] = true;
    127129}
  • trunk/src/gui/gui_gfx_renderer.cc

    r364 r365  
    143143        , m_reupload( true )
    144144{
    145         NV_LOG( LOG_TRACE, "Creating GUI renderer..." );
     145        NV_LOG_TRACE( "Creating GUI renderer..." );
    146146        m_context = w->get_context();
    147147        m_area.dim( dimension( w->get_width(), w->get_height() ) );
     
    154154        delete[] wfill;
    155155
    156         NV_LOG( LOG_TRACE, "Creating render data..." );
     156        NV_LOG_TRACE( "Creating render data..." );
    157157        screen_render_data* sr = new screen_render_data( w->get_context(), 1024 );
    158158        m_render_data = sr;
     
    174174        m_render_state.blending.src_alpha_factor = blending::SRC_ALPHA;
    175175        m_render_state.blending.dst_alpha_factor = blending::ONE_MINUS_SRC_ALPHA;
    176         NV_LOG( LOG_TRACE, "GUI Renderer created" );
     176        NV_LOG_TRACE( "GUI Renderer created" );
    177177}
    178178
     
    347347        // TODO: FIX
    348348        int fix_me;
    349         NV_LOG( nv::LOG_DEBUG, "on_hover_change" );
     349        NV_LOG_DEBUG( "on_hover_change" );
    350350        e->m_flags[DIRTY] = true;
    351351}
     
    355355        // TODO: FIX
    356356        int fix_me;
    357         NV_LOG( nv::LOG_DEBUG, "on_select_change" );
     357        NV_LOG_DEBUG( "on_select_change" );
    358358        e->m_flags[DIRTY] = true;
    359359}
  • trunk/src/lib/gl.cc

    r331 r365  
    77#include "nv/core/common.hh"
    88#include "nv/core/range.hh"
     9#include "nv/core/logging.hh"
    910#include "nv/lib/gl.hh"
    1011
     
    5859{
    5960        void* result = gl_ext_loader( name );
    60         NV_LOG( ( result ? nv::LOG_DEBUG : fail_level ), "load_gl_ext_symbol : " << name << ( result ? " succeded." : "failed." ) );
     61        NV_LOG( ( result ? nv::LOG_DEBUG : fail_level ), "load_gl_ext_symbol : ", name, ( result ? " succeded." : "failed." ) );
    6162        return result;
    6263}
     
    237238        if ( !gl_library.is_open() )
    238239        {
    239                 NV_LOG( nv::LOG_ERROR, "load_gl_extension used, while gl_library was closed!" );
     240                NV_LOG_ERROR( "load_gl_extension used, while gl_library was closed!" );
    240241                return false;
    241242        }
     
    243244        if ( gl_ext_loader == nullptr )
    244245        {
    245                 NV_LOG( nv::LOG_ERROR, "load_gl_extension used, while gl_ext_loader was undefined!" );
     246                NV_LOG_ERROR( "load_gl_extension used, while gl_ext_loader was undefined!" );
    246247                return false;
    247248        }
    248         NV_LOG( nv::LOG_DEBUG, "load_gl_extension - loading extension - \"" << name << "\"..." );
     249        NV_LOG_DEBUG( "load_gl_extension - loading extension - \"", name, "\"..." );
    249250
    250251        uint32 count      = 0;
     
    264265        } break;
    265266        default : {
    266                 NV_LOG( nv::LOG_ERROR, "load_gl_extension - unknown extension \"" << name << "\"!" );
     267                NV_LOG_ERROR( "load_gl_extension - unknown extension \"", name, "\"!" );
    267268                return nullptr;
    268269        }
     
    272273        if ( fail_count == 0 )
    273274        {
    274                 NV_LOG( nv::LOG_NOTICE, "load_gl_extension - extension \"" << name << "\" loaded (" << count << " symbols)" );
     275                NV_LOG_NOTICE( "load_gl_extension - extension \"", name, "\" loaded (", count, " symbols)" );
    275276                gl_loaded_extensions = (gl_extensions)( gl_loaded_extensions | (unsigned)extension );
    276277                return false;
    277278        }
    278         NV_LOG( nv::LOG_NOTICE, "load_gl_extension - failed to load extension \"" << name << "\" (" << count << "/" << fail_count << " symbols loaded)" );
     279        NV_LOG_NOTICE( "load_gl_extension - failed to load extension \"", name, "\" (", count, "/", fail_count, " symbols loaded)" );
    279280        return true;
    280281}
  • trunk/src/lua/lua_handle.cc

    r364 r365  
    77#include "nv/lua/lua_handle.hh"
    88
     9#include "nv/core/logging.hh"
    910#include "nv/lua/lua_state.hh"
    1011#include "nv/lua/lua_raw.hh"
     
    1819        if ( !lua_istable( L, -1 ) )
    1920        {
    20                 NV_LOG( nv::LOG_ERROR, "NIL" );
     21                NV_LOG_ERROR( "NIL" );
    2122                lua_pop( L, 2 );
    2223                lua_pushnil( L );
  • trunk/src/lua/lua_state.cc

    r361 r365  
    111111        if ( !p.resolve( m_state, global ) )
    112112        {
    113                 NV_LOG( LOG_ERROR, "Lua error : not a valid path - " + p.to_string() );
     113                NV_LOG_ERROR( "Lua error : not a valid path - ", p.to_string() );
    114114                return false;
    115115        }
     
    118118        {
    119119                lua_pop( m_state, 1 );
    120                 NV_LOG( LOG_ERROR, "Lua error : not a valid function - " + p.to_string() );
     120                NV_LOG_ERROR( "Lua error : not a valid function - ", p.to_string() );
    121121                return false;
    122122        }
     
    129129        if ( status != 0 )
    130130        {
    131                 NV_LOG( LOG_ERROR, "Lua error : " << lua_tostring( m_state, -1 ) );
     131                NV_LOG_ERROR( "Lua error : ", lua_tostring( m_state, -1 ) );
    132132                lua_pop( m_state, 1 );
    133133        }
     
    144144        if ( !p.resolve( m_state, global ) || lua_type(m_state, -1) != LUA_TTABLE )
    145145        {
    146                 NV_LOG( LOG_ERROR, "Could not resolve table!" );
     146                NV_LOG_ERROR( "Could not resolve table!" );
    147147                // TODO : error handling
    148148        }
     
    156156        if ( !p.resolve( m_state, false ) || lua_type(m_state, -1) != LUA_TTABLE )
    157157        {
    158                 NV_LOG( LOG_ERROR, "Could not resolve table!" );
     158                NV_LOG_ERROR( "Could not resolve table!" );
    159159                // TODO : error handling
    160160        }
     
    347347        }
    348348
    349         NV_LOG( nv::LOG_TRACE, "Lua state created" );
     349        NV_LOG_TRACE( "Lua state created" );
    350350}
    351351
    352352int lua::state::load_string( string_ref code, string_ref name )
    353353{
    354         NV_LOG( nv::LOG_TRACE, "Loading Lua string '" << name << "'");
     354        NV_LOG_TRACE( "Loading Lua string '", name, "'");
    355355        return luaL_loadbuffer( m_state, code.data(), code.length(), name.data() );
    356356}
     
    358358int lua::state::load_stream( std::istream& stream, string_ref name )
    359359{
    360         NV_LOG( nv::LOG_NOTICE, "Loading Lua stream '" << name << "'");
     360        NV_LOG_NOTICE( "Loading Lua stream '", name, "'");
    361361        return load_string( std::string(
    362362                (std::istreambuf_iterator<char>(stream)),
     
    366366int lua::state::load_file( string_ref filename )
    367367{
    368         NV_LOG( nv::LOG_NOTICE, "Loading Lua file '" << filename << "'");
     368        NV_LOG_NOTICE( "Loading Lua file '", filename, "'");
    369369        return luaL_loadfile( m_state, filename.data() );
    370370}
     
    376376        if (result)
    377377        {
    378                 NV_LOG( nv::LOG_WARNING, "Failed to load string " << name << ": " << lua_tostring(m_state, -1));
     378                NV_LOG_WARNING( "Failed to load string ", name, ": ", lua_tostring(m_state, -1));
    379379                return false;
    380380        }
     
    388388        if (result)
    389389        {
    390                 NV_LOG( nv::LOG_WARNING, "Failed to open stream " << name << ": " << lua_tostring(m_state, -1));
     390                NV_LOG_WARNING( "Failed to open stream ", name, ": ", lua_tostring( m_state, -1 ) );
    391391                return false;
    392392        }
     
    400400        if (result)
    401401        {
    402                 NV_LOG( nv::LOG_WARNING, "Failed to open file " << filename << ": " << lua_tostring(m_state, -1));
     402                NV_LOG_WARNING( "Failed to open file ", filename, ": ", lua_tostring( m_state, -1 ) );
    403403                return false;
    404404        }
     
    411411        if (result)
    412412        {
    413                 NV_LOG( nv::LOG_WARNING, "Failed to run script " << name << ": " << lua_tostring(m_state, -1));
     413                NV_LOG_WARNING( "Failed to run script ", name, ": ", lua_tostring( m_state, -1 ) );
    414414                lua_pop( m_state, 1 );
    415415        }
     
    425425{
    426426        int top = lua_gettop(m_state);
    427         NV_LOG( LOG_DEBUG, "Stack dump (" << top << ")");
     427        NV_LOG_DEBUG( "Stack dump (", top, ")");
    428428        for ( int i = 0; i < top; ++i )
    429429        {
    430                 NV_LOG( LOG_DEBUG, "#" << i+1 << " - " << lua_typename(m_state, lua_type(m_state, i+1) ) << " = " << nlua_typecontent(m_state, i+1) );
     430                NV_LOG_DEBUG( "#", i+1, " - ", lua_typename(m_state, lua_type(m_state, i+1) ), " = ", nlua_typecontent(m_state, i+1) );
    431431        }
    432432}
  • trunk/src/sdl/sdl_audio.cc

    r330 r365  
    2121        if ( SDL_Init( SDL_INIT_AUDIO ) == -1 )
    2222        {
    23                 NV_LOG( LOG_CRITICAL, "SDL_AUDIO failed to load -- " << SDL_GetError() );
     23                NV_LOG_CRITICAL( "SDL_AUDIO failed to load -- ", SDL_GetError() );
    2424                return;
    2525        }
     
    2727        if( Mix_OpenAudio( 44100, MIX_DEFAULT_FORMAT, 2, 1024 ) == -1 )
    2828        {
    29                 NV_LOG( LOG_CRITICAL, "SDL_mixer failed to load -- " << Mix_GetError() );
     29                NV_LOG_CRITICAL( "SDL_mixer failed to load -- ", Mix_GetError() );
    3030                return;
    3131        }
     
    4040                if ( channel == -1 )
    4141                {
    42                         NV_LOG( LOG_WARNING, "SDL_mixer failed to play -- " << Mix_GetError() );
     42                        NV_LOG_WARNING( "SDL_mixer failed to play -- ", Mix_GetError() );
    4343                }
    4444                else
     
    6767                if ( channel == -1 )
    6868                {
    69                         NV_LOG( LOG_WARNING, "SDL_mixer failed to play -- " << Mix_GetError() );
     69                        NV_LOG_WARNING( "SDL_mixer failed to play -- ", Mix_GetError() );
    7070                }
    7171                else
     
    9191        if ( Mix_LoadWAV_RW == nullptr || SDL_RWFromFile == nullptr )
    9292        {
    93                 NV_LOG( LOG_ERROR, "SDL_mixer not loaded!" );
     93                NV_LOG_ERROR( "SDL_mixer not loaded!" );
    9494        }
    9595        Mix_Chunk *sample = Mix_LoadWAV_RW(SDL_RWFromFile(a_path.c_str(), "rb"), 1);
    9696        if ( sample == nullptr )
    9797        {
    98                 NV_LOG( LOG_ERROR, "SDL_mixer failed to load sample '" << a_path << "' -- " << Mix_GetError() );
     98                NV_LOG_ERROR( "SDL_mixer failed to load sample '", a_path, "' -- ", Mix_GetError() );
    9999                return sound();
    100100        }
  • trunk/src/sdl/sdl_window.cc

    r343 r365  
    3838        if ( m_handle == 0 )
    3939        {
    40                 NV_LOG( LOG_CRITICAL, "Video mode set failed: " << SDL_GetError( ) );
     40                NV_LOG_CRITICAL( "Video mode set failed: ", SDL_GetError( ) );
    4141                return; // TODO: Error report
    4242        }
     
    5656        if ( ctx_handle == 0 )
    5757        {
    58                 NV_LOG( LOG_CRITICAL, "GL Context creation failed: " << SDL_GetError( ) );
     58                NV_LOG_CRITICAL( "GL Context creation failed: ", SDL_GetError( ) );
    5959                return; // TODO: Error report
    6060        }
    6161
    6262        nv::load_gl_library();
    63         NV_LOG( LOG_INFO, "OpenGL Vendor       : " << glGetString(GL_VENDOR) );
    64         NV_LOG( LOG_INFO, "OpenGL Renderer     : " << glGetString(GL_RENDERER) );
    65         NV_LOG( LOG_INFO, "OpenGL Version      : " << glGetString(GL_VERSION) );
    66         NV_LOG( LOG_INFO, "OpenGL GLSL Version : " << glGetString(GL_SHADING_LANGUAGE_VERSION) );
     63        NV_LOG_INFO( "OpenGL Vendor       : ", (const char*)glGetString(GL_VENDOR) );
     64        NV_LOG_INFO( "OpenGL Renderer     : ", (const char*)glGetString( GL_RENDERER ) );
     65        NV_LOG_INFO( "OpenGL Version      : ", (const char*)glGetString( GL_VERSION ) );
     66        NV_LOG_INFO( "OpenGL GLSL Version : ", (const char*)glGetString( GL_SHADING_LANGUAGE_VERSION ) );
    6767        SDL_GL_SetSwapInterval(1);
    6868
  • trunk/src/sdl/sdl_window_manager.cc

    r336 r365  
    1919        if ( SDL_Init(0) < 0 )
    2020        {
    21                 NV_LOG( LOG_CRITICAL, "SDL initialization failed: " << SDL_GetError( ) );
     21                NV_LOG_CRITICAL( "SDL initialization failed: ", SDL_GetError( ) );
    2222                return; // TODO: Error report
    2323        }
Note: See TracChangeset for help on using the changeset viewer.