1096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
2096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger/*
3096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Copyright 2013 Google, Inc.
4096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger *
5096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
6096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger * found in the LICENSE file.
7096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger */
8096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
9096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
10096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#ifndef SkDebugUtils_DEFINED
11096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#define SkDebugUtils_DEFINED
12096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
13096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#include "SkTypes.h"
14096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
15096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger// These functions dump 0, 1, and 2d arrays of data in a format that's
16096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger// compatible with Mathematica for quick visualization
17096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
18096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
19096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergertemplate<class T>
20096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerinline void SkDebugDumpMathematica( const T val ) {
21096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDEBUGFAIL("Need to specialize SkDebugDumpMathematica for your type, sorry.");
22096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger}
23096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
24096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergertemplate<class T>
25096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerinline void SkDebugDumpMathematica(const char *name, const T *array, int size) {
26096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf(name);
27096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf(" = {");
28096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    for (int i=0 ; i < size ; i++) {
29096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger        SkDebugDumpMathematica<T>(array[i]);
30096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger        if (i != size-1) SkDebugf(", ");
31096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    }
32096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf("};\n");
33096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger}
34096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
35096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergertemplate<class T>
36096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerinline void SkDebugDumpMathematica(const char *name, const T *array, int width, int height) {
37096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf(name);
38096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf(" = {\n");
39096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    for (int i=0 ; i < height ; i++) {
40096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger        SkDebugf("  {");
41096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger        for (int j = 0 ; j < width ; j++) {
42096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger            SkDebugDumpMathematica<T>(array[i*width + j]);
43096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger            if (j != width-1) {
44096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger                SkDebugf(", ");
45096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger            }
46096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger        }
47096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger        SkDebugf("}");
48096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger        if (i != height-1) {
49096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger            SkDebugf(", \n");
50096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger        }
51096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    }
52096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf("\n};\n");
53096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger}
54096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
55096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergertemplate<class T>
56096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerinline void SkDebugDumpMathematica( const char *name, const T val ) {
57096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf(name);
58096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf(" = ");
59096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugDumpMathematica<T>(val);
60096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf(";\n");
61096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger}
62096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
63096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergertemplate<>
64096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerinline void SkDebugDumpMathematica<uint8_t>( const uint8_t val ) {
65096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf("%u", val);
66096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger}
67096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
68096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergertemplate<>
69096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerinline void SkDebugDumpMathematica<unsigned int>( const unsigned int val ) {
70096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf("%u", val);
71096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger}
72096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
73096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergertemplate<>
74096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerinline void SkDebugDumpMathematica<int>( const int val ) {
75096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf("%d", val);
76096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger}
77096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
78096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergertemplate<>
79096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerinline void SkDebugDumpMathematica<size_t>( const size_t val ) {
80096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf("%u", val);
81096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger}
82096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
83096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergertemplate<>
84096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergervoid SkDebugDumpMathematica<const char *>( const char * val ) {
85096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf("%s", val);
86096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger}
87096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
88096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergertemplate<>
89096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenbergerinline void SkDebugDumpMathematica<float>( float val ) {
90096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger    SkDebugf("%f", val);
91096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger}
92096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
93096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger
94096defe64d408e54474fe19f418c95bf1a554fc7Derek Sollenberger#endif
95