Slicer  4.8
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
misc.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Extract Skeleton
4  Module: $HeadURL$
5  Language: C++
6  Date: $Date$
7  Version: $Revision$
8 
9  Copyright (c) Brigham and Women's Hospital (BWH) All Rights Reserved.
10 
11  See License.txt or http://www.slicer.org/copyright/copyright.txt for details.
12 
13 ==========================================================================*/
14 /*
15  * misc.h
16  *
17  * author: msturm
18  * created: 27 Mar 1997
19  * changes: mastyner
20  */
21 
22 #ifndef __IP_MISC_H__
23 #define __IP_MISC_H__
24 
25 #include <cstdlib>
26 #include <cstdio>
27 #include <cerrno>
28 #include <sys/types.h>
29 
30 typedef enum
31  {
32  IP_BYTE = 0, /* AVS_TYPE_BYTE = 0 */
33  IP_INT, /* AVS_TYPE_INTEGER = 1 */
34  IP_FLOAT, /* AVS_TYPE_REAL = 2 */
35  IP_DOUBLE, /* AVS_TYPE_DOUBLE = 3 */
36  IP_SHORT /* AVS_TYPE_SHORT = 4 */
37  } ipDataType;
38 
39 typedef union
40  {
41  void *_void;
42  unsigned char *_byte;
43  short *_short;
44  int *_int;
45  float *_float;
46  double *_double;
47  } ipDataUnion;
48 
49 // memory allocation & handling
50 size_t ipGetDataSize(const ipDataType type);
51 
52 void * ipAllocateData(const int size, const size_t elemsize);
53 
54 // misc functions
55 
56 template <class T>
57 inline void ipSwap(T *a, T *b)
58 {
59  T temp = *a; *a = *b; *b = temp;
60 
61 }
62 
63 template <class T>
64 inline T sqr(T x)
65 {
66  return x * x;
67 }
68 
69 // thresholding operators
70 template <class T>
71 inline void ipUpperThreshold(T *data, const int size, const T threshold)
72 {
73  T *dp = data;
74 
75  for( int i = 0; i < size; i++, dp++ )
76  {
77  if( *dp < threshold )
78  {
79  *dp = (T) 0.0;
80  }
81  }
82 }
83 
84 template <class T>
85 inline void ipLowerThreshold(T *data, const int size, const T threshold)
86 {
87  T *dp = data;
88 
89  for( int i = 0; i < size; i++, dp++ )
90  {
91  if( *dp > threshold )
92  {
93  *dp = (T) 0.0;
94  }
95  }
96 }
97 
98 template <class T>
99 inline void ipUpperBinaryThreshold(T *data, const int size, const T threshold)
100 {
101  T *dp = data;
102 
103  for( int i = 0; i < size; i++, dp++ )
104  {
105  *dp = (*dp < threshold ? (T) 0.0 : (T) 1.0);
106  }
107 }
108 
109 template <class T>
110 inline void ipLowerBinaryThreshold(T *data, const int size, const T threshold)
111 {
112  T *dp = data;
113 
114  for( int i = 0; i < size; i++, dp++ )
115  {
116  *dp = (*dp > threshold ? (T) 0.0 : (T) 1.0);
117  }
118 }
119 
120 #endif
void ipUpperBinaryThreshold(T *data, const int size, const T threshold)
Definition: misc.h:99
short * _short
Definition: misc.h:43
void * ipAllocateData(const int size, const size_t elemsize)
void ipLowerThreshold(T *data, const int size, const T threshold)
Definition: misc.h:85
Definition: misc.h:33
unsigned char * _byte
Definition: misc.h:42
double * _double
Definition: misc.h:46
void ipUpperThreshold(T *data, const int size, const T threshold)
Definition: misc.h:71
void ipLowerBinaryThreshold(T *data, const int size, const T threshold)
Definition: misc.h:110
void * _void
Definition: misc.h:41
size_t ipGetDataSize(const ipDataType type)
Definition: misc.h:34
int * _int
Definition: misc.h:44
Definition: misc.h:32
float * _float
Definition: misc.h:45
ipDataType
Definition: misc.h:30
Definition: misc.h:35
Definition: misc.h:36
void ipSwap(T *a, T *b)
Definition: misc.h:57
T sqr(T x)
Definition: misc.h:64