# 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.

# Reference: http://astyle.sourceforge.net/astyle.html

# Indent using 2 spaces
--indent=spaces=2

# Indent using attached brackets, e.g.
#  int Foo(bool isBar) {
#      if (isBar) {
#          bar();
#          return 1;
#      } else
#          return 0;
#  }
#
--brackets=attach

# Indent 'switch' blocks so that the 'case X:' statements are indented in
# the switch block. The entire case block is indented:
#
# switch (foo)
# {
# case 1:
#     a += 1;
#     break;
#
# case 2:
# {
#     a += 2;
#     break;
# }
# }
#
#becomes:
#
# switch (foo)
# {
#     case 1:
#         a += 1;
#         break;
#
#     case 2:
#     {
#         a += 2;
#         break;
#     }
# }
--indent-switches

# Insert space padding around operators. Any end of line comments will
# remain in the original column, if possible. Note that there is no option
# to unpad. Once padded, they stay padded.
#
# if (foo==2)
#     a=bar((b-c)*a,d--);
#
#becomes:
#
# if (foo == 2)
#      a = bar((b - c) * a, d--);
--pad-oper

# Attach a pointer or reference operator (* or &) to the variable type (left):
#
# char *foo1;
# char &foo2;
#
# becomes (with align-pointer=type):
#
# char* foo1;
# char& foo2;
--align-pointer=type

# Don't break one-line blocks.
#
# if (isFoo)
# { isFoo = false; cout << isFoo << endl; }
# remains unchanged.
--keep-one-line-blocks
