Maintainer C++ Namespace Notes ****************************** Namespaces have been employed to help organize source and push all private symbols (those which are not part of the public C API) to a location that is unlikely to be accidentally used by anyone. It also virtually eliminates any chance that private impl symbols will cause symbol collisions at compile or link-time. The global namespace is used by C API which generally prefixes all of its symobls with MP4 to avoid collisions. This space is used by src/mp4.cpp and include/mp4v2/mp4v2.h . A few exceptions may exist where additional API is exported from some differently-implemented code. The rest of the codebase is tucked into various child-namespaces of the project's top-level 'mp4v2' namespace. The top-level namespace is reserved for this project, and unless someone branches our codebase and ignores their moral responsibility to rename their root namespace, we should neatly avoid symbol collisions. Code external to the project should never use any symbols which reside in mp4v2. The namespace 'mp4v2::platform' is private and used for code which abstracts various plaform differences or implements missing features. The namespace 'mp4v2::impl' is a private namespace for the main implementation of libmp4v2. This namespace generally depends on mp4v2::platform . The namespace 'mp4v2::util' is a private namespace which adds functionality for use with libutil and util/ command-line tools. The positioning is a little more complicated in that it has symbols which are exported from libmp4v2, which needs full access to mp4v2::impl hidden symbols. Then libutil itself adds to the same namespace, but because libutil does not require direct access to mp4v2::impl hidden symbols it is a separate static library. And finally, the util/ tools themselves use the namespace for implementation convenience. Nested (child) namespaces of those listed above are used for further organization when applicable. Further documentation is available in the API Reference; see Namespaces section.