svgtopt/nvgdecoder/inc/NVGUtil.h
author hgs
Wed, 03 Nov 2010 18:56:10 +0200
changeset 46 88edb906c587
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  NVG Decoder header file
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef NVGUTIL_H_
hgs
parents:
diff changeset
    20
#define NVGUTIL_H_
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <e32base.h>
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#ifndef NVG_DEBUG
hgs
parents:
diff changeset
    25
    #define NVG_DEBUGP1(x1)
hgs
parents:
diff changeset
    26
    #define NVG_DEBUGP2(x1, x2)
hgs
parents:
diff changeset
    27
    #define NVG_DEBUGP3(x1, x2, x3)
hgs
parents:
diff changeset
    28
    #define NVG_DEBUGP4(x1, x2, x3, x4)
hgs
parents:
diff changeset
    29
    #define NVG_DEBUGP5(x1, x2, x3, x4, x5)
hgs
parents:
diff changeset
    30
    #define NVG_DEBUGP6(x1, x2, x3, x4, x5, x6)
hgs
parents:
diff changeset
    31
    #define NVG_DEBUGP7(x1, x2, x3, x4, x5, x6, x7)
hgs
parents:
diff changeset
    32
    #define NVG_DEBUGP8(x1, x2, x3, x4, x5, x6, x7, x8)
hgs
parents:
diff changeset
    33
    #define NVG_DEBUGP9(x1, x2, x3, x4, x5, x6, x7, x8, x9)
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
    #define NVG_DEBUGSTMT(x1)
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
    #define VGCREATEPAINT()     vgCreatePaint()
hgs
parents:
diff changeset
    38
    #define VGDESTROYPAINT(h)   vgDestroyPaint(h)
hgs
parents:
diff changeset
    39
    
hgs
parents:
diff changeset
    40
    #define VGCREATEPATH(a1, a2, a3, a4, a5, a6, a7)  vgCreatePath(a1, a2, a3, a4, a5, a6, a7)
hgs
parents:
diff changeset
    41
    #define VGDESTROYPATH(h)     vgDestroyPath(h)
hgs
parents:
diff changeset
    42
    
hgs
parents:
diff changeset
    43
    #define VGCREATEIMAGE(a1, a2, a3, a4) vgCreateImage(a1, a2, a3, a4)
hgs
parents:
diff changeset
    44
    #define VGDESTROYIMAGE(h)     vgDestroyImage(h)
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
    #define DECLARE_HANDLECHECKER_GLOBAL()
hgs
parents:
diff changeset
    47
    #define DECLARE_HANDLECHECKER()
hgs
parents:
diff changeset
    48
    #define INIT_HANDLECHECKER()
hgs
parents:
diff changeset
    49
    #define ASSERT_HANDLE_COUNT()
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
#else
hgs
parents:
diff changeset
    52
#include <e32debug.h>
hgs
parents:
diff changeset
    53
    #define NVG_DEBUGP1(x1)                                 RDebug::Printf(x1)
hgs
parents:
diff changeset
    54
    #define NVG_DEBUGP2(x1, x2)                             RDebug::Printf(x1, x2)
hgs
parents:
diff changeset
    55
    #define NVG_DEBUGP3(x1, x2, x3)                         RDebug::Printf(x1, x2, x3)
hgs
parents:
diff changeset
    56
    #define NVG_DEBUGP4(x1, x2, x3, x4)                     RDebug::Printf(x1, x2, x3, x4)
hgs
parents:
diff changeset
    57
    #define NVG_DEBUGP5(x1, x2, x3, x4, x5)                 RDebug::Printf(x1, x2, x3, x4, x5)
hgs
parents:
diff changeset
    58
    #define NVG_DEBUGP6(x1, x2, x3, x4, x5, x6)             RDebug::Printf(x1, x2, x3, x4, x5, x6)
hgs
parents:
diff changeset
    59
    #define NVG_DEBUGP7(x1, x2, x3, x4, x5, x6, x7)         RDebug::Printf(x1, x2, x3, x4, x5, x6, x7)
hgs
parents:
diff changeset
    60
    #define NVG_DEBUGP8(x1, x2, x3, x4, x5, x6, x7, x8)     RDebug::Printf(x1, x2, x3, x4, x5, x6, x7, x8)
hgs
parents:
diff changeset
    61
    #define NVG_DEBUGP9(x1, x2, x3, x4, x5, x6, x7, x8, x9) RDebug::Printf(x1, x2, x3, x4, x5, x6, x7, x8, x9)
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
    #define NVG_DEBUGSTMT(x1)                             do { x1; } while (0)
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
    struct THandleCounter
