size : off_t SplittedFile 185.9954940382799 488.5066209425904 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 830.9681801982362 182.66718770734806 sort_weight : int File 342.4798473529561 272.1215741615781 name : char * attribs : struct stat TreeNode 466.4798473529561 125.12157416157802 add(XXX) remove(Node) children() Directory 643.4798473529561 270.1215741615781 dest : char* Symlink 465.4798473529561 272.1215741615781 block : uint32_t PrevImgFile 403.78427912403913 384.61454979256314 FilteredFile 326.99881031378334 487.9929640225687 path : char * LocalFile 258.5917557335331 380.2361355625578 Special 217.58850537668968 273.6217087746859 «interface» Filter Filters 520.0 450.0 534.5857864376269 482.33809511662446 Another alternative, maybe better, is to allow splitted and filtered files not only for local files, but for any kind of files. In that case, both classes should have a File attribute 144.5857864376269 578.3380951166248 name : char* <<static>>new(id) <<static>>read(src, opts) create() grow() Image 829.5857864376269 417.33809511662446 «interface» DataSource 855.5857864376269 573.3380951166248 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 116.5857864376269 121.33809511662426 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 988.5857864376269 547.3380951166246 Ecma119Source 1119.5058052462327 436.9433938860118 «interface» BurnSource Libburn 1120.0 270.0 1131.6773781214863 304.28653963651914 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. 458.2051942088828 28.284271247461895 * children 1 root 1 parent 1 volume 0..1 src {create}