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 <stdarg.h> 30 #include <stdio.h> 31 #include "wtf/FilePrintStream.h" 32 #include "wtf/Platform.h" 33 #include "wtf/StdLibExtras.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> 44 void dataLog(const T& value) 45 { 46 dataFile().print(value); 47 } 48 49 template<typename T1, typename T2> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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