hgs
parents:
diff changeset
    66
        {
hgs
parents:
diff changeset
    67
        TInt    paintHC;
hgs
parents:
diff changeset
    68
        TInt    pathHC;
hgs
parents:
diff changeset
    69
        TInt    imageHC;
hgs
parents:
diff changeset
    70
        THandleCounter() : paintHC(0), pathHC(0), imageHC(0) {}
hgs
parents:
diff changeset
    71
        };
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
inline void incrementPaintHandleCountL(THandleCounter * handleCounter)
hgs
parents:
diff changeset
    74
    {
hgs
parents:
diff changeset
    75
    if (handleCounter)
hgs
parents:
diff changeset
    76
        handleCounter->paintHC++;
hgs
parents:
diff changeset
    77
    }
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
inline void decrementPaintHandleCountL(THandleCounter * handleCounter)
hgs
parents:
diff changeset
    80
    {
hgs
parents:
diff changeset
    81
    if (handleCounter)
hgs
parents:
diff changeset
    82
        handleCounter->paintHC--;
hgs
parents:
diff changeset
    83
    }
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
inline void decrementImageHandleCountL(THandleCounter * handleCounter)
hgs
parents:
diff changeset
    86
    {
hgs
parents:
diff changeset
    87
    if (handleCounter)
hgs
parents:
diff changeset
    88
        handleCounter->imageHC--;
hgs
parents:
diff changeset
    89
    }
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
inline void decrementPathHandleCountL(THandleCounter * handleCounter)
hgs
parents:
diff changeset
    92
    {
hgs
parents:
diff changeset
    93
    if (handleCounter)
hgs
parents:
diff changeset
    94
        handleCounter->pathHC--;
hgs
parents:
diff changeset
    95
    }
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
inline void incrementPathHandleCountL(THandleCounter * handleCounter)
hgs
parents:
diff changeset
    98
    {
hgs
parents:
diff changeset
    99
    if (handleCounter)
hgs
parents:
diff changeset
   100
        handleCounter->pathHC++;
hgs
parents:
diff changeset
   101
    }
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
inline void incrementImageHandleCountL(THandleCounter * handleCounter)
hgs
parents:
diff changeset
   104
    {
hgs
parents:
diff changeset
   105
    if (handleCounter)
hgs
parents:
diff changeset
   106
        handleCounter->imageHC++;
hgs
parents:
diff changeset
   107
    }
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
inline void checkHandleCout(THandleCounter * handleCounter)
hgs
parents:
diff changeset
   110
    {
hgs
parents:
diff changeset
   111
    if (handleCounter)
hgs
parents:
diff changeset
   112
        {
hgs
parents:
diff changeset
   113
        if (handleCounter->paintHC != 0)
hgs
parents:
diff changeset
   114
            {
hgs
parents:
diff changeset
   115
            User::Panic(_L("Paint Handle Deallocation Not Matching"), 1);
hgs
parents:
diff changeset
   116
            }
hgs
parents:
diff changeset
   117
        
hgs
parents:
diff changeset
   118
        if (handleCounter->pathHC != 0)
hgs
parents:
diff changeset
   119
            {
hgs
parents:
diff changeset
   120
            User::Panic(_L("Path Handle Deallocation Not Matching"), 1);
hgs
parents:
diff changeset
   121
            }
hgs
parents:
diff changeset
   122
        
hgs
parents:
diff changeset
   123
        if (handleCounter->imageHC != 0)
hgs
parents:
diff changeset
   124
            {
hgs
parents:
diff changeset
   125
            User::Panic(_L("Image Handle Deallocation Not Matching"), 1);
hgs
parents:
diff changeset
   126
            }
hgs
parents:
diff changeset
   127
        }
hgs
parents:
diff changeset
   128
    
hgs
parents:
diff changeset
   129
        delete handleCounter;
hgs
parents:
diff changeset
   130
        handleCounter = 0;
hgs
parents:
diff changeset
   131
    }
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
inline VGHandle vgCreatePaintWrapper(THandleCounter * handleCounter)
hgs
parents:
diff changeset
   134
    {
hgs
parents:
diff changeset
   135
    VGPaint pH = vgCreatePaint();
hgs
parents:
diff changeset
   136
    if (pH)
hgs
parents:
diff changeset
   137
        {
hgs
parents:
diff changeset
   138
        incrementPaintHandleCountL(handleCounter);
hgs
parents:
diff changeset
   139
        }
hgs
parents:
diff changeset
   140
    return pH;
hgs
parents:
diff changeset
   141
    }
hgs
parents:
diff changeset
   142
                                    
hgs
parents:
diff changeset
   143
