IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 7120


Ignore:
Timestamp:
May 15, 2006, 3:20:09 PM (20 years ago)
Author:
Paul Price
Message:

Rows and columns were confused (psImageRow extracted a column, and
psImageCol extracted a row). Changed type macros from functions into
case statements, to avoid extraneous function call. Optimised
psImageRow, using memcpy.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/imageops/psImagePixelExtract.c

    r7055 r7120  
    88 *  @author Robert DeSonia, MHPCC
    99 *
    10  *  @version $Revision: 1.19 $ $Name: not supported by cvs2svn $
    11  *  @date $Date: 2006-05-03 23:16:16 $
     10 *  @version $Revision: 1.20 $ $Name: not supported by cvs2svn $
     11 *  @date $Date: 2006-05-16 01:20:09 $
    1212 *
    1313 *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    2323#include "psErrorText.h"
    2424
    25 #define FUNC_MACRO_VECTOR_STORE_ROW(TYPE) \
    26 static psVector *vectorStoreRow##TYPE(psVector *vec, const psImage *in, int row) \
    27 { \
    28     \
    29     for (int i = 0; i < in->numCols; i++) \
    30     { \
    31         vec->data.TYPE[i] = in->data.TYPE[i][row]; \
    32     } \
    33     return vec; \
    34 } \
    35 
    36 FUNC_MACRO_VECTOR_STORE_ROW(S8)
    37 FUNC_MACRO_VECTOR_STORE_ROW(S16)
    38 FUNC_MACRO_VECTOR_STORE_ROW(S32)
    39 FUNC_MACRO_VECTOR_STORE_ROW(S64)
    40 FUNC_MACRO_VECTOR_STORE_ROW(U8)
    41 FUNC_MACRO_VECTOR_STORE_ROW(U16)
    42 FUNC_MACRO_VECTOR_STORE_ROW(U32)
    43 FUNC_MACRO_VECTOR_STORE_ROW(U64)
    44 FUNC_MACRO_VECTOR_STORE_ROW(F32)
    45 FUNC_MACRO_VECTOR_STORE_ROW(F64)
    46 FUNC_MACRO_VECTOR_STORE_ROW(C32)
    47 FUNC_MACRO_VECTOR_STORE_ROW(C64)
     25#define VECTOR_STORE_ROW_CASE(TYPE) \
     26case PS_TYPE_##TYPE: \
     27memcpy(out->data.TYPE, input->data.TYPE[row], input->numCols*sizeof(ps##TYPE)); \
     28break;
    4829
    4930psVector *psImageRow(psVector *out,
     
    10687
    10788    switch (input->type.type) {
    108     case PS_TYPE_S8:
    109         out = vectorStoreRowS8(out, input, row);
    110         break;
    111     case PS_TYPE_S16:
    112         out = vectorStoreRowS16(out, input, row);
    113         break;
    114     case PS_TYPE_S32:
    115         out = vectorStoreRowS32(out, input, row);
    116         break;
    117     case PS_TYPE_S64:
    118         out = vectorStoreRowS64(out, input, row);
    119         break;
    120     case PS_TYPE_U8:
    121         out = vectorStoreRowU8(out, input, row);
    122         break;
    123     case PS_TYPE_U16:
    124         out = vectorStoreRowU16(out, input, row);
    125         break;
    126     case PS_TYPE_U32:
    127         out = vectorStoreRowU32(out, input, row);
    128         break;
    129     case PS_TYPE_U64:
    130         out = vectorStoreRowU64(out, input, row);
    131         break;
    132     case PS_TYPE_F32:
    133         out = vectorStoreRowF32(out, input, row);
    134         break;
    135     case PS_TYPE_F64:
    136         out = vectorStoreRowF64(out, input, row);
    137         break;
    138     case PS_TYPE_C32:
    139         out = vectorStoreRowC32(out, input, row);
    140         break;
    141     case PS_TYPE_C64:
    142         out = vectorStoreRowC64(out, input, row);
    143         break;
     89        VECTOR_STORE_ROW_CASE(S8);
     90        VECTOR_STORE_ROW_CASE(S16);
     91        VECTOR_STORE_ROW_CASE(S32);
     92        VECTOR_STORE_ROW_CASE(S64);
     93        VECTOR_STORE_ROW_CASE(U8);
     94        VECTOR_STORE_ROW_CASE(U16);
     95        VECTOR_STORE_ROW_CASE(U32);
     96        VECTOR_STORE_ROW_CASE(U64);
     97        VECTOR_STORE_ROW_CASE(F32);
     98        VECTOR_STORE_ROW_CASE(F64);
     99        VECTOR_STORE_ROW_CASE(C32);
     100        VECTOR_STORE_ROW_CASE(C64);
    144101    default:
    145102        psError(PS_ERR_BAD_PARAMETER_TYPE, true,
     
    152109
    153110
    154 #define FUNC_MACRO_VECTOR_STORE_COL(TYPE) \
    155 static psVector *vectorStoreCol##TYPE(psVector *vec, const psImage *in, int col) \
    156 { \
    157     \
    158     for (int i = 0; i < in->numRows; i++) \
    159     { \
    160         vec->data.TYPE[i] = in->data.TYPE[col][i]; \
    161     } \
    162     return vec; \
     111#define VECTOR_STORE_COL_CASE(TYPE) \
     112case PS_TYPE_##TYPE: \
     113for (int i = 0; i < in->numRows; i++) { \
     114    out->data.TYPE[i] = input->data.TYPE[i][col]; \
    163115} \
    164 
    165 FUNC_MACRO_VECTOR_STORE_COL(S8)
    166 FUNC_MACRO_VECTOR_STORE_COL(S16)
    167 FUNC_MACRO_VECTOR_STORE_COL(S32)
    168 FUNC_MACRO_VECTOR_STORE_COL(S64)
    169 FUNC_MACRO_VECTOR_STORE_COL(U8)
    170 FUNC_MACRO_VECTOR_STORE_COL(U16)
    171 FUNC_MACRO_VECTOR_STORE_COL(U32)
    172 FUNC_MACRO_VECTOR_STORE_COL(U64)
    173 FUNC_MACRO_VECTOR_STORE_COL(F32)
    174 FUNC_MACRO_VECTOR_STORE_COL(F64)
    175 FUNC_MACRO_VECTOR_STORE_COL(C32)
    176 FUNC_MACRO_VECTOR_STORE_COL(C64)
    177 
     116break;
    178117
    179118psVector *psImageCol(psVector *out,
     
    236175
    237176    switch (input->type.type) {
    238     case PS_TYPE_S8:
    239         out = vectorStoreColS8(out, input, column);
    240         break;
    241     case PS_TYPE_S16:
    242         out = vectorStoreColS16(out, input, column);
    243         break;
    244     case PS_TYPE_S32:
    245         out = vectorStoreColS32(out, input, column);
    246         break;
    247     case PS_TYPE_S64:
    248         out = vectorStoreColS64(out, input, column);
    249         break;
    250     case PS_TYPE_U8:
    251         out = vectorStoreColU8(out, input, column);
    252         break;
    253     case PS_TYPE_U16:
    254         out = vectorStoreColU16(out, input, column);
    255         break;
    256     case PS_TYPE_U32:
    257         out = vectorStoreColU32(out, input, column);
    258         break;
    259     case PS_TYPE_U64:
    260         out = vectorStoreColU64(out, input, column);
    261         break;
    262     case PS_TYPE_F32:
    263         out = vectorStoreColF32(out, input, column);
    264         break;
    265     case PS_TYPE_F64:
    266         out = vectorStoreColF64(out, input, column);
    267         break;
    268     case PS_TYPE_C32:
    269         out = vectorStoreColC32(out, input, column);
    270         break;
    271     case PS_TYPE_C64:
    272         out = vectorStoreColC64(out, input, column);
    273         break;
     177        VECTOR_STORE_COL_CASE(S8);
     178        VECTOR_STORE_COL_CASE(S16);
     179        VECTOR_STORE_COL_CASE(S32);
     180        VECTOR_STORE_COL_CASE(S64);
     181        VECTOR_STORE_COL_CASE(U8);
     182        VECTOR_STORE_COL_CASE(U16);
     183        VECTOR_STORE_COL_CASE(U32);
     184        VECTOR_STORE_COL_CASE(U64);
     185        VECTOR_STORE_COL_CASE(F32);
     186        VECTOR_STORE_COL_CASE(F64);
     187        VECTOR_STORE_COL_CASE(C32);
     188        VECTOR_STORE_COL_CASE(C64);
    274189    default:
    275190        psError(PS_ERR_BAD_PARAMETER_TYPE, true,
Note: See TracChangeset for help on using the changeset viewer.