Skip to content

Commit

Permalink
ENH: Add .gitattributes to allow running ITK clang-formatting scripts
Browse files Browse the repository at this point in the history
```
git filter-branch -f \
--tree-filter "~/ITK/Utilities/Maintenance/clang-format.bash --clang-format ~/Dashboard/src/ITK-clang11/clang-format-Linux --tracked" \
    master..
```
  • Loading branch information
hjmjohnson authored and dzenanz committed Feb 20, 2020
1 parent 9939b64 commit 37c7b87
Show file tree
Hide file tree
Showing 8 changed files with 270 additions and 124 deletions.
151 changes: 151 additions & 0 deletions .clang-format
@@ -0,0 +1,151 @@
## This config file is only relevant for clang-format version 8.0.0
##
## Examples of each format style can be found on the in the clang-format documentation
## See: https://clang.llvm.org/docs/ClangFormatStyleOptions.html for details of each option
##
## The clang-format binaries can be downloaded as part of the clang binary distributions
## from http://releases.llvm.org/download.html
##
## Use the script Utilities/Maintenance/clang-format.bash to faciliate
## maintaining a consistent code style.
##
## EXAMPLE apply code style enforcement before commit:
# Utilities/Maintenance/clang-format.bash --clang ${PATH_TO_CLANG_FORMAT_8.0.0} --modified
## EXAMPLE apply code style enforcement after commit:
# Utilities/Maintenance/clang-format.bash --clang ${PATH_TO_CLANG_FORMAT_8.0.0} --last
---
# This configuration requires clang-format version 8.0.0 exactly.
BasedOnStyle: Mozilla
Language: Cpp
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: true
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
# clang 9.0 AllowAllArgumentsOnNextLine: true
# clang 9.0 AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Inline
# clang 9.0 AllowShortLambdasOnASingleLine: All
# clang 9.0 features AllowShortIfStatementsOnASingleLine: Never
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: All
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: false
BinPackParameters: false
BreakBeforeBraces: Custom
BraceWrapping:
# clang 9.0 feature AfterCaseLabel: false
AfterClass: true
AfterControlStatement: true
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: true
AfterExternBlock: true
BeforeCatch: true
BeforeElse: true
## This is the big change from historical ITK formatting!
# Historically ITK used a style similar to https://en.wikipedia.org/wiki/Indentation_style#Whitesmiths_style
# with indented braces, and not indented code. This style is very difficult to automatically
# maintain with code beautification tools. Not indenting braces is more common among
# formatting tools.
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: false
SplitEmptyNamespace: false
BreakBeforeBinaryOperators: None
#clang 6.0 BreakBeforeInheritanceComma: true
BreakInheritanceList: BeforeComma
BreakBeforeTernaryOperators: true
#clang 6.0 BreakConstructorInitializersBeforeComma: true
BreakConstructorInitializers: BeforeComma
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
## The following line allows larger lines in non-documentation code
ColumnLimit: 120
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 2
ContinuationIndentWidth: 2
Cpp11BracedListStyle: false
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
- Regex: '.*'
Priority: 1
IncludeIsMainRegex: '(Test)?$'
IndentCaseLabels: true
IndentPPDirectives: AfterHash
IndentWidth: 2
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 2
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: true
ObjCSpaceBeforeProtocolList: false
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
## The following line allows larger lines in non-documentation code
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Middle
ReflowComments: true
# We may want to sort the includes as a separate pass
SortIncludes: false
# We may want to revisit this later
SortUsingDeclarations: false
SpaceAfterCStyleCast: false
# SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp11
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 2
UseTab: Never
...
14 changes: 14 additions & 0 deletions .gitattributes
@@ -0,0 +1,14 @@
# Custom attribute to mark sources as using our C++/C code style.
[attr]our-c-style whitespace=tab-in-indent,no-lf-at-eof hooks.style=KWStyle,clangformat

*.c our-c-style
*.h our-c-style
*.cxx our-c-style
*.hxx our-c-style
*.txx our-c-style
*.txt whitespace=tab-in-indent,no-lf-at-eof
*.cmake whitespace=tab-in-indent,no-lf-at-eof

# ExternalData content links must have LF newlines
*.md5 crlf=input
*.sha512 crlf=input
24 changes: 12 additions & 12 deletions include/itkAdditiveGaussianNoiseMeshFilter.h
Expand Up @@ -37,19 +37,18 @@ namespace itk
*
* \ingroup MeshNoise
*/
template< typename TInput, typename TOutput = TInput >
class AdditiveGaussianNoiseMeshFilter:
public MeshToMeshFilter< TInput, TOutput >
template <typename TInput, typename TOutput = TInput>
class AdditiveGaussianNoiseMeshFilter : public MeshToMeshFilter<TInput, TOutput>
{

public:
ITK_DISALLOW_COPY_AND_ASSIGN(AdditiveGaussianNoiseMeshFilter);

/** Standard class type alias. */
using Self = AdditiveGaussianNoiseMeshFilter;
using Superclass = MeshToMeshFilter< TInput, TOutput >;
using Pointer = SmartPointer< Self >;
using ConstPointer = SmartPointer< const Self >;
using Superclass = MeshToMeshFilter<TInput, TOutput>;
using Pointer = SmartPointer<Self>;
using ConstPointer = SmartPointer<const Self>;

using InputMeshType = TInput;
using OutputMeshType = TOutput;
Expand Down Expand Up @@ -78,24 +77,25 @@ public MeshToMeshFilter< TInput, TOutput >
itkSetMacro(Seed, int);

protected:

AdditiveGaussianNoiseMeshFilter();
~AdditiveGaussianNoiseMeshFilter() override{}
~AdditiveGaussianNoiseMeshFilter() override {}

void PrintSelf(std::ostream & os, Indent indent) const override;
void
PrintSelf(std::ostream & os, Indent indent) const override;

/** Generate Requested Data */
void GenerateData() override;
void
GenerateData() override;

CoordRepType m_Mean;
CoordRepType m_Sigma;
int m_Seed;
};

}
} // namespace itk

