1 /*
2 * Copyright (C) 2012 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26 #ifndef DataLog_h
27 #define DataLog_h
28
29 #include "wtf/Assertions.h"
30 #include "wtf/FilePrintStream.h"
31
32 #include <stdarg.h>
33 #include <stdio.h>
34
35 namespace WTF {
36
37 FilePrintStream& dataFile();
38
39 void dataLogFV(const char* format, va_list) WTF_ATTRIBUTE_PRINTF(1, 0);
40 void dataLogF(const char* format, ...) WTF_ATTRIBUTE_PRINTF(1, 2);
41 void dataLogFString(const char*);
42
43 template<typename T>
dataLog(const T & value)44 void dataLog(const T& value)
45 {
46 dataFile().print(value);
47 }
48
49 template<typename T1, typename T2>
dataLog(const T1 & value1,const T2 & value2)50 void dataLog(const T1& value1, const T2& value2)
51 {
52 dataFile().print(value1, value2);
53 }
54
55 template<typename T1, typename T2, typename T3>
dataLog(const T1 & value1,const T2 & value2,const T3 & value3)56 void dataLog(const T1& value1, const T2& value2, const T3& value3)
57 {
58 dataFile().print(value1, value2, value3);
59 }
60
61 template<typename T1, typename T2, typename T3, typename T4>
dataLog(const T1 & value1,const T2 & value2,const T3 & value3,const T4 & value4)62 void dataLog(const T1& value1, const T2& value2, const T3& value3, const T4& value4)
63 {
64 dataFile().print(value1, value2, value3, value4);
65 }
66
67 template<typename T1, typename T2, typename T3, typename T4, typename T5>
dataLog(const T1 & value1,const T2 & value2,const T3 & value3,const T4 & value4,const T5 & value5)68 void dataLog(const T1& value1, const T2& value2, const T3& value3, const T4& value4, const T5& value5)
69 {
70 dataFile().print(value1, value2, value3, value4, value5);
71 }
72
73 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
dataLog(const T1 & value1,const T2 & value2,const T3 & value3,const T4 & value4,const T5 & value5,const T6 & value6)74 void dataLog(const T1& value1, const T2& value2, const T3& value3, const T4& value4, const T5& value5, const T6& value6)
75 {
76 dataFile().print(value1, value2, value3, value4, value5, value6);
77 }
78
79 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
dataLog(const T1 & value1,const T2 & value2,const T3 & value3,const T4 & value4,const T5 & value5,const T6 & value6,const T7 & value7)80 void dataLog(const T1& value1, const T2& value2, const T3& value3, const T4& value4, const T5& value5, const T6& value6, const T7& value7)
81 {
82 dataFile().print(value1, value2, value3, value4, value5, value6, value7);
83 }
84
85 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
dataLog(const T1 & value1,const T2 & value2,const T3 & value3,const T4 & value4,const T5 & value5,const T6 & value6,const T7 & value7,const T8 & value8)86 void dataLog(const T1& value1, const T2& value2, const T3& value3, const T4& value4, const T5& value5, const T6& value6, const T7& value7, const T8& value8)
87 {
88 dataFile().print(value1, value2, value3, value4, value5, value6, value7, value8);
89 }
90
91 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
dataLog(const T1 & value1,const T2 & value2,const T3 & value3,const T4 & value4,const T5 & value5,const T6 & value6,const T7 & value7,const T8 & value8,const T9 & value9)92 void dataLog(const T1& value1, const T2& value2, const T3& value3, const T4& value4, const T5& value5, const T6& value6, const T7& value7, const T8& value8, const T9& value9)
93 {
94 dataFile().print(value1, value2, value3, value4, value5, value6, value7, value8, value9);
95 }
96
97 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
dataLog(const T1 & value1,const T2 & value2,const T3 & value3,const T4 & value4,const T5 & value5,const T6 & value6,const T7 & value7,const T8 & value8,const T9 & value9,const T10 & value10)98 void dataLog(const T1& value1, const T2& value2, const T3& value3, const T4& value4, const T5& value5, const T6& value6, const T7& value7, const T8& value8, const T9& value9, const T10& value10)
99 {
100 dataFile().print(value1, value2, value3, value4, value5, value6, value7, value8, value9, value10);
101 }
102
103 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
dataLog(const T1 & value1,const T2 & value2,const T3 & value3,const T4 & value4,const T5 & value5,const T6 & value6,const T7 & value7,const T8 & value8,const T9 & value9,const T10 & value10,const T11 & value11)104 void dataLog(const T1& value1, const T2& value2, const T3& value3, const T4& value4, const T5& value5, const T6& value6, const T7& value7, const T8& value8, const T9& value9, const T10& value10, const T11& value11)
105 {
106 dataFile().print(value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11);
107 }
108
109 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
dataLog(const T1 & value1,const T2 & value2,const T3 & value3,const T4 & value4,const T5 & value5,const T6 & value6,const T7 & value7,const T8 & value8,const T9 & value9,const T10 & value10,const T11 & value11,const T12 & value12)110 void dataLog(const T1& value1, const T2& value2, const T3& value3, const T4& value4, const T5& value5, const T6& value6, const T7& value7, const T8& value8, const T9& value9, const T10& value10, const T11& value11, const T12& value12)
111 {
112 dataFile().print(value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12);
113 }
114
115 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
dataLog(const T1 & value1,const T2 & value2,const T3 & value3,const T4 & value4,const T5 & value5,const T6 & value6,const T7 & value7,const T8 & value8,const T9 & value9,const T10 & value10,const T11 & value11,const T12 & value12,const T13 & value13)116 void dataLog(const T1& value1, const T2& value2, const T3& value3, const T4& value4, const T5& value5, const T6& value6, const T7& value7, const T8& value8, const T9& value9, const T10& value10, const T11& value11, const T12& value12, const T13& value13)
117 {
118 dataFile().print(value1, value2, value3, value4, value5, value6, value7, value8, value9, value10, value11, value12, value13);
119 }
120
121 } // namespace WTF
122
123 using WTF::dataLog;
124 using WTF::dataLogF;
125 using WTF::dataLogFString;
126
127 #endif // DataLog_h
128
129