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 __itkByteSwapper_h 00029 #define __itkByteSwapper_h 00030 00031 #include "itkObject.h" 00032 #include "itkObjectFactory.h" 00033 #include "itkIntTypes.h" 00034 00035 namespace itk 00036 { 00049 template< class T > 00050 class ITK_EXPORT ByteSwapper:public Object 00051 { 00052 public: 00054 typedef ByteSwapper Self; 00055 typedef Object Superclass; 00056 typedef SmartPointer< Self > Pointer; 00057 typedef SmartPointer< const Self > ConstPointer; 00058 00060 typedef std::ostream OStreamType; 00061 00063 itkTypeMacro(ByteSwapper, Object); 00064 00066 static bool SystemIsBigEndian(); 00067 00068 static bool SystemIsBE() { return SystemIsBigEndian(); } 00069 static bool SystemIsLittleEndian(); 00070 00071 static bool SystemIsLE() { return SystemIsLittleEndian(); } 00072 00078 static void SwapFromSystemToBigEndian(T *p); 00079 00082 typedef SizeValueType BufferSizeType; 00083 00089 static void SwapRangeFromSystemToBigEndian(T *p, BufferSizeType num); 00090 00098 static void SwapWriteRangeFromSystemToBigEndian(T *p, int num, 00099 OStreamType *fp); 00101 00107 static void SwapFromSystemToLittleEndian(T *p); 00108 00114 static void SwapRangeFromSystemToLittleEndian(T *p, BufferSizeType num); 00115 00123 static void SwapWriteRangeFromSystemToLittleEndian(T *p, int num, 00124 OStreamType *fp); 00126 00127 protected: 00128 ByteSwapper() {} 00129 ~ByteSwapper() {} 00130 00132 static void Swap2(void *p); 00133 00136 static void Swap2Range(void *p, BufferSizeType num); 00137 00140 static void SwapWrite2Range(void *p, BufferSizeType num, OStreamType *fp); 00141 00143 static void Swap4(void *p); 00144 00147 static void Swap4Range(void *p, BufferSizeType num); 00148 00151 static void SwapWrite4Range(void *p, BufferSizeType num, OStreamType *fp); 00152 00154 static void Swap8(void *p); 00155 00158 static void Swap8Range(void *p, BufferSizeType num); 00159 00162 static void SwapWrite8Range(void *p, BufferSizeType num, OStreamType *fp); 00163 00164 private: 00165 ByteSwapper(const ByteSwapper &); //purposely not implemented 00166 void operator=(const ByteSwapper &); //purposely not implemented 00167 }; 00168 } // end namespace itk 00169 00170 #ifndef ITK_MANUAL_INSTANTIATION 00171 #include "itkByteSwapper.hxx" 00172 #endif 00173 00174 #endif 00175