ITK
4.1.0
Insight Segmentation and Registration Toolkit
|
00001 /*========================================================================= 00002 * 00003 * Copyright Insight Software Consortium 00004 * 00005 * Licensed under the Apache License, Version 2.0 (the "License"); 00006 * you may not use this file except in compliance with the License. 00007 * You may obtain a copy of the License at 00008 * 00009 * http://www.apache.org/licenses/LICENSE-2.0.txt 00010 * 00011 * Unless required by applicable law or agreed to in writing, software 00012 * distributed under the License is distributed on an "AS IS" BASIS, 00013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00014 * See the License for the specific language governing permissions and 00015 * limitations under the License. 00016 * 00017 *=========================================================================*/ 00018 /*========================================================================= 00019 * 00020 * Portions of this file are subject to the VTK Toolkit Version 3 copyright. 00021 * 00022 * Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00023 * 00024 * For complete copyright, license and disclaimer of warranty information 00025 * please refer to the NOTICE file at the top of the ITK source tree. 00026 * 00027 *=========================================================================*/ 00028 #ifndef __itkPixelTraits_h 00029 #define __itkPixelTraits_h 00030 00031 #include "itkMacro.h" 00032 00033 namespace itk 00034 { 00044 template< class TPixelType > 00045 class PixelTraits 00046 { 00047 public: 00049 itkStaticConstMacro(Dimension, unsigned int, TPixelType::Length); 00050 00052 typedef typename TPixelType::ValueType ValueType; 00053 }; 00054 00061 template< > 00062 class PixelTraits< bool > 00063 { 00064 public: 00065 itkStaticConstMacro(Dimension, unsigned int, 1); 00066 typedef bool ValueType; 00067 }; 00068 00069 template< > 00070 class PixelTraits< char > 00071 { 00072 public: 00073 itkStaticConstMacro(Dimension, unsigned int, 1); 00074 typedef char ValueType; 00075 }; 00076 00077 template< > 00078 class PixelTraits< signed char > 00079 { 00080 public: 00081 itkStaticConstMacro(Dimension, unsigned int, 1); 00082 typedef char ValueType; 00083 }; 00084 00085 template< > 00086 class PixelTraits< unsigned char > 00087 { 00088 public: 00089 itkStaticConstMacro(Dimension, unsigned int, 1); 00090 typedef unsigned char ValueType; 00091 }; 00092 00093 template< > 00094 class PixelTraits< short > 00095 { 00096 public: 00097 itkStaticConstMacro(Dimension, unsigned int, 1); 00098 typedef short ValueType; 00099 }; 00100 00101 template< > 00102 class PixelTraits< unsigned short > 00103 { 00104 public: 00105 itkStaticConstMacro(Dimension, unsigned int, 1); 00106 typedef unsigned short ValueType; 00107 }; 00108 00109 template< > 00110 class PixelTraits< int > 00111 { 00112 public: 00113 itkStaticConstMacro(Dimension, unsigned int, 1); 00114 typedef int ValueType; 00115 }; 00116 00117 template< > 00118 class PixelTraits< unsigned int > 00119 { 00120 public: 00121 itkStaticConstMacro(Dimension, unsigned int, 1); 00122 typedef unsigned int ValueType; 00123 }; 00124 00125 template< > 00126 class PixelTraits< long > 00127 { 00128 public: 00129 itkStaticConstMacro(Dimension, unsigned int, 1); 00130 typedef long ValueType; 00131 }; 00132 00133 template< > 00134 class PixelTraits< unsigned long > 00135 { 00136 public: 00137 itkStaticConstMacro(Dimension, unsigned int, 1); 00138 typedef unsigned long ValueType; 00139 }; 00140 00141 template< > 00142 class PixelTraits< float > 00143 { 00144 public: 00145 itkStaticConstMacro(Dimension, unsigned int, 1); 00146 typedef float ValueType; 00147 }; 00148 00149 template< > 00150 class PixelTraits< double > 00151 { 00152 public: 00153 itkStaticConstMacro(Dimension, unsigned int, 1); 00154 typedef double ValueType; 00155 }; 00156 00177 template< class TValueType1, class TValueType2 > 00178 class JoinTraits 00179 { 00180 public: 00181 typedef TValueType1 ValueType; 00182 }; 00183 00190 template< > 00191 class JoinTraits< bool, bool > 00192 { 00193 public: 00194 typedef bool ValueType; 00195 }; 00196 00197 template< > 00198 class JoinTraits< bool, char > 00199 { 00200 public: 00201 typedef char ValueType; 00202 }; 00203 00204 template< > 00205 class JoinTraits< bool, unsigned char > 00206 { 00207 public: 00208 typedef unsigned char ValueType; 00209 }; 00210 00211 template< > 00212 class JoinTraits< bool, short > 00213 { 00214 public: 00215 typedef short ValueType; 00216 }; 00217 00218 template< > 00219 class JoinTraits< bool, unsigned short > 00220 { 00221 public: 00222 typedef unsigned short ValueType; 00223 }; 00224 00225 template< > 00226 class JoinTraits< bool, int > 00227 { 00228 public: 00229 typedef int ValueType; 00230 }; 00231 00232 template< > 00233 class JoinTraits< bool, unsigned int > 00234 { 00235 public: 00236 typedef unsigned int ValueType; 00237 }; 00238 00239 template< > 00240 class JoinTraits< bool, long > 00241 { 00242 public: 00243 typedef long ValueType; 00244 }; 00245 00246 template< > 00247 class JoinTraits< bool, unsigned long > 00248 { 00249 public: 00250 typedef unsigned long ValueType; 00251 }; 00252 00253 template< > 00254 class JoinTraits< bool, float > 00255 { 00256 public: 00257 typedef float ValueType; 00258 }; 00259 00260 template< > 00261 class JoinTraits< bool, double > 00262 { 00263 public: 00264 typedef double ValueType; 00265 }; 00266 00271 template< > 00272 class JoinTraits< char, bool > 00273 { 00274 public: 00275 typedef char ValueType; 00276 }; 00277 00278 template< > 00279 class JoinTraits< char, char > 00280 { 00281 public: 00282 typedef char ValueType; 00283 }; 00284 00285 template< > 00286 class JoinTraits< char, unsigned char > 00287 { 00288 public: 00289 typedef short ValueType; 00290 }; 00291 00292 template< > 00293 class JoinTraits< char, short > 00294 { 00295 public: 00296 typedef short ValueType; 00297 }; 00298 00299 template< > 00300 class JoinTraits< char, unsigned short > 00301 { 00302 public: 00303 typedef int ValueType; 00304 }; 00305 00306 template< > 00307 class JoinTraits< char, int > 00308 { 00309 public: 00310 typedef int ValueType; 00311 }; 00312 00313 template< > 00314 class JoinTraits< char, unsigned int > 00315 { 00316 public: 00317 // unsigned int & unsigned long may be the same size, so promote to float 00318 typedef float ValueType; 00319 }; 00320 00321 template< > 00322 class JoinTraits< char, long > 00323 { 00324 public: 00325 typedef long ValueType; 00326 }; 00327 00328 template< > 00329 class JoinTraits< char, unsigned long > 00330 { 00331 public: 00332 typedef float ValueType; 00333 }; 00334 00335 template< > 00336 class JoinTraits< char, float > 00337 { 00338 public: 00339 typedef float ValueType; 00340 }; 00341 00342 template< > 00343 class JoinTraits< char, double > 00344 { 00345 public: 00346 typedef double ValueType; 00347 }; 00348 00353 template< > 00354 class JoinTraits< unsigned char, bool > 00355 { 00356 public: 00357 typedef unsigned char ValueType; 00358 }; 00359 00360 template< > 00361 class JoinTraits< unsigned char, char > 00362 { 00363 public: 00364 typedef short ValueType; 00365 }; 00366 00367 template< > 00368 class JoinTraits< unsigned char, unsigned char > 00369 { 00370 public: 00371 typedef unsigned char ValueType; 00372 }; 00373 00374 template< > 00375 class JoinTraits< unsigned char, short > 00376 { 00377 public: 00378 typedef short ValueType; 00379 }; 00380 00381 template< > 00382 class JoinTraits< unsigned char, unsigned short > 00383 { 00384 public: 00385 typedef unsigned short ValueType; 00386 }; 00387 00388 template< > 00389 class JoinTraits< unsigned char, int > 00390 { 00391 public: 00392 typedef int ValueType; 00393 }; 00394 00395 template< > 00396 class JoinTraits< unsigned char, unsigned int > 00397 { 00398 public: 00399 typedef unsigned int ValueType; 00400 }; 00401 00402 template< > 00403 class JoinTraits< unsigned char, long > 00404 { 00405 public: 00406 typedef long ValueType; 00407 }; 00408 00409 template< > 00410 class JoinTraits< unsigned char, unsigned long > 00411 { 00412 public: 00413 typedef unsigned long ValueType; 00414 }; 00415 00416 template< > 00417 class JoinTraits< unsigned char, float > 00418 { 00419 public: 00420 typedef float ValueType; 00421 }; 00422 00423 template< > 00424 class JoinTraits< unsigned char, double > 00425 { 00426 public: 00427 typedef double ValueType; 00428 }; 00429 00434 template< > 00435 class JoinTraits< short, bool > 00436 { 00437 public: 00438 typedef short ValueType; 00439 }; 00440 00441 template< > 00442 class JoinTraits< short, char > 00443 { 00444 public: 00445 typedef short ValueType; 00446 }; 00447 00448 template< > 00449 class JoinTraits< short, unsigned char > 00450 { 00451 public: 00452 typedef short ValueType; 00453 }; 00454 00455 template< > 00456 class JoinTraits< short, short > 00457 { 00458 public: 00459 typedef short ValueType; 00460 }; 00461 00462 template< > 00463 class JoinTraits< short, unsigned short > 00464 { 00465 public: 00466 typedef int ValueType; 00467 }; 00468 00469 template< > 00470 class JoinTraits< short, int > 00471 { 00472 public: 00473 typedef int ValueType; 00474 }; 00475 00476 template< > 00477 class JoinTraits< short, unsigned int > 00478 { 00479 public: 00480 // unsigned int & unsigned long may be the same size, so promote to float 00481 typedef float ValueType; 00482 }; 00483 00484 template< > 00485 class JoinTraits< short, long > 00486 { 00487 public: 00488 typedef long ValueType; 00489 }; 00490 00491 template< > 00492 class JoinTraits< short, unsigned long > 00493 { 00494 public: 00495 typedef float ValueType; 00496 }; 00497 00498 template< > 00499 class JoinTraits< short, float > 00500 { 00501 public: 00502 typedef float ValueType; 00503 }; 00504 00505 template< > 00506 class JoinTraits< short, double > 00507 { 00508 public: 00509 typedef double ValueType; 00510 }; 00511 00516 template< > 00517 class JoinTraits< unsigned short, bool > 00518 { 00519 public: 00520 typedef unsigned short ValueType; 00521 }; 00522 00523 template< > 00524 class JoinTraits< unsigned short, char > 00525 { 00526 public: 00527 typedef int ValueType; 00528 }; 00529 00530 template< > 00531 class JoinTraits< unsigned short, unsigned char > 00532 { 00533 public: 00534 typedef unsigned short ValueType; 00535 }; 00536 00537 template< > 00538 class JoinTraits< unsigned short, short > 00539 { 00540 public: 00541 typedef int ValueType; 00542 }; 00543 00544 template< > 00545 class JoinTraits< unsigned short, unsigned short > 00546 { 00547 public: 00548 typedef unsigned short ValueType; 00549 }; 00550 00551 template< > 00552 class JoinTraits< unsigned short, int > 00553 { 00554 public: 00555 typedef int ValueType; 00556 }; 00557 00558 template< > 00559 class JoinTraits< unsigned short, unsigned int > 00560 { 00561 public: 00562 typedef unsigned int ValueType; 00563 }; 00564 00565 template< > 00566 class JoinTraits< unsigned short, long > 00567 { 00568 public: 00569 typedef long ValueType; 00570 }; 00571 00572 template< > 00573 class JoinTraits< unsigned short, unsigned long > 00574 { 00575 public: 00576 typedef unsigned long ValueType; 00577 }; 00578 00579 template< > 00580 class JoinTraits< unsigned short, float > 00581 { 00582 public: 00583 typedef float ValueType; 00584 }; 00585 00586 template< > 00587 class JoinTraits< unsigned short, double > 00588 { 00589 public: 00590 typedef double ValueType; 00591 }; 00592 00597 template< > 00598 class JoinTraits< int, bool > 00599 { 00600 public: 00601 typedef int ValueType; 00602 }; 00603 00604 template< > 00605 class JoinTraits< int, char > 00606 { 00607 public: 00608 typedef int ValueType; 00609 }; 00610 00611 template< > 00612 class JoinTraits< int, unsigned char > 00613 { 00614 public: 00615 typedef int ValueType; 00616 }; 00617 00618 template< > 00619 class JoinTraits< int, short > 00620 { 00621 public: 00622 typedef int ValueType; 00623 }; 00624 00625 template< > 00626 class JoinTraits< int, unsigned short > 00627 { 00628 public: 00629 typedef int ValueType; 00630 }; 00631 00632 template< > 00633 class JoinTraits< int, int > 00634 { 00635 public: 00636 typedef int ValueType; 00637 }; 00638 00639 template< > 00640 class JoinTraits< int, unsigned int > 00641 { 00642 public: 00643 // unsigned int & unsigned long may be the same size, so promote to float 00644 typedef float ValueType; 00645 }; 00646 00647 template< > 00648 class JoinTraits< int, long > 00649 { 00650 public: 00651 typedef long ValueType; 00652 }; 00653 00654 template< > 00655 class JoinTraits< int, unsigned long > 00656 { 00657 public: 00658 typedef float ValueType; 00659 }; 00660 00661 template< > 00662 class JoinTraits< int, float > 00663 { 00664 public: 00665 typedef float ValueType; 00666 }; 00667 00668 template< > 00669 class JoinTraits< int, double > 00670 { 00671 public: 00672 typedef double ValueType; 00673 }; 00674 00679 template< > 00680 class JoinTraits< unsigned int, bool > 00681 { 00682 public: 00683 typedef unsigned int ValueType; 00684 }; 00685 00686 template< > 00687 class JoinTraits< unsigned int, char > 00688 { 00689 public: 00690 // unsigned int & unsigned long may be the same size, so promote to float 00691 typedef float ValueType; 00692 }; 00693 00694 template< > 00695 class JoinTraits< unsigned int, unsigned char > 00696 { 00697 public: 00698 typedef unsigned int ValueType; 00699 }; 00700 00701 template< > 00702 class JoinTraits< unsigned int, short > 00703 { 00704 public: 00705 // unsigned int & unsigned long may be the same size, so promote to float 00706 typedef float ValueType; 00707 }; 00708 00709 template< > 00710 class JoinTraits< unsigned int, unsigned short > 00711 { 00712 public: 00713 typedef unsigned int ValueType; 00714 }; 00715 00716 template< > 00717 class JoinTraits< unsigned int, int > 00718 { 00719 public: 00720 // unsigned int & unsigned long may be the same size, so promote to float 00721 typedef float ValueType; 00722 }; 00723 00724 template< > 00725 class JoinTraits< unsigned int, unsigned int > 00726 { 00727 public: 00728 typedef unsigned int ValueType; 00729 }; 00730 00731 template< > 00732 class JoinTraits< unsigned int, long > 00733 { 00734 public: 00735 typedef float ValueType; 00736 }; 00737 00738 template< > 00739 class JoinTraits< unsigned int, unsigned long > 00740 { 00741 public: 00742 typedef unsigned long ValueType; 00743 }; 00744 00745 template< > 00746 class JoinTraits< unsigned int, float > 00747 { 00748 public: 00749 typedef float ValueType; 00750 }; 00751 00752 template< > 00753 class JoinTraits< unsigned int, double > 00754 { 00755 public: 00756 typedef double ValueType; 00757 }; 00758 00763 template< > 00764 class JoinTraits< long, bool > 00765 { 00766 public: 00767 typedef long ValueType; 00768 }; 00769 00770 template< > 00771 class JoinTraits< long, char > 00772 { 00773 public: 00774 typedef long ValueType; 00775 }; 00776 00777 template< > 00778 class JoinTraits< long, unsigned char > 00779 { 00780 public: 00781 typedef long ValueType; 00782 }; 00783 00784 template< > 00785 class JoinTraits< long, short > 00786 { 00787 public: 00788 typedef long ValueType; 00789 }; 00790 00791 template< > 00792 class JoinTraits< long, unsigned short > 00793 { 00794 public: 00795 typedef long ValueType; 00796 }; 00797 00798 template< > 00799 class JoinTraits< long, int > 00800 { 00801 public: 00802 typedef long ValueType; 00803 }; 00804 00805 template< > 00806 class JoinTraits< long, unsigned int > 00807 { 00808 public: 00809 typedef float ValueType; 00810 }; 00811 00812 template< > 00813 class JoinTraits< long, long > 00814 { 00815 public: 00816 typedef long ValueType; 00817 }; 00818 00819 template< > 00820 class JoinTraits< long, unsigned long > 00821 { 00822 public: 00823 typedef float ValueType; 00824 }; 00825 00826 template< > 00827 class JoinTraits< long, float > 00828 { 00829 public: 00830 typedef float ValueType; 00831 }; 00832 00833 template< > 00834 class JoinTraits< long, double > 00835 { 00836 public: 00837 typedef double ValueType; 00838 }; 00839 00844 template< > 00845 class JoinTraits< unsigned long, bool > 00846 { 00847 public: 00848 typedef unsigned long ValueType; 00849 }; 00850 00851 template< > 00852 class JoinTraits< unsigned long, char > 00853 { 00854 public: 00855 typedef float ValueType; 00856 }; 00857 00858 template< > 00859 class JoinTraits< unsigned long, unsigned char > 00860 { 00861 public: 00862 typedef unsigned long ValueType; 00863 }; 00864 00865 template< > 00866 class JoinTraits< unsigned long, short > 00867 { 00868 public: 00869 typedef float ValueType; 00870 }; 00871 00872 template< > 00873 class JoinTraits< unsigned long, unsigned short > 00874 { 00875 public: 00876 typedef unsigned long ValueType; 00877 }; 00878 00879 template< > 00880 class JoinTraits< unsigned long, int > 00881 { 00882 public: 00883 typedef float ValueType; 00884 }; 00885 00886 template< > 00887 class JoinTraits< unsigned long, unsigned int > 00888 { 00889 public: 00890 typedef unsigned long ValueType; 00891 }; 00892 00893 template< > 00894 class JoinTraits< unsigned long, long > 00895 { 00896 public: 00897 typedef float ValueType; 00898 }; 00899 00900 template< > 00901 class JoinTraits< unsigned long, unsigned long > 00902 { 00903 public: 00904 typedef unsigned long ValueType; 00905 }; 00906 00907 template< > 00908 class JoinTraits< unsigned long, float > 00909 { 00910 public: 00911 typedef float ValueType; 00912 }; 00913 00914 template< > 00915 class JoinTraits< unsigned long, double > 00916 { 00917 public: 00918 typedef double ValueType; 00919 }; 00920 00925 template< > 00926 class JoinTraits< float, bool > 00927 { 00928 public: 00929 typedef float ValueType; 00930 }; 00931 00932 template< > 00933 class JoinTraits< float, char > 00934 { 00935 public: 00936 typedef float ValueType; 00937 }; 00938 00939 template< > 00940 class JoinTraits< float, unsigned char > 00941 { 00942 public: 00943 typedef float ValueType; 00944 }; 00945 00946 template< > 00947 class JoinTraits< float, short > 00948 { 00949 public: 00950 typedef float ValueType; 00951 }; 00952 00953 template< > 00954 class JoinTraits< float, unsigned short > 00955 { 00956 public: 00957 typedef float ValueType; 00958 }; 00959 00960 template< > 00961 class JoinTraits< float, int > 00962 { 00963 public: 00964 typedef float ValueType; 00965 }; 00966 00967 template< > 00968 class JoinTraits< float, unsigned int > 00969 { 00970 public: 00971 typedef float ValueType; 00972 }; 00973 00974 template< > 00975 class JoinTraits< float, long > 00976 { 00977 public: 00978 typedef float ValueType; 00979 }; 00980 00981 template< > 00982 class JoinTraits< float, unsigned long > 00983 { 00984 public: 00985 typedef float ValueType; 00986 }; 00987 00988 template< > 00989 class JoinTraits< float, float > 00990 { 00991 public: 00992 typedef float ValueType; 00993 }; 00994 00995 template< > 00996 class JoinTraits< float, double > 00997 { 00998 public: 00999 typedef double ValueType; 01000 }; 01001 01006 template< > 01007 class JoinTraits< double, bool > 01008 { 01009 public: 01010 typedef double ValueType; 01011 }; 01012 01013 template< > 01014 class JoinTraits< double, char > 01015 { 01016 public: 01017 typedef double ValueType; 01018 }; 01019 01020 template< > 01021 class JoinTraits< double, unsigned char > 01022 { 01023 public: 01024 typedef double ValueType; 01025 }; 01026 01027 template< > 01028 class JoinTraits< double, short > 01029 { 01030 public: 01031 typedef double ValueType; 01032 }; 01033 01034 template< > 01035 class JoinTraits< double, unsigned short > 01036 { 01037 public: 01038 typedef double ValueType; 01039 }; 01040 01041 template< > 01042 class JoinTraits< double, int > 01043 { 01044 public: 01045 typedef double ValueType; 01046 }; 01047 01048 template< > 01049 class JoinTraits< double, unsigned int > 01050 { 01051 public: 01052 typedef double ValueType; 01053 }; 01054 01055 template< > 01056 class JoinTraits< double, long > 01057 { 01058 public: 01059 typedef double ValueType; 01060 }; 01061 01062 template< > 01063 class JoinTraits< double, unsigned long > 01064 { 01065 public: 01066 typedef double ValueType; 01067 }; 01068 01069 template< > 01070 class JoinTraits< double, float > 01071 { 01072 public: 01073 typedef double ValueType; 01074 }; 01075 01076 template< > 01077 class JoinTraits< double, double > 01078 { 01079 public: 01080 typedef double ValueType; 01081 }; 01082 01085 } // end namespace itk 01086 01087 #endif // __itkPixelTraits_h 01088