This file is indexed.

/usr/include/ITK-4.5/itkZeroFluxNeumannBoundaryCondition.hxx is in libinsighttoolkit4-dev 4.5.0-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
/*=========================================================================
 *
 *  Copyright Insight Software Consortium
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *         http://www.apache.org/licenses/LICENSE-2.0.txt
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *=========================================================================*/
#ifndef __itkZeroFluxNeumannBoundaryCondition_hxx
#define __itkZeroFluxNeumannBoundaryCondition_hxx

#include "itkZeroFluxNeumannBoundaryCondition.h"

namespace itk
{
template< typename TInputImage, typename TOutputImage >
typename ZeroFluxNeumannBoundaryCondition< TInputImage, TOutputImage >::OutputPixelType
ZeroFluxNeumannBoundaryCondition< TInputImage, TOutputImage >
::operator()(const OffsetType & point_index, const OffsetType & boundary_offset,
             const NeighborhoodType *data) const
{
  int linear_index = 0;

  // Return the value of the pixel at the closest boundary point.
  for ( unsigned int i = 0; i < ImageDimension; ++i )
    {
    linear_index += ( point_index[i] + boundary_offset[i] ) * data->GetStride(i);
    }

  // The reinterpret_cast is necessary, cause we will have a warning if we
  // do not do this. (In fact this function exists for legacy
  // reasons. The overloaded function below should be (and is) used instead).
  // See any of the neighborhood iterators.
  //
  // (data->operator[](linear_index)) is guaranteed to be a pointer to
  // TImage::PixelType except for VectorImage, in which case, it will be a
  // pointer to TImage::InternalPixelType.
  //
  // A typical neighborhood iterator working on an image will use the boundary
  // condition in the following manner:
  //
  // \code
  // // Initialize the functor typically in the constructor.
  // m_NeighborhoodAccessorFunctor = image->GetNeighborhoodAccessor();
  // m_NeighborhoodAccessorFunctor->SetBegin( image->GetBufferPointer() );
  //
  // m_NeighborhoodAccessorFunctor.BoundaryCondition(
  //    point_index, boundary_offset, data, m_ChosenBoundaryCondition );
  // \endcode
  //
  return static_cast< OutputPixelType >
    (*( reinterpret_cast< PixelType * >( ( data->operator[](linear_index) ) ) ) );
}

template< typename TInputImage, typename TOutputImage >
typename ZeroFluxNeumannBoundaryCondition< TInputImage, TOutputImage >::OutputPixelType
ZeroFluxNeumannBoundaryCondition< TInputImage, TOutputImage >
::operator()(const OffsetType & point_index, const OffsetType & boundary_offset,
             const NeighborhoodType *data,
             const NeighborhoodAccessorFunctorType & neighborhoodAccessorFunctor) const
{
  int linear_index = 0;

  // Return the value of the pixel at the closest boundary point.
  for ( unsigned int i = 0; i < ImageDimension; ++i )
    {
    linear_index += ( point_index[i] + boundary_offset[i] ) * data->GetStride(i);
    }

  return static_cast< OutputPixelType >
    ( neighborhoodAccessorFunctor.Get( data->operator[](linear_index) ) );
}


template< typename TInputImage, typename TOutputImage >
typename ZeroFluxNeumannBoundaryCondition< TInputImage, TOutputImage >::RegionType
ZeroFluxNeumannBoundaryCondition< TInputImage, TOutputImage >
::GetInputRequestedRegion( const RegionType & inputLargestPossibleRegion,
                           const RegionType & outputRequestedRegion ) const
{
  IndexType inputIndex = inputLargestPossibleRegion.GetIndex();
  SizeType  inputSize  = inputLargestPossibleRegion.GetSize();

  IndexType outputIndex = outputRequestedRegion.GetIndex();
  SizeType  outputSize  = outputRequestedRegion.GetSize();

  IndexType  requestIndex;
  SizeType   requestSize;
  RegionType requestRegion;

  for ( unsigned int i = 0; i < ImageDimension; i++)
    {
    // Check if the output region is entirely below the low index of
    // the image region.
    if ( outputIndex[i] + static_cast< OffsetValueType >( outputSize[i] ) <= inputIndex[i] )
      {
      // Include an image layer one pixel thick closest to the outputRequestedRegion
      requestIndex[i] = inputIndex[i];
      requestSize[i]  = 1;
      }
    // Check if the output is entirely above the high index of the
    // image region.
    else if (  outputIndex[i] >= inputIndex[i] + static_cast< OffsetValueType >( inputSize[i] ) )
      {
      // Include an image layer one pixel thick closest to the outputRequestedRegion
      requestIndex[i] = inputIndex[i] + static_cast< OffsetValueType >( inputSize[i] ) - 1;
      requestSize[i]  = 1;
      }
    // The output region intersects the image region.
    else
      {
      requestIndex[i] = inputIndex[i];
      requestSize[i]  = inputSize[i];

      // First check the start index
      if ( requestIndex[i] < outputIndex[i] )
        {
        // How much do we need to adjust
        OffsetValueType crop = outputIndex[i] - requestIndex[i];

        // Adjust the start index and the size of the current region
        requestIndex[i] += crop;
        requestSize[i] -= static_cast< SizeValueType >( crop );
        }
      // Now check the final size
      if ( requestIndex[i] + static_cast< OffsetValueType >( requestSize[i] ) >
           outputIndex[i] + static_cast< OffsetValueType >( outputSize[i] ) )
        {
        // How much do we need to adjust
        OffsetValueType crop = requestIndex[i] + static_cast< OffsetValueType >( requestSize[i] )
          - outputIndex[i] - static_cast< OffsetValueType >( outputSize[i] );

        // Adjust the size
        requestSize[i] -= static_cast< SizeValueType >( crop );
        }
      }
    }

  RegionType inputRequestedRegion( requestIndex, requestSize );

  return inputRequestedRegion;
}


template< typename TInputImage, typename TOutputImage >
typename ZeroFluxNeumannBoundaryCondition< TInputImage, TOutputImage >::OutputPixelType
ZeroFluxNeumannBoundaryCondition< TInputImage, TOutputImage >
::GetPixel( const IndexType & index, const TInputImage * image ) const
{
  RegionType imageRegion = image->GetLargestPossibleRegion();
  IndexType  imageIndex  = imageRegion.GetIndex();
  SizeType   imageSize   = imageRegion.GetSize();

  IndexType lookupIndex;

  for ( unsigned int i = 0; i < ImageDimension; ++i )
    {
    IndexValueType lowerIndex = imageIndex[i];
    IndexValueType upperIndex = imageIndex[i] + static_cast< IndexValueType >( imageSize[i] ) - 1;
    if ( index[i] < lowerIndex )
      {
      lookupIndex[i] = lowerIndex;
      }
    else if ( index[i] > upperIndex )
      {
      lookupIndex[i] = upperIndex;
      }
    else // in bounds
      {
      lookupIndex[i] = index[i];
      }
    }

  return static_cast< OutputPixelType >( image->GetPixel( lookupIndex ) );
}

} // end namespace itk

#endif