volume_id : char* publisher_id : char* data_preparer_id : char* system_id : char* application_id : char* copyright_file_id : char* abstract_file_id : char* biblio_file_id : char* Volume 1160.4799402311673 240.649943764645 sort_weight : int File 687.5479565719912 269.2931470368318 name : char * attribs : struct stat hidden : enum TreeNode 706.83671056434 108.4726745515399 add(XXX) remove(Node) children() Directory 986.1687535943008 267.29314703683184 dest : char* Symlink 571.9364350336367 273.31078127658077 Special 813.0651280884073 272.20749521231266 name : char* <<static>>new(id) <<static>>read(src, opts) create() grow() Image 1149.1980515339465 455.5218613006981 In addition to the dest as a path, it could be a good idea to have a ref to tree node. That way we can compute the dest on creation time, and thus links to files on image are also valid after moving or renaming those files 322.02220861890066 362.2044136147912 Image is a context for the creation of images. Its "static" methods, new() and read() are used to create a new image context, either from scratch or from an existing image (for example, a ms disc). The methods create() and grow() return an BurnSource suitable for libburn. create() writes a full image, grow() only add to the image the new files, thus it is suitable for a new session 1234.6589462905451 680.2741699796954 Ecma119Source 1423.5617211564486 483.61244144432396 «interface» BurnSource Libburn 1420.0 280.0 1431.4906533445824 311.35760744838467 Class diagram for the public tree. Note that getters and setters are not shown, to improve readability. Note also that not all the attributes will have public getters or/and setters. El-Torito related information is shown in another diagram. We don't show the several functions in Dir to manage the tree. 290.59037712396525 9.859316379054512 FileSourceRegistry 663.3494218736668 707.2510088513307 A source that read its data from an arbitrary file descritor. size must be know in advance. 888.4680374315352 726.8792924010775 The idea of the registry is to keep track of sources for the same file (to implement cache inodes, for exampe) 796.4629867976516 789.9797974644656 TransformSource 465.9331463967205 595.4414715712101 get_size() read() open() close() is_repeatable() «interface» FileSource 685.9331463967205 410.4414715712108 A Filter do a tranformation on a stream of data. The main difference with TransformSources is that a Filter can be applied to several sources. NOTES: - filter() method still to define - A filter_changes_size() method can be useful 350.5947306335493 803.951562474507 filter(in, out) «interface» Filter 274.0746933916357 694.5765090198104 size : off_t block : uint32_t PreviousImageSource 976.3688193543292 599.7669830819689 path : char* LocalFileSource 674.5900006462128 602.9561901969712 FilterSource 417.08326112068517 711.364573775316 «interface» DataSource 1192.781692587207 608.8954677283948 Filters 260.0 660.0 CutOutSource 533.842712474619 706.7077195258237 Reads the contents of local files, both regular files, symlinks or block devices 836.7472580451137 493.8376618407349 fd : int size : off_t FdSource 846.3431457505072 599.1219330881966 1 volume {create} 1 0..1 1 src * children 1 root 1 parent