Home | History | Annotate | Download | only in wtf
      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>
     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