[/ Copyright Vicente J. Botet Escriba 2013. Copyright Andrey Semashev 2013. Copyright Tim Blechmann 2013. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This document is a part of Boost.Sync library documentation. /] [section:notes_for_maintainers Notes for maintainers] This library is maintained by several developers, and in order it to have a consistent design, look and feel, a few guidelines need to be followed: [heading Code formatting and indentation] * The code is indented with spaces, 4 spaces per tab. * Namespace braces on the same line, all other braces - on the next line, with the same indent. At the closing brace for a namespace, there is a comment with the namespace name. * Namespaces don't increase the level of indentation. In all other cases braces increase the level of indentation. * Member/base initialization list for constructors on the same line, if it's small (1-2 members) or 1 member/base per line. Colon is left on the signature line. * No leading commas (i.e. if on multiple lines, initialization list and arguments have commas at the end of line, not at the beginning). [heading Naming conventions] * Data member names start with m_, unless the enclosing struct only has public data members (i.e. the intention of the struct is to enclose some data with no further logic). * Template parameters are named in CamelCase, other symbol names follow C++ style (lower-case, with underscores). * All non-public headers should be placed into `sync/detail` directory. All non-public names should reside in the `sync::detail` namespace. All non-public macro names should start with `BOOST_SYNC_DETAIL_`. * All public names should reside in the `sync` namespace. Nested namespaces are also possible. All public macro names should start with `BOOST_SYNC_`. User-definable config macros should start with `BOOST_SYNC_WITH_`, `BOOST_SYNC_WITHOUT_` (for component selection, if any), `BOOST_SYNC_USE_` or `BOOST_SYNC_NO_`. This does not include macros the library defines itself as a result of various compatibility checks (these count as non-public ones). [heading Code structure] * Every header includes `boost/sync/detail/config.hpp`. The config header contains all configuration macros, but no auto-linking code. If the built library appears, the auto-linking machinery and macros will be in a separate header, which will be included only by those components that need it. * Every header includes `boost/sync/detail/header.hpp` before any code (as the last include) and `boost/sync/detail/footer.hpp` after all code. These two files are for warning and ABI management. * All move semantics is implemented through __boost_move__. * All platform-specific code that depends on library configuration and can have different ABIs should be enclosed in a nested inline namespace that corresponds to the configuration. This gives a basic protection from the library misconfiguration in the user's application. [endsect]