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 35namespace WTF { 36 37FilePrintStream& dataFile(); 38 39void dataLogFV(const char* format, va_list) WTF_ATTRIBUTE_PRINTF(1, 0); 40void dataLogF(const char* format, ...) WTF_ATTRIBUTE_PRINTF(1, 2); 41void dataLogFString(const char*); 42 43template<typename T> 44void dataLog(const T& value) 45{ 46 dataFile().print(value); 47} 48 49template<typename T1, typename T2> 50void dataLog(const T1& value1, const T2& value2) 51{ 52 dataFile().print(value1, value2); 53} 54 55template<typename T1, typename T2, typename T3> 56void dataLog(const T1& value1, const T2& value2, const T3& value3) 57{ 58 dataFile().print(value1, value2, value3); 59} 60 61template<typename T1, typename T2, typename T3, typename T4> 62void dataLog(const T1& value1, const T2& value2, const T3& value3, const T4& value4) 63{ 64 dataFile().print(value1, value2, value3, value4); 65} 66 67template<typename T1, typename T2, typename T3, typename T4, typename T5> 68void 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 73template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6> 74void 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 79template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7> 80void 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 85template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> 86void 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 91template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9> 92void 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 97template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10> 98void 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 103template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11> 104void 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 109template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12> 110void 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 115template<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> 116void 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 123using WTF::dataLog; 124using WTF::dataLogF; 125using WTF::dataLogFString; 126 127#endif // DataLog_h 128 129