singlecodeunit.py

来自「Boost provides free peer-reviewed portab」· Python 代码 · 共 122 行

PY
122
字号
# Copyright Bruno da Silva de Oliveira 2003. Use, modification and # distribution is subject to 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)from settings import namespacesimport settingsfrom utils import remove_duplicated_lines, left_equalsfrom SmartFile import SmartFile#==============================================================================# SingleCodeUnit#==============================================================================class SingleCodeUnit:    '''    Represents a cpp file, where other objects can write in one of the         predefined sections.    The avaiable sections are:        pchinclude - The pre-compiled header area        include - The include area of the cpp file        declaration - The part before the module definition        module - Inside the BOOST_PYTHON_MODULE macro    '''        def __init__(self, modulename, filename):        self.modulename = modulename        self.filename = filename        # define the avaiable sections        self.code = {}        # include section        self.code['pchinclude'] = ''         # include section        self.code['include'] = ''        # declaration section (inside namespace)                self.code['declaration'] = ''        # declaration (outside namespace)        self.code['declaration-outside'] = ''        # inside BOOST_PYTHON_MACRO        self.code['module'] = ''        # create the default module definition        self.module_definition = 'BOOST_PYTHON_MODULE(%s)' % modulename    def Write(self, section, code):        'write the given code in the section of the code unit'        if section not in self.code:            raise RuntimeError, 'Invalid CodeUnit section: %s' % section        self.code[section] += code            def Merge(self, other):        for section in ('include', 'declaration', 'declaration-outside', 'module'):            self.code[section] = self.code[section] + other.code[section]                def Section(self, section):        return self.code[section]    def SetCurrent(self, *args):        pass    def Current(self):        pass         def Save(self, append=False):        'Writes this code unit to the filename'        space = '\n\n'        if not append:            flag = 'w'        else:            flag = 'a'        fout = SmartFile(self.filename, flag)        fout.write('\n')        # includes        # boost.python header        if self.code['pchinclude']:            fout.write(left_equals('PCH'))                    fout.write(self.code['pchinclude']+'\n')            fout.write('#ifdef _MSC_VER\n')            fout.write('#pragma hdrstop\n')            fout.write('#endif\n')         else:            fout.write(left_equals('Boost Includes'))                    fout.write('#include <boost/python.hpp>\n')            # include numerical boost for int64 definitions            fout.write('#include <boost/cstdint.hpp>\n')         fout.write('\n')        # other includes                if self.code['include']:            fout.write(left_equals('Includes'))                    includes = remove_duplicated_lines(self.code['include'])            fout.write(includes)            fout.write(space)        # using        if settings.USING_BOOST_NS and not append:            fout.write(left_equals('Using'))            fout.write('using namespace boost::python;\n\n')        # declarations        declaration = self.code['declaration']        declaration_outside = self.code['declaration-outside']        if declaration_outside or declaration:            fout.write(left_equals('Declarations'))            if declaration_outside:                fout.write(declaration_outside + '\n\n')            if declaration:                pyste_namespace = namespaces.pyste[:-2]                            fout.write('namespace %s {\n\n' % pyste_namespace)                fout.write(declaration)                 fout.write('\n}// namespace %s\n' % pyste_namespace)                fout.write(space)        # module        fout.write(left_equals('Module'))        fout.write(self.module_definition + '\n')        fout.write('{\n')        fout.write(self.code['module'])         fout.write('}\n\n')        fout.close()

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?