##
## Licensed to the Apache Software Foundation (ASF) under one
## or more contributor license agreements.  See the NOTICE file
## distributed with this work for additional information
## regarding copyright ownership.  The ASF licenses this file
## to you 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
##
## 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.
##

BasedOnStyle: Google
IndentWidth: 4
ColumnLimit: 120
BreakBeforeBraces: Linux
AllowShortFunctionsOnASingleLine: None
SpaceAfterCStyleCast: true
AlignConsecutiveAssignments: true
KeepEmptyLinesAtTheStartOfBlocks: false

IncludeCategories:
  # python-related headers must go first
  - Regex: '^<Python.h>|"qpid/dispatch/python_embedded.h"|"python_private.h"$'
    Priority: -1
  - Regex: '^"qpid/dispatch/?.*\.h"'
    Priority: 2
  - Regex: '^[<"]proton/.*\.h[>"]'
    Priority: 3
  - Regex: '^<.*\.h>'
    Priority: 4
  - Regex: '^<.*'
    Priority: 5
  - Regex: '.*'
    Priority: 1
