WRAP_CLASS("itk::ImageLinearConstIteratorWithIndex")

  SET(MANAGED_TYPE_TEMPLATE ${MANAGED_ITK_SOURCE_COMMON_PATH}/itkManagedImageIteratorWithIndex_TYPE.cxx.in)
  SET(MANAGED_WRAPPER_TEMPLATE ${MANAGED_ITK_SOURCE_COMMON_PATH}/itkManagedImageIteratorWithIndex_WRAPPER.cxx.in)
  SET(MANAGED_SUBCLASS itk::itkImageConstIteratorWithIndex)

  WRAP_IMAGE_FILTER_USIGN_INT(1)
  WRAP_IMAGE_FILTER_SIGN_INT(1)
  WRAP_IMAGE_FILTER_REAL(1)
  WRAP_IMAGE_FILTER_BOOL(1)

  BEGIN_MANAGED_CONSTRUCTOR()
    SET(MANAGED_CONSTRUCTOR_SUMMARY       "Constructor taking image and region.")
    SET(MANAGED_CONSTRUCTOR_PARAMS        "itk::itkImageBase^ image, itk::itkImageRegion^ region")
    SET(MANAGED_CONSTRUCTOR_TYPE_BODY     "this->Initialise();\n\t\tthis->m_PointerToNative = new NativeType( (NativeType::ImageType*)image->NativePointer.ToPointer(), itk::ManagedTypes::ToNativeImageRegion<NativeType::ImageDimension>(region) );")
    SET(MANAGED_CONSTRUCTOR_WRAPPER_BODY  "this->m_MangledTypeString = image->MangledTypeString;\n\t\tarray<Object^>^ args = {image, region};\n\t\tthis->CreateInstance( args );")
  END_MANAGED_CONSTRUCTOR()
  
  BEGIN_MANAGED_METHOD("NextLine")
    SET(MANAGED_METHOD_SUMMARY         "Go to the next line.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "void")
    SET(MANAGED_METHOD_TYPE_BODY       "this->m_PointerToNative->NextLine();")
    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->NextLine();")
  END_MANAGED_METHOD()

  BEGIN_MANAGED_METHOD("PreviousLine")
    SET(MANAGED_METHOD_SUMMARY         "Go to the previous line.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "void")
    SET(MANAGED_METHOD_TYPE_BODY       "this->m_PointerToNative->PreviousLine();")
    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->PreviousLine();")
  END_MANAGED_METHOD()
  
  BEGIN_MANAGED_METHOD("GoToBeginOfLine")
    SET(MANAGED_METHOD_SUMMARY         "Go to the beginning pixel of the current line.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "void")
    SET(MANAGED_METHOD_TYPE_BODY       "this->m_PointerToNative->GoToBeginOfLine();")
    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->GoToBeginOfLine();")
  END_MANAGED_METHOD()

  BEGIN_MANAGED_METHOD("GoToReverseBeginOfLine")
    SET(MANAGED_METHOD_SUMMARY         "Go to the beginning pixel of the current line.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "void")
    SET(MANAGED_METHOD_TYPE_BODY       "this->m_PointerToNative->GoToReverseBeginOfLine();")
    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->GoToReverseBeginOfLine();")
  END_MANAGED_METHOD()

  BEGIN_MANAGED_METHOD("GoToEndOfLine")
    SET(MANAGED_METHOD_SUMMARY         "Go to the past end pixel of the current line.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "void")
    SET(MANAGED_METHOD_TYPE_BODY       "this->m_PointerToNative->GoToEndOfLine();")
    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->GoToEndOfLine();")
  END_MANAGED_METHOD()

  BEGIN_MANAGED_PROPERTY("IsAtEndOfLine" GET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get if the index is at the end of a line.")
    SET(MANAGED_PROPERTY_TYPE      "bool")
    SET(MANAGED_PROPERTY_GET_BODY  "return this->m_PointerToNative->IsAtEndOfLine();")
  END_MANAGED_PROPERTY()
  
  BEGIN_MANAGED_PROPERTY("IsAtReverseEndOfLine" GET)
    SET(MANAGED_PROPERTY_SUMMARY   "Get if the index is at the beginning of a line.")
    SET(MANAGED_PROPERTY_TYPE      "bool")
    SET(MANAGED_PROPERTY_GET_BODY  "return this->m_PointerToNative->IsAtEndOfLine();")
  END_MANAGED_PROPERTY()
 
  BEGIN_MANAGED_METHOD("SetDirection")
    SET(MANAGED_METHOD_SUMMARY         "Set the direction of movement.")
    SET(MANAGED_METHOD_RETURN_TYPE     "void")
    SET(MANAGED_METHOD_PARAMS          "unsigned int direction")
    SET(MANAGED_METHOD_TYPE_BODY       "this->m_PointerToNative->SetDirection( direction );")
    SET(MANAGED_METHOD_WRAPPER_BODY    "iInstance->SetDirection( direction );")
  END_MANAGED_METHOD()

END_WRAP_CLASS()