inline void vgDestroyPaintWrapper(THandleCounter * handleCounter, VGHandle h)
hgs
parents:
diff changeset
   144
    {
hgs
parents:
diff changeset
   145
    if (h)
hgs
parents:
diff changeset
   146
        {
hgs
parents:
diff changeset
   147
        vgDestroyPaint(h);
hgs
parents:
diff changeset
   148
        decrementPaintHandleCountL(handleCounter);
hgs
parents:
diff changeset
   149
        }
hgs
parents:
diff changeset
   150
    }
hgs
parents:
diff changeset
   151
    
hgs
parents:
diff changeset
   152
    
hgs
parents:
diff changeset
   153
inline VGHandle vgCreatePathWrapper(THandleCounter * handleCounter, VGint a1,
hgs
parents:
diff changeset
   154
        VGPathDatatype a2,
hgs
parents:
diff changeset
   155
        VGfloat a3, VGfloat a4,
hgs
parents:
diff changeset
   156
        VGint a5,
hgs
parents:
diff changeset
   157
        VGint a6,
hgs
parents:
diff changeset
   158
        VGbitfield a7)
hgs
parents:
diff changeset
   159
    {
hgs
parents:
diff changeset
   160
    VGPath pH = vgCreatePath(a1, a2, a3, a4, a5, a6, a7);
hgs
parents:
diff changeset
   161
    if (pH) 
hgs
parents:
diff changeset
   162
        {
hgs
parents:
diff changeset
   163
        incrementPathHandleCountL(handleCounter);
hgs
parents:
diff changeset
   164
        }
hgs
parents:
diff changeset
   165
    return pH;
hgs
parents:
diff changeset
   166
    }
hgs
parents:
diff changeset
   167
   
hgs
parents:
diff changeset
   168
inline void vgDestroyPathWrapper(THandleCounter * handleCounter, VGHandle h)
hgs
parents:
diff changeset
   169
    {
hgs
parents:
diff changeset
   170
    if (h) 
hgs
parents:
diff changeset
   171
        {
hgs
parents:
diff changeset
   172
        vgDestroyPath(h);
hgs
parents:
diff changeset
   173
        decrementPathHandleCountL(handleCounter);
hgs
parents:
diff changeset
   174
        }
hgs
parents:
diff changeset
   175
    }
hgs
parents:
diff changeset
   176
    
hgs
parents:
diff changeset
   177
inline VGHandle vgCreateImageWrapper(THandleCounter * handleCounter, VGImageFormat a1,
hgs
parents:
diff changeset
   178
        VGint a2, VGint a3,
hgs
parents:
diff changeset
   179
        VGbitfield a4)
hgs
parents:
diff changeset
   180
    {
hgs
parents:
diff changeset
   181
    VGImage iH = vgCreateImage(a1, a2, a3, a4);
hgs
parents:
diff changeset
   182
    if (iH) 
hgs
parents:
diff changeset
   183
        {
hgs
parents:
diff changeset
   184
        incrementImageHandleCountL(handleCounter);
hgs
parents:
diff changeset
   185
        }
hgs
parents:
diff changeset
   186
    return iH;
hgs
parents:
diff changeset
   187
    }
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
inline void vgDestroyImageWrapper(THandleCounter * handleCounter, VGHandle h)
hgs
parents:
diff changeset
   190
    {
hgs
parents:
diff changeset
   191
    if (h)
hgs
parents:
diff changeset
   192
        {
hgs
parents:
diff changeset
   193
        vgDestroyImage(h);
hgs
parents:
diff changeset
   194
        decrementImageHandleCountL(handleCounter);
hgs
parents:
diff changeset
   195
        }
hgs
parents:
diff changeset
   196
    }
hgs
parents:
diff changeset
   197
    
hgs
parents:
diff changeset
   198
    
hgs
parents:
diff changeset
   199
    #define DECLARE_HANDLECHECKER_GLOBAL()  THandleCounter * __handleCounter;
hgs
parents:
diff changeset
   200
    #define DECLARE_HANDLECHECKER()  private:  THandleCounter * __handleCounter;
hgs
parents:
diff changeset
   201
    #define INIT_HANDLECHECKER()  __handleCounter = new THandleCounter;
hgs
parents:
diff changeset
   202
    #define ASSERT_HANDLE_COUNT() checkHandleCout(__handleCounter);
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
    #define VGCREATEPAINT()     (NVG_DEBUGP3("/*vgCreatePaint() %s:%d*/", __FILE__, __LINE__), vgCreatePaintWrapper(__handleCounter))