#ifndef ITK_MANUAL_INSTANTIATION
#include "itkAdditiveGaussianNoiseMeshFilter.hxx"
# include "itkAdditiveGaussianNoiseMeshFilter.hxx"
#endif

#endif
70 changes: 31 additions & 39 deletions include/itkAdditiveGaussianNoiseMeshFilter.hxx
Expand Up @@ -24,93 +24,85 @@
namespace itk
{

template< typename TInputMesh, typename TOutputMesh >
AdditiveGaussianNoiseMeshFilter< TInputMesh, TOutputMesh >
::AdditiveGaussianNoiseMeshFilter()
template <typename TInputMesh, typename TOutputMesh>
AdditiveGaussianNoiseMeshFilter<TInputMesh, TOutputMesh>::AdditiveGaussianNoiseMeshFilter()
{
this->m_Mean = 0.0;
this->m_Sigma = 1.0;
this->m_Seed = 0;
}

template< typename TInputMesh, typename TOutputMesh >
template <typename TInputMesh, typename TOutputMesh>
void
AdditiveGaussianNoiseMeshFilter< TInputMesh, TOutputMesh >
::PrintSelf(std::ostream & os, Indent indent) const
AdditiveGaussianNoiseMeshFilter<TInputMesh, TOutputMesh>::PrintSelf(std::ostream & os, Indent indent) const
{
Superclass::PrintSelf(os, indent);
os << indent << "Mean: " << this->m_Mean << std::endl;
os << indent << "Sigma: " << this->m_Sigma << std::endl;
}

template< typename TInputMesh, typename TOutputMesh >
template <typename TInputMesh, typename TOutputMesh>
void
AdditiveGaussianNoiseMeshFilter< TInputMesh, TOutputMesh >
::GenerateData(void)
AdditiveGaussianNoiseMeshFilter<TInputMesh, TOutputMesh>::GenerateData(void)
{
using InputPointsContainer = typename TInputMesh::PointsContainer;
using OutputPointsContainer = typename TOutputMesh::PointsContainer;

using InputPointsContainerConstPointer = typename TInputMesh::PointsContainerConstPointer;
using OutputPointsContainerPointer = typename TOutputMesh::PointsContainerPointer;

const InputMeshType *inputMesh = this->GetInput();
OutputMeshPointer outputMesh = this->GetOutput();
const InputMeshType * inputMesh = this->GetInput();
OutputMeshPointer outputMesh = this->GetOutput();

if ( !inputMesh )
{
if (!inputMesh)
{
itkExceptionMacro(<< "Missing Input Mesh");
}
}

if ( !outputMesh )
{
if (!outputMesh)
{
itkExceptionMacro(<< "Missing Output Mesh");
}
}

outputMesh->SetBufferedRegion( outputMesh->GetRequestedRegion() );
outputMesh->SetBufferedRegion(outputMesh->GetRequestedRegion());

InputPointsContainerConstPointer inPoints = inputMesh->GetPoints();
InputPointsContainerConstPointer inPoints = inputMesh->GetPoints();
OutputPointsContainerPointer outPoints = outputMesh->GetPoints();

outPoints->Reserve( inputMesh->GetNumberOfPoints() );
outPoints->Reserve(inputMesh->GetNumberOfPoints());
outPoints->Squeeze();

typename InputPointsContainer::ConstIterator inputPoint
= inPoints->Begin();
typename OutputPointsContainer::Iterator outputPoint
= outPoints->Begin();
typename InputPointsContainer::ConstIterator inputPoint = inPoints->Begin();
typename OutputPointsContainer::Iterator outputPoint = outPoints->Begin();

unsigned int maxDimension = TInputMesh::MaxTopologicalDimension;

using GeneratorType = itk::Statistics::NormalVariateGenerator;
GeneratorType::Pointer generator = GeneratorType::New();
generator->Initialize( this->m_Seed );
generator->Initialize(this->m_Seed);

while ( inputPoint != inPoints->End() )
while (inputPoint != inPoints->End())
{
for (unsigned int dim = 0; dim < maxDimension; ++dim)
{
for ( unsigned int dim = 0; dim < maxDimension; ++dim )
{
outputPoint.Value()[dim]
= inputPoint.Value()[dim] + generator->GetVariate()*this->m_Sigma + this->m_Mean;
}
outputPoint.Value()[dim] = inputPoint.Value()[dim] + generator->GetVariate() * this->m_Sigma + this->m_Mean;
}
++inputPoint;
++outputPoint;
}
}

// Create duplicate references to the rest of data on the mesh
this->CopyInputMeshToOutputMeshPointData();
this->CopyInputMeshToOutputMeshCellLinks();
this->CopyInputMeshToOutputMeshCells();
this->CopyInputMeshToOutputMeshCellData();

for ( unsigned int dim = 0; dim < maxDimension; ++dim )
{
outputMesh->SetBoundaryAssignments( dim,
inputMesh->GetBoundaryAssignments(dim) );
}

for (unsigned int dim = 0; dim < maxDimension; ++dim)
{
outputMesh->SetBoundaryAssignments(dim, inputMesh->GetBoundaryAssignments(dim));
}
}

}
} // namespace itk

#endif

0 comments on commit 37c7b87

Please sign in to comment.