synched with trunk at revision 36569
[blender.git] / extern / recastnavigation / Recast / Source / RecastLog.cpp
1 //
2 // Copyright (c) 2009 Mikko Mononen memon@inside.org
3 //
4 // This software is provided 'as-is', without any express or implied
5 // warranty.  In no event will the authors be held liable for any damages
6 // arising from the use of this software.
7 // Permission is granted to anyone to use this software for any purpose,
8 // including commercial applications, and to alter it and redistribute it
9 // freely, subject to the following restrictions:
10 // 1. The origin of this software must not be misrepresented; you must not
11 //    claim that you wrote the original software. If you use this software
12 //    in a product, an acknowledgment in the product documentation would be
13 //    appreciated but is not required.
14 // 2. Altered source versions must be plainly marked as such, and must not be
15 //    misrepresented as being the original software.
16 // 3. This notice may not be removed or altered from any source distribution.
17 //
18
19 #include "RecastLog.h"
20 #include <stdio.h>
21 #include <stdarg.h>
22
23 static rcLog* g_log = 0;
24 static rcBuildTimes* g_btimes = 0;
25
26 rcLog::rcLog() :
27         m_messageCount(0),
28         m_textPoolSize(0)
29 {
30 }
31
32 rcLog::~rcLog()
33 {
34         if (g_log == this)
35                 g_log = 0;
36 }
37
38 void rcLog::log(rcLogCategory category, const char* format, ...)
39 {
40         if (m_messageCount >= MAX_MESSAGES)
41                 return;
42         char* dst = &m_textPool[m_textPoolSize];
43         int n = TEXT_POOL_SIZE - m_textPoolSize;
44         if (n < 2)
45                 return;
46         // Store category
47         *dst = (char)category;
48         n--;
49         // Store message
50         va_list ap;
51         va_start(ap, format);
52         int ret = vsnprintf(dst+1, n-1, format, ap);
53         va_end(ap);
54         if (ret > 0)
55                 m_textPoolSize += ret+2;
56         m_messages[m_messageCount++] = dst;
57 }
58
59 void rcSetLog(rcLog* log)
60 {
61         g_log = log;
62 }
63
64 rcLog* rcGetLog()
65 {
66         return g_log;
67 }
68
69 void rcSetBuildTimes(rcBuildTimes* btimes)
70 {
71         g_btimes = btimes;
72 }
73
74 rcBuildTimes* rcGetBuildTimes()
75 {
76         return g_btimes;
77 }