hgs
parents:
diff changeset
   205
    #define VGDESTROYPAINT(h)   (NVG_DEBUGP3("/*vgDestroyPaint() %s:%d*/", __FILE__, __LINE__), vgDestroyPaintWrapper(__handleCounter, h))
hgs
parents:
diff changeset
   206
    
hgs
parents:
diff changeset
   207
    #define VGCREATEPATH(a1, a2, a3, a4, a5, a6, a7)  (NVG_DEBUGP3("/*vgCreatePath() %s:%d*/", __FILE__, __LINE__), vgCreatePathWrapper(__handleCounter, a1, a2, a3, a4, a5, a6, a7))
hgs
parents:
diff changeset
   208
    #define VGDESTROYPATH(h)     (NVG_DEBUGP3("/*vgDestroyPath() %s:%d*/", __FILE__, __LINE__), vgDestroyPathWrapper(__handleCounter, h))
hgs
parents:
diff changeset
   209
    
hgs
parents:
diff changeset
   210
    #define VGCREATEIMAGE(a1, a2, a3, a4) (NVG_DEBUGP3("/*vgCreateImage() %s:%d*/", __FILE__, __LINE__), vgCreateImageWrapper(__handleCounter, a1, a2, a3, a4))
hgs
parents:
diff changeset
   211
    #define VGDESTROYIMAGE(h)     (NVG_DEBUGP3("/*vgDestroyImage() %s:%d*/", __FILE__, __LINE__), vgDestroyImageWrapper(__handleCounter, h))
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
#endif
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
#ifdef OPENVG_OBJECT_CACHING
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
// first one is for openVG object caching, the macro is used for testing purpose
hgs
parents:
diff changeset
   218
#define COND_COM_OC(obj, s1, s2)       if (obj) { s1; } else { s2; }
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
// if object caching is enabled take the first one, which is for object caching,
hgs
parents:
diff changeset
   221
// else the second one
hgs
parents:
diff changeset
   222
#define COND_COM_OC_NOC(s1, s2)        s1
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
// if object caching is enabled take the first one, which is for object caching
hgs
parents:
diff changeset
   225
// else don't do anything
hgs
parents:
diff changeset
   226
#define COND_COM_OC_OOC(s1)            s1
hgs
parents:
diff changeset
   227
hgs
parents:
diff changeset
   228
#else
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
// first one is for openVG object caching, the macro is used for testing purpose
hgs
parents:
diff changeset
   231
#define COND_COM_OC(obj, s1, s2)       s2
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
// if object caching is enabled take the first one, which is for object caching,
hgs
parents:
diff changeset
   234
// else the second one
hgs
parents:
diff changeset
   235
#define COND_COM_OC_NOC(s1, s2)        s2
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
// if object caching is enabled take the first one, which is for object caching
hgs
parents:
diff changeset
   238
// else don't do anything
hgs
parents:
diff changeset
   239
// if object caching is enabled take the first one, which is for object caching
hgs
parents:
diff changeset
   240
// else don't do anything
hgs
parents:
diff changeset
   241
#define COND_COM_OC_OOC(s1)
hgs
parents:
diff changeset
   242
hgs
parents:
diff changeset
   243
// if object caching is enabled take the first one, which is for object caching
hgs
parents:
diff changeset
   244
// else don't do anything
hgs
parents:
diff changeset
   245
#endif
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
GLDEF_C void CleanupArray( TAny * aObj );
hgs
parents:
diff changeset
   248
GLDEF_C void CleanupTFloatFixArray( TAny * aObj );
hgs
parents:
diff changeset
   249
hgs
parents:
diff changeset
   250
/*
hgs
parents:
diff changeset
   251
 * There is an Align4 function in symbian which does the alignement
hgs
parents:
diff changeset
   252
 * this is just to check whether the given pointer is aligned or not
hgs
parents:
diff changeset
   253
 */
hgs
parents:
diff changeset
   254
template <class T>
hgs
parents:
diff changeset
   255
inline TBool IsAligned4(T aValue)
hgs
parents:
diff changeset
   256
    {return !((TUint32)aValue & (sizeof(TUint32) - 1));}
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
/*
hgs
parents:
diff changeset
   259
 * There is an Align2 function in symbian which does the alignement
hgs
parents:
diff changeset
   260
 * this is just to check whether the given pointer is aligned or not
hgs
parents:
diff changeset
   261
 */
hgs
parents:
diff changeset
   262
template <class T>
hgs
parents:
diff changeset
   263
inline TBool IsAligned2(T aValue)
hgs
parents:
diff changeset
   264
    {return !((TUint16)aValue & (sizeof(TUint16) - 1));}
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
#endif
hgs
parents:
diff changeset
   267