INTERFACEA FilePool.T is an object that facilitates operations on a set of files contained in one directory.FilePool ; IMPORT Rd, Wr, TextSeq, Pathname;
---------------------------------------------------------------------------
EXCEPTION Error(TEXT);---------------------------------------------------------------------------
TYPE
ProcClosure = OBJECT
METHODS
proc(fn : TEXT) RAISES ANY;
END;
---------------------------------------------------------------------------
TYPE
PredClosure = OBJECT
METHODS
pred(fn : TEXT) : BOOLEAN RAISES {Error};
END;
---------------------------------------------------------------------------
TYPE
T <: Public;
Public = OBJECT
METHODS
(*-----------------------------------------------------------------------*)
init(dir : Pathname.T) : T RAISES {Error};
(* Initialize the internal cache with information about all files
in directory `dir'.
*)
(*-----------------------------------------------------------------------*)
update() RAISES {Error};
(* Reinitialize the internal cache from the file system. *)
(*-----------------------------------------------------------------------*)
list(pattern : TEXT := NIL; ordinaryOnly := TRUE) : TextSeq.T
RAISES {Error};
(* Return a list of all files, excluding the current and parent
directory. If `pattern' is non-NIL, it is used to match against
all the file names.
*)
(*-----------------------------------------------------------------------*)
getReader(fn : TEXT) : Rd.T RAISES {Error};
(* Return a reader for file `fn'. *)
(*-----------------------------------------------------------------------*)
getWriter(fn : TEXT) : Wr.T RAISES {Error};
(* Return a destructive writer for file `fn'. Destructive means that if
this operations is called, the contents of the file are erased.
*)
(*-----------------------------------------------------------------------*)
content(fn : TEXT) : TEXT RAISES {Error};
(* Return the contents of file `fn' as a text. *)
(*-----------------------------------------------------------------------*)
createNewFile(fn : TEXT := NIL) : TEXT RAISES {Error};
(* Create a new file with a unique name and return this name. If
`fn' is non-NIL, take it as the file name and raise an exception
if it already exists.
*)
(*-----------------------------------------------------------------------*)
delete(fn : TEXT) RAISES {Error};
(* Delete the named file. *)
(*-----------------------------------------------------------------------*)
apply(cl : ProcClosure; pattern : TEXT := NIL; ordinaryOnly := TRUE)
RAISES ANY;
(* Apply the closure `cl' to all cached file names. *)
(*-----------------------------------------------------------------------*)
select(cl : PredClosure; pattern : TEXT := NIL; ordinaryOnly := TRUE)
: TextSeq.T RAISES {Error};
(* Apply the predicate `cl' to all cached file names and return the
list of the names that evaluated to TRUE.
*)
END;
END FilePool.