1# Copyright 2004-2008 Roman Yakovenko.
2# Distributed under the Boost Software License, Version 1.0. (See
3# accompanying file LICENSE_1_0.txt or copy at
4# http://www.boost.org/LICENSE_1_0.txt)
5
6"""
7This package contains few classes, which write :class:`code_creators.module_t` to files.
8"""
9
10import types
11from .writer import writer_t
12from .single_file import single_file_t
13from .multiple_files import multiple_files_t
14from .balanced_files import balanced_files_t
15from .class_multiple_files import class_multiple_files_t
16from .md5sum_repository import repository_t
17from .md5sum_repository import cached_repository_t
18
19def has_pypp_extenstion( fname ):
20    """returns True if file has `Py++` specific extension, otherwise False"""
21    for ext in ( multiple_files_t.HEADER_EXT, multiple_files_t.SOURCE_EXT ):
22        if fname.endswith( ext ):
23            return True
24    return False
25
26def write_file( data, file_path, encoding='ascii' ):
27    """writes data to file"""
28    if isinstance( data, str ):
29        writer_t.write_file( data, file_path, encoding=encoding )
30    else:
31        sf = single_file_t( data, file_path, encoding=encoding )
32        sf.write()
33
34def write_multiple_files( extmodule, dir_path, files_sum_repository=None, encoding='ascii' ):
35    """writes extmodule to multiple files"""
36    mfs = multiple_files_t( extmodule, dir_path, files_sum_repository=files_sum_repository, encoding=encoding )
37    mfs.write()
38    return mfs.written_files
39
40def write_balanced_files( extmodule, dir_path, number_of_buckets, files_sum_repository=None, encoding='ascii' ):
41    """writes extmodule to fixed number of multiple .cpp files"""
42    mfs = balanced_files_t( extmodule, dir_path, number_of_buckets, files_sum_repository=files_sum_repository, encoding=encoding )
43    mfs.write()
44    return mfs.written_files
45
46def write_class_multiple_files( extmodule, dir_path, huge_classes, files_sum_repository, encoding='ascii' ):
47    """writes extmodule to multiple files and splits huge classes to few source files"""
48    mfs = class_multiple_files_t( extmodule, dir_path, huge_classes, files_sum_repository=files_sum_repository, encoding=encoding )
49    mfs.write()
50    return mfs.written_files
51