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 block : uint32_t 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 1212.7956394939486 697.0920982847697 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.859316379054544 «interface» DataSource 1192.781692587207 608.8954677283948 «interface» Filters filters 260.0 710.0 265.45434264405947 743.9994422711634 TransformStream 486.9335577265969 640.636302316303 CutOutStream 555.9916340674516 750.220757440409 get_size() read() open() close() is_repeatable() «interface» Stream 688.5487814157467 437.25152600545294 FdStream 680.6673668471356 637.245696021424 FileStream 828.9404615480411 642.40096597045 FilteredStream 428.449880813367 747.5389646099015 «interface» SourceFile 1000.6667341519202 639.0812755928229 For files, we need to know whethe they come from a previous session. That's the purpose of the block field 818.829652614022 414.36457377531684 1 volume {create} 0..1 * children 1 root 1 parent 1 1 src