![]() |
ITK
4.2.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 #ifndef __itkImageToImageMetricv4_h 00019 #define __itkImageToImageMetricv4_h 00020 00021 #include "itkCovariantVector.h" 00022 #include "itkImageFunction.h" 00023 #include "itkObjectToObjectMetric.h" 00024 #include "itkInterpolateImageFunction.h" 00025 #include "itkSpatialObject.h" 00026 #include "itkResampleImageFilter.h" 00027 #include "itkThreadedIndexedContainerPartitioner.h" 00028 #include "itkThreadedImageRegionPartitioner.h" 00029 #include "itkImageToImageFilter.h" 00030 #include "itkImageToImageMetricv4GetValueAndDerivativeThreader.h" 00031 #include "itkGradientRecursiveGaussianImageFilter.h" 00032 #include "itkPointSet.h" 00033 00034 namespace itk 00035 { 00175 template<class TFixedImage,class TMovingImage,class TVirtualImage = TFixedImage> 00176 class ITK_EXPORT ImageToImageMetricv4 : 00177 public ObjectToObjectMetric<TFixedImage::ImageDimension, TMovingImage::ImageDimension> 00178 { 00179 public: 00180 00182 typedef ImageToImageMetricv4 Self; 00183 typedef ObjectToObjectMetric<TFixedImage::ImageDimension, TMovingImage::ImageDimension> Superclass; 00184 typedef SmartPointer<Self> Pointer; 00185 typedef SmartPointer<const Self> ConstPointer; 00186 00188 itkTypeMacro(ImageToImageMetricv4, ObjectToObjectMetric); 00189 00191 typedef typename Superclass::InternalComputationValueType InternalComputationValueType; 00192 00194 typedef typename Superclass::CoordinateRepresentationType CoordinateRepresentationType; 00195 00197 typedef typename Superclass::ParametersType ParametersType; 00198 typedef typename Superclass::ParametersValueType ParametersValueType; 00199 00201 typedef typename Superclass::GradientSourceType GradientSourceType; 00202 00204 typedef typename Superclass::DimensionType DimensionType; 00205 typedef typename Superclass::DimensionType ImageDimensionType; 00206 00208 typedef typename Superclass::FixedTransformType FixedTransformType; 00209 typedef typename Superclass::FixedTransformPointer FixedTransformPointer; 00210 typedef typename Superclass::FixedInputPointType FixedInputPointType; 00211 typedef typename Superclass::FixedOutputPointType FixedOutputPointType; 00212 typedef typename Superclass::FixedTransformParametersType FixedTransformParametersType; 00213 00214 typedef typename Superclass::MovingTransformType MovingTransformType; 00215 typedef typename Superclass::MovingTransformPointer MovingTransformPointer; 00216 typedef typename Superclass::MovingInputPointType MovingInputPointType; 00217 typedef typename Superclass::MovingOutputPointType MovingOutputPointType; 00218 typedef typename Superclass::MovingTransformParametersType MovingTransformParametersType; 00219 00220 typedef typename Superclass::JacobianType JacobianType; 00221 typedef typename Superclass::FixedTransformJacobianType FixedTransformJacobianType; 00222 typedef typename Superclass::MovingTransformJacobianType MovingTransformJacobianType; 00223 00225 typedef TFixedImage FixedImageType; 00226 typedef typename FixedImageType::PixelType FixedImagePixelType; 00227 typedef typename FixedImageType::Pointer FixedImagePointer; 00228 typedef typename FixedImageType::ConstPointer FixedImageConstPointer; 00229 typedef typename FixedImageType::PointType FixedImagePointType; 00230 typedef typename FixedImageType::IndexType FixedImageIndexType; 00231 typedef TMovingImage MovingImageType; 00232 typedef typename MovingImageType::PixelType MovingImagePixelType; 00233 typedef typename MovingImageType::Pointer MovingImagePointer; 00234 typedef typename MovingImageType::ConstPointer MovingImageConstPointer; 00235 typedef typename MovingImageType::PointType MovingImagePointType; 00236 typedef typename MovingImageType::RegionType MovingImageRegionType; 00237 typedef typename MovingImageType::IndexType MovingImageIndexType; 00238 00240 typedef TVirtualImage VirtualImageType; 00241 typedef typename VirtualImageType::PixelType VirtualImagePixelType; 00242 typedef typename VirtualImageType::Pointer VirtualImagePointer; 00243 typedef typename VirtualImageType::RegionType VirtualRegionType; 00244 typedef typename VirtualRegionType::SizeType VirtualSizeType; 00245 typedef typename VirtualImageType::SpacingType VirtualSpacingType; 00246 typedef typename VirtualImageType::PointType VirtualOriginType; 00247 typedef typename VirtualImageType::PointType VirtualPointType; 00248 typedef typename VirtualImageType::DirectionType VirtualDirectionType; 00249 typedef typename VirtualImageType::SizeType VirtualRadiusType; 00250 typedef typename VirtualImageType::IndexType VirtualIndexType; 00251 00252 /* Image dimension accessors */ 00253 itkStaticConstMacro(FixedImageDimension, DimensionType, Superclass::FixedDimension); 00254 itkStaticConstMacro(MovingImageDimension, DimensionType, Superclass::MovingDimension); 00255 itkStaticConstMacro(VirtualImageDimension, DimensionType, Superclass::VirtualDimension); 00256 00259 typedef SpatialObject< itkGetStaticConstMacro(FixedImageDimension) > FixedImageMaskType; 00260 typedef typename FixedImageMaskType::Pointer FixedImageMaskPointer; 00261 typedef typename FixedImageMaskType::ConstPointer FixedImageMaskConstPointer; 00262 00265 typedef SpatialObject< itkGetStaticConstMacro(MovingImageDimension) > MovingImageMaskType; 00266 typedef typename MovingImageMaskType::Pointer MovingImageMaskPointer; 00267 typedef typename MovingImageMaskType::ConstPointer MovingImageMaskConstPointer; 00268 00270 typedef PointSet<typename FixedImageType::PixelType, itkGetStaticConstMacro(FixedImageDimension)> 00271 FixedSampledPointSetType; 00272 typedef typename FixedSampledPointSetType::Pointer FixedSampledPointSetPointer; 00273 typedef typename FixedSampledPointSetType::ConstPointer FixedSampledPointSetConstPointer; 00274 00275 typedef PointSet<typename VirtualImageType::PixelType, itkGetStaticConstMacro(VirtualImageDimension)> 00276 VirtualSampledPointSetType; 00277 00278 typedef typename VirtualSampledPointSetType::Pointer VirtualSampledPointSetPointer; 00279 00281 typedef InterpolateImageFunction< FixedImageType, 00282 CoordinateRepresentationType > 00283 FixedInterpolatorType; 00284 typedef InterpolateImageFunction< MovingImageType, 00285 CoordinateRepresentationType > 00286 MovingInterpolatorType; 00287 typedef typename FixedInterpolatorType::Pointer FixedInterpolatorPointer; 00288 typedef typename MovingInterpolatorType::Pointer MovingInterpolatorPointer; 00289 00291 typedef CovariantVector< CoordinateRepresentationType, 00292 itkGetStaticConstMacro(FixedImageDimension) > 00293 FixedImageGradientType; 00294 typedef CovariantVector< CoordinateRepresentationType, 00295 itkGetStaticConstMacro(MovingImageDimension) > 00296 MovingImageGradientType; 00298 00299 typedef CovariantVector< CoordinateRepresentationType, 00300 itkGetStaticConstMacro(VirtualImageDimension) > 00301 VirtualImageGradientType; 00302 00306 typedef typename NumericTraits< FixedImagePixelType >::RealType 00307 FixedRealType; 00308 typedef CovariantVector< FixedRealType, 00309 itkGetStaticConstMacro(FixedImageDimension) > 00310 FixedGradientPixelType; 00311 typedef Image< FixedGradientPixelType, 00312 itkGetStaticConstMacro(FixedImageDimension) > 00313 FixedImageGradientImageType; 00314 typedef typename FixedImageGradientImageType::Pointer 00315 FixedImageGradientImagePointer; 00317 00318 typedef ImageToImageFilter< FixedImageType, FixedImageGradientImageType > 00319 FixedImageGradientFilterType; 00320 00321 typedef typename NumericTraits< MovingImagePixelType >::RealType 00322 MovingRealType; 00323 typedef CovariantVector< MovingRealType, 00324 itkGetStaticConstMacro(MovingImageDimension) > 00325 MovingGradientPixelType; 00326 typedef Image< MovingGradientPixelType, 00327 itkGetStaticConstMacro(MovingImageDimension) > 00328 MovingImageGradientImageType; 00329 typedef typename MovingImageGradientImageType::Pointer MovingImageGradientImagePointer; 00330 00331 typedef ImageToImageFilter< MovingImageType, MovingImageGradientImageType > 00332 MovingImageGradientFilterType; 00333 typedef typename FixedImageGradientFilterType::Pointer 00334 FixedImageGradientFilterPointer; 00335 typedef typename MovingImageGradientFilterType::Pointer 00336 MovingImageGradientFilterPointer; 00337 00339 typedef GradientRecursiveGaussianImageFilter< FixedImageType, 00340 FixedImageGradientImageType > 00341 DefaultFixedImageGradientFilter; 00342 typedef GradientRecursiveGaussianImageFilter< MovingImageType, 00343 MovingImageGradientImageType > 00344 DefaultMovingImageGradientFilter; 00345 00348 typedef ImageFunction<FixedImageType, 00349 CovariantVector<double, 00350 itkGetStaticConstMacro( FixedImageDimension )>, 00351 CoordinateRepresentationType> 00352 FixedImageGradientCalculatorType; 00353 typedef ImageFunction<MovingImageType, 00354 CovariantVector<double, 00355 itkGetStaticConstMacro( MovingImageDimension )>, 00356 CoordinateRepresentationType> 00357 MovingImageGradientCalculatorType; 00359 00360 typedef typename FixedImageGradientCalculatorType::Pointer 00361 FixedImageGradientCalculatorPointer; 00362 typedef typename MovingImageGradientCalculatorType::Pointer 00363 MovingImageGradientCalculatorPointer; 00364 00366 typedef typename Superclass::MeasureType MeasureType; 00367 00369 typedef typename Superclass::DerivativeType DerivativeType; 00370 typedef typename DerivativeType::ValueType DerivativeValueType; 00371 00374 typedef typename Superclass::NumberOfParametersType NumberOfParametersType; 00375 00376 /* Set/get images */ 00378 itkSetConstObjectMacro(FixedImage, FixedImageType); 00379 00381 itkGetConstObjectMacro(FixedImage, FixedImageType); 00382 00384 itkSetConstObjectMacro(MovingImage, MovingImageType); 00385 00387 itkGetConstObjectMacro(MovingImage, MovingImageType); 00388 00404 void CreateVirtualDomainImage( VirtualSpacingType & spacing, 00405 VirtualOriginType & origin, 00406 VirtualDirectionType & direction, 00407 VirtualRegionType & region ); 00408 00414 void SetVirtualDomainImage( VirtualImageType * virtualImage); 00415 00417 itkGetConstObjectMacro(VirtualDomainImage, VirtualImageType); 00418 00421 const VirtualSpacingType GetVirtualDomainSpacing( void ) const; 00422 const VirtualOriginType GetVirtualDomainOrigin( void ) const; 00423 const VirtualDirectionType GetVirtualDomainDirection( void ) const; 00424 const VirtualRegionType GetVirtualDomainRegion( void ) const; 00426 00428 itkSetObjectMacro(FixedInterpolator, FixedInterpolatorType); 00429 00431 itkGetConstObjectMacro(FixedInterpolator, FixedInterpolatorType); 00432 00434 itkSetObjectMacro(MovingInterpolator, MovingInterpolatorType); 00435 00437 itkGetConstObjectMacro(MovingInterpolator, MovingInterpolatorType); 00438 00440 itkSetObjectMacro(MovingImageMask, MovingImageMaskType); 00441 itkSetConstObjectMacro(MovingImageMask, MovingImageMaskType); 00442 itkGetConstObjectMacro(MovingImageMask, MovingImageMaskType); 00444 00446 itkSetObjectMacro(FixedImageMask, FixedImageMaskType); 00447 itkSetConstObjectMacro(FixedImageMask, FixedImageMaskType); 00448 itkGetConstObjectMacro(FixedImageMask, FixedImageMaskType); 00450 00454 itkSetObjectMacro(FixedSampledPointSet, FixedSampledPointSetType); 00455 itkSetConstObjectMacro(FixedSampledPointSet, FixedSampledPointSetType); 00456 itkGetConstObjectMacro(FixedSampledPointSet, FixedSampledPointSetType); 00458 00460 itkSetMacro(UseFixedSampledPointSet, bool); 00461 itkGetConstReferenceMacro(UseFixedSampledPointSet, bool); 00462 itkBooleanMacro(UseFixedSampledPointSet); 00464 00466 itkGetConstObjectMacro(VirtualSampledPointSet, VirtualSampledPointSetType); 00467 00469 itkSetObjectMacro( FixedImageGradientFilter, FixedImageGradientFilterType ); 00470 itkGetObjectMacro( FixedImageGradientFilter, FixedImageGradientFilterType ); 00471 itkSetObjectMacro( MovingImageGradientFilter, MovingImageGradientFilterType ); 00472 itkGetObjectMacro( MovingImageGradientFilter, MovingImageGradientFilterType ); 00474 00476 itkSetObjectMacro( FixedImageGradientCalculator, FixedImageGradientCalculatorType); 00477 itkGetObjectMacro( FixedImageGradientCalculator, FixedImageGradientCalculatorType); 00478 itkSetObjectMacro( MovingImageGradientCalculator, MovingImageGradientCalculatorType); 00479 itkGetObjectMacro( MovingImageGradientCalculator, MovingImageGradientCalculatorType); 00481 00484 itkSetMacro(UseFixedImageGradientFilter, bool); 00485 itkGetConstReferenceMacro(UseFixedImageGradientFilter, bool); 00486 itkBooleanMacro(UseFixedImageGradientFilter); 00488 00490 itkSetMacro(UseMovingImageGradientFilter, bool); 00491 itkGetConstReferenceMacro(UseMovingImageGradientFilter, bool); 00492 itkBooleanMacro(UseMovingImageGradientFilter); 00494 00497 virtual ThreadIdType GetNumberOfThreadsUsed() const; 00498 00502 virtual void SetMaximumNumberOfThreads( const ThreadIdType threads ); 00503 virtual ThreadIdType GetMaximumNumberOfThreads() const; 00505 00507 itkGetConstObjectMacro(FixedImageGradientImage, FixedImageGradientImageType); 00508 00510 itkGetConstObjectMacro(MovingImageGradientImage, MovingImageGradientImageType); 00511 00513 itkGetConstMacro( NumberOfValidPoints, SizeValueType ); 00514 00519 SizeValueType GetNumberOfDomainPoints() const; 00520 00534 itkSetMacro(UseFloatingPointCorrection, bool); 00535 itkGetConstReferenceMacro(UseFloatingPointCorrection, bool); 00536 itkBooleanMacro(UseFloatingPointCorrection); 00538 00543 itkSetMacro( FloatingPointCorrectionResolution, DerivativeValueType ); 00544 itkGetConstMacro( FloatingPointCorrectionResolution, DerivativeValueType ); 00546 00547 /* Initialize the metric before calling GetValue or GetDerivative. 00548 * Derived classes must call this Superclass version if they override 00549 * this to perform their own initialization. 00550 * \note This is meant to be called once for a particular metric setup. 00551 * That is, when used in registration, this method would be called once 00552 * before entering the registration loop, during which GetValue or 00553 * GetDerivative will be called repeatedly. It must be called again if 00554 * metric settings are changed before beginning a new registration. */ 00555 virtual void Initialize(void) throw ( itk::ExceptionObject ); 00556 00557 /* Computes an offset for accessing parameter data from a virtual domain 00558 * index. Relevant for metrics with local-support transforms, to access 00559 * parameter or derivative memory that is stored linearly in a 1D array. 00560 * The result is the offset (1D array index) to the first of N parameters 00561 * corresponding to the given virtual index, where N is the number of 00562 * local parameters. */ 00563 OffsetValueType ComputeParameterOffsetFromVirtualDomainIndex( const VirtualIndexType & index, const NumberOfParametersType numberOfLocalParameters ) const; 00564 00565 virtual MeasureType GetValue() const; 00566 00567 virtual void GetDerivative( DerivativeType & ) const; 00568 00574 virtual void GetValueAndDerivative( MeasureType & value, DerivativeType & derivative ) const; 00575 00579 itkGetConstReferenceMacro(NumberOfSkippedFixedSampledPoints, SizeValueType); 00580 00581 protected: 00582 /* Interpolators for image gradient filters. */ 00583 typedef LinearInterpolateImageFunction< FixedImageGradientImageType, 00584 CoordinateRepresentationType > 00585 FixedImageGradientInterpolatorType; 00586 typedef LinearInterpolateImageFunction< MovingImageGradientImageType, 00587 CoordinateRepresentationType > 00588 MovingImageGradientInterpolatorType; 00589 00590 friend class ImageToImageMetricv4GetValueAndDerivativeThreaderBase< ThreadedImageRegionPartitioner< VirtualImageDimension >, Self >; 00591 friend class ImageToImageMetricv4GetValueAndDerivativeThreaderBase< ThreadedIndexedContainerPartitioner, Self >; 00592 friend class ImageToImageMetricv4GetValueAndDerivativeThreader< ThreadedImageRegionPartitioner< VirtualImageDimension >, Self >; 00593 friend class ImageToImageMetricv4GetValueAndDerivativeThreader< ThreadedIndexedContainerPartitioner, Self >; 00594 00595 /* A DenseGetValueAndDerivativeThreader 00596 * Derived classes must define this class and assign it in their constructor 00597 * if threaded processing in GetValueAndDerivative is performed. */ 00598 typename ImageToImageMetricv4GetValueAndDerivativeThreader< ThreadedImageRegionPartitioner< VirtualImageDimension >, Self >::Pointer m_DenseGetValueAndDerivativeThreader; 00599 /* A SparseGetValueAndDerivativeThreader 00600 * Derived classes must define this class and assign it in their constructor 00601 * if threaded processing in GetValueAndDerivative is performed. */ 00602 typename ImageToImageMetricv4GetValueAndDerivativeThreader< ThreadedIndexedContainerPartitioner, Self >::Pointer m_SparseGetValueAndDerivativeThreader; 00603 00608 virtual void InitializeForIteration() const; 00609 00622 bool TransformAndEvaluateFixedPoint( 00623 const VirtualIndexType & index, 00624 const VirtualPointType & point, 00625 const bool computeImageGradient, 00626 FixedImagePointType & mappedFixedPoint, 00627 FixedImagePixelType & mappedFixedPixelValue, 00628 FixedImageGradientType & mappedFixedImageGradient ) const; 00629 00631 bool TransformAndEvaluateMovingPoint( 00632 const VirtualIndexType & index, 00633 const VirtualPointType & point, 00634 const bool computeImageGradient, 00635 MovingImagePointType & mappedMovingPoint, 00636 MovingImagePixelType & mappedMovingPixelValue, 00637 MovingImageGradientType & mappedMovingImageGradient ) const; 00638 00643 virtual void ComputeFixedImageGradientAtPoint( 00644 const FixedImagePointType & mappedPoint, 00645 FixedImageGradientType & gradient ) const; 00646 00648 virtual void ComputeMovingImageGradientAtPoint( 00649 const MovingImagePointType & mappedPoint, 00650 MovingImageGradientType & gradient ) const; 00651 00657 virtual void ComputeFixedImageGradientAtIndex( 00658 const VirtualIndexType & index, 00659 FixedImageGradientType & gradient ) const; 00660 00662 virtual void ComputeMovingImageGradientAtIndex( 00663 const VirtualIndexType & index, 00664 MovingImageGradientType & gradient ) const; 00665 00669 virtual void ComputeFixedImageGradientFilterImage(); 00670 00674 virtual void ComputeMovingImageGradientFilterImage() const; 00675 00682 virtual void GetValueAndDerivativeExecute() const; 00683 00686 virtual void InitializeDefaultFixedImageGradientFilter(void); 00687 virtual void InitializeDefaultMovingImageGradientFilter(void); 00689 00690 FixedImageConstPointer m_FixedImage; 00691 MovingImageConstPointer m_MovingImage; 00692 VirtualImagePointer m_VirtualDomainImage; 00693 00695 FixedInterpolatorPointer m_FixedInterpolator; 00696 MovingInterpolatorPointer m_MovingInterpolator; 00697 typename FixedImageGradientInterpolatorType::Pointer m_FixedImageGradientInterpolator; 00698 typename MovingImageGradientInterpolatorType::Pointer m_MovingImageGradientInterpolator; 00699 00702 bool m_UseFixedImageGradientFilter; 00703 bool m_UseMovingImageGradientFilter; 00704 00706 FixedImageGradientFilterPointer m_FixedImageGradientFilter; 00707 MovingImageGradientFilterPointer m_MovingImageGradientFilter; 00708 00711 typename DefaultFixedImageGradientFilter::Pointer 00712 m_DefaultFixedImageGradientFilter; 00713 typename DefaultMovingImageGradientFilter::Pointer 00714 m_DefaultMovingImageGradientFilter; 00715 00717 mutable FixedImageGradientImagePointer m_FixedImageGradientImage; 00718 mutable MovingImageGradientImagePointer m_MovingImageGradientImage; 00719 00721 FixedImageGradientCalculatorPointer m_FixedImageGradientCalculator; 00722 MovingImageGradientCalculatorPointer m_MovingImageGradientCalculator; 00723 00728 mutable DerivativeType * m_DerivativeResult; 00729 00732 mutable SizeValueType m_NumberOfValidPoints; 00733 00736 bool m_UserHasProvidedVirtualDomainImage; 00737 00739 FixedImageMaskConstPointer m_FixedImageMask; 00740 MovingImageMaskConstPointer m_MovingImageMask; 00741 00743 FixedSampledPointSetConstPointer m_FixedSampledPointSet; 00744 VirtualSampledPointSetPointer m_VirtualSampledPointSet; 00745 00747 bool m_UseFixedSampledPointSet; 00748 00749 ImageToImageMetricv4(); 00750 virtual ~ImageToImageMetricv4(); 00751 00752 void PrintSelf(std::ostream& os, Indent indent) const; 00753 00756 virtual void VerifyDisplacementFieldSizeAndPhysicalSpace(); 00757 00764 bool VerifyNumberOfValidPoints( MeasureType & value, DerivativeType & derivative ) const; 00765 00766 private: 00768 void MapFixedSampledPointSetToVirtual( void ); 00769 00772 mutable bool m_HaveMadeGetValueWarning; 00773 00774 ImageToImageMetricv4(const Self &); //purposely not implemented 00775 void operator=(const Self &); //purposely not implemented 00776 00777 //Sample point coordinates from the virtual image domain 00778 std::vector<VirtualPointType> m_VirtualImageCornerPoints; 00779 00780 /* Keep track of the number of sampled fixed points that are 00781 * deemed invalid during conversion to virtual domain. 00782 * For informational purposes. */ 00783 SizeValueType m_NumberOfSkippedFixedSampledPoints; 00784 00785 bool m_UseFloatingPointCorrection; 00786 DerivativeValueType m_FloatingPointCorrectionResolution; 00787 00790 #ifdef ITK_USE_CONCEPT_CHECKING 00791 typedef typename PixelTraits<FixedImagePixelType>::ValueType FixedImagePixelValueType; 00792 typedef typename PixelTraits<MovingImagePixelType>::ValueType MovingImagePixelValueType; 00793 itkConceptMacro( OnlyDefinedForFloatingPointTypes0, ( itk::Concept::IsFloatingPoint<FixedImagePixelValueType> ) ); 00794 itkConceptMacro( OnlyDefinedForFloatingPointTypes1, ( itk::Concept::IsFloatingPoint<MovingImagePixelValueType> ) ); 00795 #endif // ITK_USE_CONCEPT_CHECKING 00796 00797 00798 }; 00799 }//namespace itk 00800 00801 #ifndef ITK_MANUAL_INSTANTIATION 00802 #include "itkImageToImageMetricv4.hxx" 00803 #endif 00804 00805 #endif 00806
1.7.6.1