with Ada.Directories; with Rx.Std; private with Rx.Tools.Shared_Data; package DirX is ----------- -- Types -- ----------- subtype Path is String; -- A Path can be either a folder, file, subpath, combination of those, etc. subtype Path_Observable is Rx.Std.Strings.Observable; type Name_Kinds is (Full_Name, Simple_Name); ----------------------- -- Directory entries -- ----------------------- -- We need a nonlimited type to be able to use it with Rx, so this one -- encapsulates entries in Ada.Directories type Directory_Entry (<>) is tagged private; type Entry_Reference (The_Entry : access constant Ada.Directories.Directory_Entry_Type) is limited null record with Implicit_Dereference => The_Entry; function Get_Entry (This : Directory_Entry) return Entry_Reference; function Is_Directory (This : Directory_Entry) return Boolean; private package AD renames Ada.Directories; use all type AD.File_Kind; type Entry_Access is access AD.Directory_Entry_Type; package Shared_Entries is new Rx.Tools.Shared_Data (AD.Directory_Entry_Type, Entry_Access); type Directory_Entry is new Shared_Entries.Proxy with null record; --------------- -- Get_Entry -- --------------- function Get_Entry (This : Directory_Entry) return Entry_Reference is (Entry_Reference'(The_Entry => Shared_Entries.Proxy (This).Get.Actual)); ------------------ -- Is_Directory -- ------------------ function Is_Directory (This : Directory_Entry) return Boolean is (AD.Kind (This.Get_Entry) = AD.Directory); end DirX;