LLFIO  v2.00
llfio_v2_xxx::algorithm::compare_visitor Struct Reference

A visitor for the filesystem traversal and comparison algorithm. More...

#include "difference.hpp"

Inheritance diagram for llfio_v2_xxx::algorithm::compare_visitor:
llfio_v2_xxx::algorithm::summarize_visitor llfio_v2_xxx::algorithm::traverse_visitor

Public Member Functions

virtual result< void > post_enumeration (void *data, const directory_handle &dirh, directory_handle::buffers_type &contents, size_t depth) noexcept override
 This override implements the summary.
 
virtual result< directory_handledirectory_open_failed (void *data, result< void >::error_type &&error, const directory_handle &dirh, path_view leaf, size_t depth) noexcept override
 This override ignores failures to traverse into the directory.
 
virtual result< bool > pre_enumeration (void *data, const directory_handle &dirh, size_t depth) noexcept
 Called to decide whether to enumerate a directory. More...
 
virtual result< void > stack_updated (void *data, size_t dirs_processed, size_t known_dirs_remaining, size_t depth_processed, size_t known_depth_remaining) noexcept
 Called whenever the traversed stack of directory hierarchy is updated. This can act as an estimated progress indicator, or to give an accurate progress indicator by matching it against a previous traversal. More...
 
virtual result< size_t > finished (void *data, result< size_t > result) noexcept
 Called when a traversal finishes, whether due to success or failure. Always called from the original thread.
 

Static Public Member Functions

static void accumulate (comparison_summary &acc, comparison_summary *state, const directory_handle *dirh, directory_entry &entry, stat_t::want already_have_metadata)
 
static void accumulate (traversal_summary &acc, traversal_summary *state, const directory_handle *dirh, directory_entry &entry, stat_t::want already_have_metadata)
 

Detailed Description

A visitor for the filesystem traversal and comparison algorithm.

Note that at any time, returning a failure causes compare() to exit as soon as possible with the same failure.

You can override the members here inherited from traverse_visitor, however note that compare() is entirely implemented using traverse(), so not calling the implementations here will affect operation.

Member Function Documentation

◆ pre_enumeration()

virtual result<bool> llfio_v2_xxx::algorithm::traverse_visitor::pre_enumeration ( void *  data,
const directory_handle dirh,
size_t  depth 
)
inlinevirtualnoexceptinherited

Called to decide whether to enumerate a directory.

Note that it is more efficient to ignore the directory entry in post_enumeration() than to ignore it here, as a handle is opened for the directory before this callback. Equally, if you need that handle to inspect the directory e.g. to check if one is entering a different filesystem from the root, here is best.

The default returns true.

Note
May be called from multiple kernel threads concurrently.
75  {
76  (void) data;
77  (void) dirh;
78  (void) depth;
79  return true;
80  }

◆ stack_updated()

virtual result<void> llfio_v2_xxx::algorithm::traverse_visitor::stack_updated ( void *  data,
size_t  dirs_processed,
size_t  known_dirs_remaining,
size_t  depth_processed,
size_t  known_depth_remaining 
)
inlinevirtualnoexceptinherited

Called whenever the traversed stack of directory hierarchy is updated. This can act as an estimated progress indicator, or to give an accurate progress indicator by matching it against a previous traversal.

Parameters
dataThe third party data pointer passed to traverse().
dirs_processedThe total number of directories traversed so far.
known_dirs_remainingThe currently known number of directories awaiting traversal.
depth_processedHow many levels deep we have already completely traversed.
known_depth_remainingThe currently known number of levels we shall traverse.
Note
May be called from multiple kernel threads concurrently.
116  {
117  (void) data;
118  (void) dirs_processed;
119  (void) known_dirs_remaining;
120  (void) depth_processed;
121  (void) known_depth_remaining;
122  return success();
123  }

The documentation for this struct was generated from the following file: