-- SPDX-License-Identifier: Apache-2.0 -- -- Copyright (c) 2019 onox -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- http://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. package Inotify.Recursive is type Recursive_Instance is limited new Instance with private; pragma Preelaborable_Initialization (Recursive_Instance); overriding function Add_Watch (Object : in out Recursive_Instance; Path : String; Mask : Watch_Bits := All_Events) return Watch; -- Watch the given path and any subdirectories -- -- If the user has no permission to read the folder at the given path -- or if the path is a symlink, then a Use_Error is raised. Any -- subdirectory, however, is ignored if it is not readable or is a symlink. overriding procedure Remove_Watch (Object : in out Recursive_Instance; Subject : Watch); -- Remove the given watch and the watches of any subdirectory overriding procedure Process_Events (Object : in out Recursive_Instance; Handle : not null access procedure (Subject : Watch; Event : Event_Kind; Is_Directory : Boolean; Name : String)); overriding procedure Process_Events (Object : in out Recursive_Instance; Handle : not null access procedure (Subject : Watch; Event : Event_Kind; Is_Directory : Boolean; Name : String); Move_Handle : not null access procedure (Subject : Watch; Is_Directory : Boolean; From, To : String)); private package Mask_Maps is new Ada.Containers.Indefinite_Hashed_Maps (Key_Type => Interfaces.C.int, Element_Type => Watch_Bits, Hash => Hash, Equivalent_Keys => Interfaces.C."="); type Recursive_Instance is limited new Instance with record Masks : Mask_Maps.Map; end record; pragma Preelaborable_Initialization (Recursive_Instance); end Inotify.Recursive;