# This is the configuration file for clang-format, an automatic code formatter.
# Introduction: https://clang.llvm.org/docs/ClangFormat.html
# Supported options: https://clang.llvm.org/docs/ClangFormatStyleOptions.html

Language: Cpp
Standard: Latest

ColumnLimit: 110

UseTab: Never
IndentWidth: 4
PPIndentWidth: 2
ContinuationIndentWidth: 4

LineEnding: LF
InsertNewlineAtEOF: true
KeepEmptyLinesAtTheStartOfBlocks: false
MaxEmptyLinesToKeep: 1

IndentCaseBlocks: false
IndentCaseLabels: false
IndentGotoLabels: false
IndentPPDirectives: AfterHash
IndentWrappedFunctionNames: false

AlignAfterOpenBracket: Align
AlignArrayOfStructures: Right
AlignEscapedNewlines: Left
AlignOperands: Align
AlignConsecutiveAssignments:
    Enabled:          true
    AcrossEmptyLines: false
    AcrossComments:   false
    AlignCompound:    false
    PadOperators:     false
AlignConsecutiveBitFields:
    Enabled:          true
    AcrossEmptyLines: false
    AcrossComments:   false
AlignConsecutiveDeclarations:
    Enabled:          true
    AcrossEmptyLines: false
    AcrossComments:   false
AlignConsecutiveMacros:
    Enabled:          true
    AcrossEmptyLines: false
    AcrossComments:   false
AlignTrailingComments:
    Kind:           Leave
    OverEmptyLines: 0

BinPackArguments: true
BinPackParameters: false
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: false

AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortEnumsOnASingleLine: true
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: AllIfsAndElse
AllowShortLoopsOnASingleLine: false

AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
BraceWrapping:
    AfterCaseLabel:        false
    AfterControlStatement: Never
    AfterEnum:             false
    AfterExternBlock:      false
    AfterFunction:         true
    AfterStruct:           false
    AfterUnion:            false
    BeforeElse:            false
    BeforeWhile:           false
    IndentBraces:          false
    SplitEmptyFunction:    false
    SplitEmptyRecord:      false
BreakAfterAttributes: Never
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Custom
BreakBeforeInlineASMColon: OnlyMultiline
BreakBeforeTernaryOperators: true

DerivePointerAlignment: false
PointerAlignment: Left

QualifierAlignment: Custom
QualifierOrder: ["inline", "static", "volatile", "restrict", "const", "type"]

ReflowComments: false
BreakStringLiterals: false
RemoveSemicolon: true
RemoveParentheses: ReturnStatement
InsertBraces: false
SeparateDefinitionBlocks: Always

SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAroundPointerQualifiers: Default
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeParens: ControlStatements
BitFieldColonSpacing: Both
SpaceBeforeSquareBrackets: false
SpaceInEmptyBlock: false
SpacesBeforeTrailingComments: 1
SpacesInSquareBrackets: false
SpacesInLineCommentPrefix:
    Minimum: 1
    Maximum: -1

SortIncludes: Never
IncludeBlocks: Preserve
IncludeIsMainRegex: ""
IncludeCategories:
    - {Regex: "<.*>",   Priority: -2, CaseSensitive: true}
    - {Regex: "\".*\"", Priority: -1, CaseSensitive: true}

AttributeMacros: ["__capability"]
StatementAttributeLikeMacros: []
StatementMacros: []

PenaltyBreakAssignment: 200
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakOpenParenthesis: 0
PenaltyBreakString: 1000
PenaltyExcessCharacter: 10
PenaltyIndentedWhitespace: 0
PenaltyReturnTypeOnItsOwnLine: 60
