fn open_close_namespaces()

in src/bindgen/language_backend/clike.rs [69:113]


    fn open_close_namespaces<W: Write>(&mut self, out: &mut SourceWriter<W>, open: bool) {
        let mut namespaces =
            if self.config.language != Language::Cxx && !self.config.cpp_compatible_c() {
                vec![]
            } else {
                let mut ret = vec![];
                if let Some(ref namespace) = self.config.namespace {
                    ret.push(&**namespace);
                }
                if let Some(ref namespaces) = self.config.namespaces {
                    for namespace in namespaces {
                        ret.push(&**namespace);
                    }
                }
                ret
            };

        if namespaces.is_empty() {
            return;
        }

        if !open {
            namespaces.reverse();
        }

        if self.config.cpp_compatible_c() {
            out.new_line_if_not_start();
            out.write("#ifdef __cplusplus");
        }

        for namespace in namespaces {
            out.new_line();
            if open {
                write!(out, "namespace {} {{", namespace)
            } else {
                write!(out, "}}  // namespace {}", namespace)
            }
        }

        out.new_line();
        if self.config.cpp_compatible_c() {
            out.write("#endif  // __cplusplus");
            out.new_line();
        }
    }