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: 2003/09/10 14:29:22 $ 00007 Version: $Revision: 1.26 $ 00008 00009 Copyright (c) Insight Software 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 Sun Apr 1 02:41:02 2007 for ITK by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2000