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