---
# Based on the Google C++ Style Guide, with user-specific overrides.
BasedOnStyle: Google

# --- User Overrides from Uncrustify Config ---

# 1. Indentation
# Google Style default is 2, but we keep the explicit setting just in case.
# Uncrustify: indent_columns=2
IndentWidth: 2

# 2. Tabs
# Google Style default is Never, but explicitly set here.
# Uncrustify: indent_with_tabs=0
UseTab: Never

# 3. Column Width
# Uncrustify: code_width=80
ColumnLimit: 80

# 4. Brace Wrapping
# The Google Style default is already to attach braces to the line end
# (e.g., `if (x) { ... }`).
# Uncrustify: nl_class_brace=remove, nl_fdef_brace=remove
# We keep the default: BreakBeforeBraces: Attach

# 5. Assignment Alignment
# This is a key deviation from the Google default, which is usually 'None'.
# Uncrustify: indent_align_assign=true
AlignConsecutiveAssignments: true

# 6. Function Parameter Packing (Google default is to pack)
# Uncrustify: nl_func_def_args=add (Suggests placing each arg on a new line)
BinPackArguments: false
BinPackParameters: false # Applies to declarations

# 7. Pointer Alignment
# Google Style prefers the star next to the type ('int* foo').
# Uncrustify: sp_before_ptr_star=add (e.g. 'int * a;')
# We stick to the Google default: PointerAlignment: Left (or None, which often results in Left).
PointerAlignment: Left

# 8. Namespace Indentation
# Google Style default is false, matching:
# Uncrustify: indent_namespace=false
IndentNamespace: false

# 9. Case Label Indentation
# Google Style default is to indent `case` labels.
# Uncrustify: indent_switch_case=2 (Suggests indenting case labels)
IndentCaseLabels: true

# 10. Operator Alignment
# Uncrustify: align_left_shift=true
AlignOperands: Align

# 11. Newlines/Block Handling
# Uncrustify: mod_full_brace_if=add, mod_full_brace_for=add, etc.
# These are generally handled by Google's requirement for braces, even for single statements.
AllowShortBlocksOnASingleLine: Never
AllowShortIfStatementsOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: Never
AllowShortFunctionsOnASingleLine: Empty
...