Main Page   Groups   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Concepts

itkPixelTraits.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Insight Segmentation & Registration Toolkit
00004   Module:    $RCSfile: itkPixelTraits.h,v $
00005   Language:  C++
00006   Date:      $Date: 2002/09/11 19:57:13 $
00007   Version:   $Revision: 1.25 $
00008 
00009   Copyright (c) 2002 Insight Consortium. All rights reserved.
00010   See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
00011 
00012   Portions of this code are covered under the VTK copyright.
00013   See VTKCopyright.txt or http://www.kitware.com/VTKCopyright.htm for details.
00014 
00015      This software is distributed WITHOUT ANY WARRANTY; without even 
00016      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00017      PURPOSE.  See the above copyright notices for more information.
00018 
00019 =========================================================================*/
00020 #ifndef __itkPixelTraits_h
00021 #define __itkPixelTraits_h
00022 
00023 namespace itk
00024 {
00025 
00034 template<class TPixelType>
00035 class PixelTraits
00036 {
00037 public:
00039   itkStaticConstMacro(Dimension, unsigned int, TPixelType::Length);
00040   
00042   typedef typename TPixelType::ValueType ValueType;
00043 };
00044 
00046 template <>
00047 class PixelTraits<bool>
00048 {
00049 public:
00050   itkStaticConstMacro(Dimension, unsigned int, 1);
00051   typedef bool ValueType;
00052 };
00053 
00054 template <>
00055 class PixelTraits<char>
00056 {
00057 public:
00058   itkStaticConstMacro(Dimension, unsigned int, 1);
00059   typedef char ValueType;
00060 };
00061 
00062 template <>
00063 class PixelTraits<unsigned char>
00064 {
00065 public:
00066   itkStaticConstMacro(Dimension, unsigned int, 1);
00067   typedef unsigned char ValueType;
00068 };
00069 
00070 template <>
00071 class PixelTraits<short>
00072 {
00073 public:
00074   itkStaticConstMacro(Dimension, unsigned int, 1);
00075   typedef short ValueType;
00076 };
00077 
00078 template <>
00079 class PixelTraits<unsigned short>
00080 {
00081 public:
00082   itkStaticConstMacro(Dimension, unsigned int, 1);
00083   typedef unsigned short ValueType;
00084 };
00085 
00086 template <>
00087 class PixelTraits<int>
00088 {
00089 public:
00090   itkStaticConstMacro(Dimension, unsigned int, 1);
00091   typedef int ValueType;
00092 };
00093 
00094 template <>
00095 class PixelTraits<unsigned int>
00096 {
00097 public:
00098   itkStaticConstMacro(Dimension, unsigned int, 1);
00099   typedef unsigned int ValueType;
00100 };
00101 
00102 template <>
00103 class PixelTraits<long>
00104 {
00105 public:
00106   itkStaticConstMacro(Dimension, unsigned int, 1);
00107   typedef long ValueType;
00108 };
00109 
00110 template <>
00111 class PixelTraits<unsigned long>
00112 {
00113 public:
00114   itkStaticConstMacro(Dimension, unsigned int, 1);
00115   typedef unsigned long ValueType;
00116 };
00117 
00118 template <>
00119 class PixelTraits<float>
00120 {
00121 public:
00122   itkStaticConstMacro(Dimension, unsigned int, 1);
00123   typedef float ValueType;
00124 };
00125 
00126 template <>
00127 class PixelTraits<double>
00128 {
00129 public:
00130   itkStaticConstMacro(Dimension, unsigned int, 1);
00131   typedef double ValueType;
00132 };
00133 
00151 template <class TValueType1, class TValueType2>
00152 class JoinTraits
00153 {
00154 public:
00155   typedef TValueType1 ValueType;
00156 };
00157 
00159 template<>
00160 class JoinTraits<bool, bool>
00161 {
00162 public:
00163   typedef bool ValueType;
00164 };
00165 
00166 template<>
00167 class JoinTraits<bool, char>
00168 {
00169 public:
00170   typedef char ValueType;
00171 };
00172 
00173 template<>
00174 class JoinTraits<bool, unsigned char>
00175 {
00176 public:
00177   typedef unsigned char ValueType;
00178 };
00179 
00180 template<>
00181 class JoinTraits<bool, short>
00182 {
00183 public:
00184   typedef short ValueType;
00185 };
00186 
00187 template<>
00188 class JoinTraits<bool, unsigned short>
00189 {
00190 public:
00191   typedef unsigned short ValueType;
00192 };
00193 
00194 template<>
00195 class JoinTraits<bool, int>
00196 {
00197 public:
00198   typedef int ValueType;
00199 };
00200 
00201 template<>
00202 class JoinTraits<bool, unsigned int>
00203 {
00204 public:
00205   typedef unsigned int ValueType;
00206 };
00207 
00208 template<>
00209 class JoinTraits<bool, long>
00210 {
00211 public:
00212   typedef long ValueType;
00213 };
00214 
00215 template<>
00216 class JoinTraits<bool, unsigned long>
00217 {
00218 public:
00219   typedef unsigned long ValueType;
00220 };
00221 
00222 template<>
00223 class JoinTraits<bool, float>
00224 {
00225 public:
00226   typedef float ValueType;
00227 };
00228 
00229 template<>
00230 class JoinTraits<bool, double>
00231 {
00232 public:
00233   typedef double ValueType;
00234 };
00235 
00237 template<>
00238 class JoinTraits<char, bool>
00239 {
00240 public:
00241   typedef char ValueType;
00242 };
00243 
00244 template<>
00245 class JoinTraits<char, char>
00246 {
00247 public:
00248   typedef char ValueType;
00249 };
00250 
00251 template<>
00252 class JoinTraits<char, unsigned char>
00253 {
00254 public:
00255   typedef short ValueType;
00256 };
00257 
00258 template<>
00259 class JoinTraits<char, short>
00260 {
00261 public:
00262   typedef short ValueType;
00263 };
00264 
00265 template<>
00266 class JoinTraits<char, unsigned short>
00267 {
00268 public:
00269   typedef int ValueType;
00270 };
00271 
00272 template<>
00273 class JoinTraits<char, int>
00274 {
00275 public:
00276   typedef int ValueType;
00277 };
00278 
00279 template<>
00280 class JoinTraits<char, unsigned int>
00281 {
00282 public:
00283   // unsigned int & unsigned long may be the same size, so promote to float
00284   typedef float ValueType;
00285 };
00286 
00287 template<>
00288 class JoinTraits<char, long>
00289 {
00290 public:
00291   typedef long ValueType;
00292 };
00293 
00294 template<>
00295 class JoinTraits<char, unsigned long>
00296 {
00297 public:
00298   typedef float ValueType;
00299 };
00300 
00301 template<>
00302 class JoinTraits<char, float>
00303 {
00304 public:
00305   typedef float ValueType;
00306 };
00307 
00308 template<>
00309 class JoinTraits<char, double>
00310 {
00311 public:
00312   typedef double ValueType;
00313 };
00314 
00316 template<>
00317 class JoinTraits<unsigned char, bool>
00318 {
00319 public:
00320   typedef unsigned char ValueType;
00321 };
00322 
00323 template<>
00324 class JoinTraits<unsigned char, char>
00325 {
00326 public:
00327   typedef short ValueType;
00328 };
00329 
00330 template<>
00331 class JoinTraits<unsigned char, unsigned char>
00332 {
00333 public:
00334   typedef unsigned char ValueType;
00335 };
00336 
00337 template<>
00338 class JoinTraits<unsigned char, short>
00339 {
00340 public:
00341   typedef short ValueType;
00342 };
00343 
00344 template<>
00345 class JoinTraits<unsigned char, unsigned short>
00346 {
00347 public:
00348   typedef unsigned short ValueType;
00349 };
00350 
00351 template<>
00352 class JoinTraits<unsigned char, int>
00353 {
00354 public:
00355   typedef int ValueType;
00356 };
00357 
00358 template<>
00359 class JoinTraits<unsigned char, unsigned int>
00360 {
00361 public:
00362   typedef unsigned int ValueType;
00363 };
00364 
00365 template<>
00366 class JoinTraits<unsigned char, long>
00367 {
00368 public:
00369   typedef long ValueType;
00370 };
00371 
00372 template<>
00373 class JoinTraits<unsigned char, unsigned long>
00374 {
00375 public:
00376   typedef unsigned long ValueType;
00377 };
00378 
00379 template<>
00380 class JoinTraits<unsigned char, float>
00381 {
00382 public:
00383   typedef float ValueType;
00384 };
00385 
00386 template<>
00387 class JoinTraits<unsigned char, double>
00388 {
00389 public:
00390   typedef double ValueType;
00391 };
00392   
00394 template<>
00395 class JoinTraits<short, bool>
00396 {
00397 public:
00398   typedef short ValueType;
00399 };
00400 
00401 template<>
00402 class JoinTraits<short, char>
00403 {
00404 public:
00405   typedef short ValueType;
00406 };
00407 
00408 template<>
00409 class JoinTraits<short, unsigned char>
00410 {
00411 public:
00412   typedef short ValueType;
00413 };
00414 
00415 template<>
00416 class JoinTraits<short, short>
00417 {
00418 public:
00419   typedef short ValueType;
00420 };
00421 
00422 template<>
00423 class JoinTraits<short, unsigned short>
00424 {
00425 public:
00426   typedef int ValueType;
00427 };
00428 
00429 template<>
00430 class JoinTraits<short, int>
00431 {
00432 public:
00433   typedef int ValueType;
00434 };
00435 
00436 template<>
00437 class JoinTraits<short, unsigned int>
00438 {
00439 public:
00440   // unsigned int & unsigned long may be the same size, so promote to float
00441   typedef float ValueType;
00442 };
00443 
00444 template<>
00445 class JoinTraits<short, long>
00446 {
00447 public:
00448   typedef long ValueType;
00449 };
00450 
00451 template<>
00452 class JoinTraits<short, unsigned long>
00453 {
00454 public:
00455   typedef float ValueType;
00456 };
00457 
00458 template<>
00459 class JoinTraits<short, float>
00460 {
00461 public:
00462   typedef float ValueType;
00463 };
00464 
00465 template<>
00466 class JoinTraits<short, double>
00467 {
00468 public:
00469   typedef double ValueType;
00470 };
00471   
00473 template<>
00474 class JoinTraits<unsigned short, bool>
00475 {
00476 public:
00477   typedef unsigned short ValueType;
00478 };
00479 
00480 template<>
00481 class JoinTraits<unsigned short, char>
00482 {
00483 public:
00484   typedef int ValueType;
00485 };
00486 
00487 template<>
00488 class JoinTraits<unsigned short, unsigned char>
00489 {
00490 public:
00491   typedef unsigned short ValueType;
00492 };
00493 
00494 template<>
00495 class JoinTraits<unsigned short, short>
00496 {
00497 public:
00498   typedef int ValueType;
00499 };
00500 
00501 template<>
00502 class JoinTraits<unsigned short, unsigned short>
00503 {
00504 public:
00505   typedef unsigned short ValueType;
00506 };
00507 
00508 template<>
00509 class JoinTraits<unsigned short, int>
00510 {
00511 public:
00512   typedef int ValueType;
00513 };
00514 
00515 template<>
00516 class JoinTraits<unsigned short, unsigned int>
00517 {
00518 public:
00519   typedef unsigned int ValueType;
00520 };
00521 
00522 template<>
00523 class JoinTraits<unsigned short, long>
00524 {
00525 public:
00526   typedef long ValueType;
00527 };
00528 
00529 template<>
00530 class JoinTraits<unsigned short, unsigned long>
00531 {
00532 public:
00533   typedef unsigned long ValueType;
00534 };
00535 
00536 template<>
00537 class JoinTraits<unsigned short, float>
00538 {
00539 public:
00540   typedef float ValueType;
00541 };
00542 
00543 template<>
00544 class JoinTraits<unsigned short, double>
00545 {
00546 public:
00547   typedef double ValueType;
00548 };
00549   
00551 template<>
00552 class JoinTraits<int, bool>
00553 {
00554 public:
00555   typedef int ValueType;
00556 };
00557 
00558 template<>
00559 class JoinTraits<int, char>
00560 {
00561 public:
00562   typedef int ValueType;
00563 };
00564 
00565 template<>
00566 class JoinTraits<int, unsigned char>
00567 {
00568 public:
00569   typedef int ValueType;
00570 };
00571 
00572 template<>
00573 class JoinTraits<int, short>
00574 {
00575 public:
00576   typedef int ValueType;
00577 };
00578 
00579 template<>
00580 class JoinTraits<int, unsigned short>
00581 {
00582 public:
00583   typedef int ValueType;
00584 };
00585 
00586 template<>
00587 class JoinTraits<int, int>
00588 {
00589 public:
00590   typedef int ValueType;
00591 };
00592 
00593 template<>
00594 class JoinTraits<int, unsigned int>
00595 {
00596 public:
00597   // unsigned int & unsigned long may be the same size, so promote to float
00598   typedef float ValueType;
00599 };
00600 
00601 template<>
00602 class JoinTraits<int, long>
00603 {
00604 public:
00605   typedef long ValueType;
00606 };
00607 
00608 template<>
00609 class JoinTraits<int, unsigned long>
00610 {
00611 public:
00612   typedef float ValueType;
00613 };
00614 
00615 template<>
00616 class JoinTraits<int, float>
00617 {
00618 public:
00619   typedef float ValueType;
00620 };
00621 
00622 template<>
00623 class JoinTraits<int, double>
00624 {
00625 public:
00626   typedef double ValueType;
00627 };
00628   
00630 template<>
00631 class JoinTraits<unsigned int, bool>
00632 {
00633 public:
00634   typedef unsigned int ValueType;
00635 };
00636 
00637 template<>
00638 class JoinTraits<unsigned int, char>
00639 {
00640 public:
00641   // unsigned int & unsigned long may be the same size, so promote to float
00642   typedef float ValueType;
00643 };
00644 
00645 template<>
00646 class JoinTraits<unsigned int, unsigned char>
00647 {
00648 public:
00649   typedef unsigned int ValueType;
00650 };
00651 
00652 template<>
00653 class JoinTraits<unsigned int, short>
00654 {
00655 public:
00656   // unsigned int & unsigned long may be the same size, so promote to float
00657   typedef float ValueType;
00658 };
00659 
00660 template<>
00661 class JoinTraits<unsigned int, unsigned short>
00662 {
00663 public:
00664   typedef unsigned int ValueType;
00665 };
00666 
00667 template<>
00668 class JoinTraits<unsigned int, int>
00669 {
00670 public:
00671   // unsigned int & unsigned long may be the same size, so promote to float
00672   typedef float ValueType;
00673 };
00674 
00675 template<>
00676 class JoinTraits<unsigned int, unsigned int>
00677 {
00678 public:
00679   typedef unsigned int ValueType;
00680 };
00681 
00682 template<>
00683 class JoinTraits<unsigned int, long>
00684 {
00685 public:
00686   typedef float ValueType;
00687 };
00688 
00689 template<>
00690 class JoinTraits<unsigned int, unsigned long>
00691 {
00692 public:
00693   typedef unsigned long ValueType;
00694 };
00695 
00696 template<>
00697 class JoinTraits<unsigned int, float>
00698 {
00699 public:
00700   typedef float ValueType;
00701 };
00702 
00703 template<>
00704 class JoinTraits<unsigned int, double>
00705 {
00706 public:
00707   typedef double ValueType;
00708 };
00709   
00711 template<>
00712 class JoinTraits<long, bool>
00713 {
00714 public:
00715   typedef long ValueType;
00716 };
00717 
00718 template<>
00719 class JoinTraits<long, char>
00720 {
00721 public:
00722   typedef long ValueType;
00723 };
00724 
00725 template<>
00726 class JoinTraits<long, unsigned char>
00727 {
00728 public:
00729   typedef long ValueType;
00730 };
00731 
00732 template<>
00733 class JoinTraits<long, short>
00734 {
00735 public:
00736   typedef long ValueType;
00737 };
00738 
00739 template<>
00740 class JoinTraits<long, unsigned short>
00741 {
00742 public:
00743   typedef long ValueType;
00744 };
00745 
00746 template<>
00747 class JoinTraits<long, int>
00748 {
00749 public:
00750   typedef long ValueType;
00751 };
00752 
00753 template<>
00754 class JoinTraits<long, unsigned int>
00755 {
00756 public:
00757   typedef float ValueType;
00758 };
00759 
00760 template<>
00761 class JoinTraits<long, long>
00762 {
00763 public:
00764   typedef long ValueType;
00765 };
00766 
00767 template<>
00768 class JoinTraits<long, unsigned long>
00769 {
00770 public:
00771   typedef float ValueType;
00772 };
00773 
00774 template<>
00775 class JoinTraits<long, float>
00776 {
00777 public:
00778   typedef float ValueType;
00779 };
00780 
00781 template<>
00782 class JoinTraits<long, double>
00783 {
00784 public:
00785   typedef double ValueType;
00786 };
00787   
00789 template<>
00790 class JoinTraits<unsigned long, bool>
00791 {
00792 public:
00793   typedef unsigned long ValueType;
00794 };
00795 
00796 template<>
00797 class JoinTraits<unsigned long, char>
00798 {
00799 public:
00800   typedef float ValueType;
00801 };
00802 
00803 template<>
00804 class JoinTraits<unsigned long, unsigned char>
00805 {
00806 public:
00807   typedef unsigned long ValueType;
00808 };
00809 
00810 template<>
00811 class JoinTraits<unsigned long, short>
00812 {
00813 public:
00814   typedef float ValueType;
00815 };
00816 
00817 template<>
00818 class JoinTraits<unsigned long, unsigned short>
00819 {
00820 public:
00821   typedef unsigned long ValueType;
00822 };
00823 
00824 template<>
00825 class JoinTraits<unsigned long, int>
00826 {
00827 public:
00828   typedef float ValueType;
00829 };
00830 
00831 template<>
00832 class JoinTraits<unsigned long, unsigned int>
00833 {
00834 public:
00835   typedef unsigned long ValueType;
00836 };
00837 
00838 template<>
00839 class JoinTraits<unsigned long, long>
00840 {
00841 public:
00842   typedef float ValueType;
00843 };
00844 
00845 template<>
00846 class JoinTraits<unsigned long, unsigned long>
00847 {
00848 public:
00849   typedef unsigned long ValueType;
00850 };
00851 
00852 template<>
00853 class JoinTraits<unsigned long, float>
00854 {
00855 public:
00856   typedef float ValueType;
00857 };
00858 
00859 template<>
00860 class JoinTraits<unsigned long, double>
00861 {
00862 public:
00863   typedef double ValueType;
00864 };
00865   
00867 template<>
00868 class JoinTraits<float, bool>
00869 {
00870 public:
00871   typedef float ValueType;
00872 };
00873 
00874 template<>
00875 class JoinTraits<float, char>
00876 {
00877 public:
00878   typedef float ValueType;
00879 };
00880 
00881 template<>
00882 class JoinTraits<float, unsigned char>
00883 {
00884 public:
00885   typedef float ValueType;
00886 };
00887 
00888 template<>
00889 class JoinTraits<float, short>
00890 {
00891 public:
00892   typedef float ValueType;
00893 };
00894 
00895 template<>
00896 class JoinTraits<float, unsigned short>
00897 {
00898 public:
00899   typedef float ValueType;
00900 };
00901 
00902 template<>
00903 class JoinTraits<float, int>
00904 {
00905 public:
00906   typedef float ValueType;
00907 };
00908 
00909 template<>
00910 class JoinTraits<float, unsigned int>
00911 {
00912 public:
00913   typedef float ValueType;
00914 };
00915 
00916 template<>
00917 class JoinTraits<float, long>
00918 {
00919 public:
00920   typedef float ValueType;
00921 };
00922 
00923 template<>
00924 class JoinTraits<float, unsigned long>
00925 {
00926 public:
00927   typedef float ValueType;
00928 };
00929 
00930 template<>
00931 class JoinTraits<float, float>
00932 {
00933 public:
00934   typedef float ValueType;
00935 };
00936 
00937 template<>
00938 class JoinTraits<float, double>
00939 {
00940 public:
00941   typedef double ValueType;
00942 };
00943   
00945 template<>
00946 class JoinTraits<double, bool>
00947 {
00948 public:
00949   typedef double ValueType;
00950 };
00951 
00952 template<>
00953 class JoinTraits<double, char>
00954 {
00955 public:
00956   typedef double ValueType;
00957 };
00958 
00959 template<>
00960 class JoinTraits<double, unsigned char>
00961 {
00962 public:
00963   typedef double ValueType;
00964 };
00965 
00966 template<>
00967 class JoinTraits<double, short>
00968 {
00969 public:
00970   typedef double ValueType;
00971 };
00972 
00973 template<>
00974 class JoinTraits<double, unsigned short>
00975 {
00976 public:
00977   typedef double ValueType;
00978 };
00979 
00980 template<>
00981 class JoinTraits<double, int>
00982 {
00983 public:
00984   typedef double ValueType;
00985 };
00986 
00987 template<>
00988 class JoinTraits<double, unsigned int>
00989 {
00990 public:
00991   typedef double ValueType;
00992 };
00993 
00994 template<>
00995 class JoinTraits<double, long>
00996 {
00997 public:
00998   typedef double ValueType;
00999 };
01000 
01001 template<>
01002 class JoinTraits<double, unsigned long>
01003 {
01004 public:
01005   typedef double ValueType;
01006 };
01007 
01008 template<>
01009 class JoinTraits<double, float>
01010 {
01011 public:
01012   typedef double ValueType;
01013 };
01014 
01015 template<>
01016 class JoinTraits<double, double>
01017 {
01018 public:
01019   typedef double ValueType;
01020 };
01021   
01022 } // end namespace itk
01023 
01024 #endif // __itkPixelTraits_h

Generated at Wed Mar 12 01:13:09 2003 for ITK by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2000