summaryrefslogtreecommitdiff
path: root/src/inode2filename/search_directories.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/inode2filename/search_directories.h')
-rw-r--r--src/inode2filename/search_directories.h142
1 files changed, 0 insertions, 142 deletions
diff --git a/src/inode2filename/search_directories.h b/src/inode2filename/search_directories.h
deleted file mode 100644
index 0b4af78..0000000
--- a/src/inode2filename/search_directories.h
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright (C) 2018 The Android Open Source Project
-//
-// 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.
-
-#ifndef IORAP_SRC_INODE2FILENAME_SEARCH_DIRECTORIES_H_
-#define IORAP_SRC_INODE2FILENAME_SEARCH_DIRECTORIES_H_
-
-#include "inode2filename/inode.h"
-#include "inode2filename/system_call.h"
-#include "inode2filename/inode_resolver.h"
-
-#include <fruit/fruit.h>
-
-#include <rxcpp/rx.hpp>
-namespace iorap::inode2filename {
-
-// TODO: rename.
-using SearchMode = ProcessMode;
-
-struct SearchDirectories {
- // Type-erased subset of rxcpp::connectable_observable<?>
- struct RxAnyConnectable {
- // Connects to the underlying observable.
- //
- // This kicks off the graph, streams begin emitting items.
- // This method will block until all items have been fully emitted
- // and processed by any subscribers.
- virtual void connect() = 0;
-
- virtual ~RxAnyConnectable(){}
- };
-
-
- // Create a cold observable of inode results (a lazy stream) corresponding
- // to the inode search list.
- //
- // A depth-first search is done on each of the root directories (in order),
- // until all inodes have been found (or until all directories have been exhausted).
- //
- // Some internal errors may occur during emission that aren't part of an InodeResult;
- // these will be sent to the error logcat and dropped.
- //
- // Calling this function does not begin the search.
- // The returned observable will begin the search after subscribing to it.
- //
- // The emitted InodeResult stream has these guarantees:
- // - All inodes in inode_list will eventually be emitted exactly once in an InodeResult
- // - When all inodes are found, directory traversal is halted.
- // - The order of emission can be considered arbitrary.
- //
- // Lifetime rules:
- // - The observable must be fully consumed before deleting any of the SearchDirectory's
- // borrowed constructor parameters (e.g. the SystemCall).
- // - SearchDirectory itself can be deleted at any time after creating an observable.
- rxcpp::observable<InodeResult>
- FindFilenamesFromInodes(std::vector<std::string> root_directories,
- std::vector<Inode> inode_list,
- SearchMode mode) const;
-
- // Create a cold observable of inode results (a lazy stream) corresponding
- // to the inode search list.
- //
- // A depth-first search is done on each of the root directories (in order),
- // until all inodes have been found (or until all directories have been exhausted).
- //
- // Some internal errors may occur during emission that aren't part of an InodeResult;
- // these will be sent to the error logcat and dropped.
- //
- // Calling this function does not begin the search.
- // The returned observable will begin the search after subscribing to it.
- //
- // The emitted InodeResult stream has these guarantees:
- // - All inodes in inode_list will eventually be emitted exactly once in an InodeResult
- // - When all inodes are found, directory traversal is halted.
- // - The order of emission can be considered arbitrary.
- //
- // Lifetime rules:
- // - The observable must be fully consumed before deleting any of the SearchDirectory's
- // borrowed constructor parameters (e.g. the SystemCall).
- // - SearchDirectory itself can be deleted at any time after creating an observable.
- std::pair<rxcpp::observable<InodeResult>, std::unique_ptr<RxAnyConnectable>>
- FindFilenamesFromInodesPair(std::vector<std::string> root_directories,
- std::vector<Inode> inode_list,
- SearchMode mode) const;
-
- // No items on the output stream will be emitted until 'inodes' completes.
- //
- // The current algorithm is a naive DFS, so if it began too early it would either
- // miss the search items or require traversal restarts.
- //
- // See above for more details.
- rxcpp::observable<InodeResult>
- FindFilenamesFromInodes(std::vector<std::string> root_directories,
- rxcpp::observable<Inode> inodes,
- SearchMode mode) const;
-
- rxcpp::observable<InodeResult>
- ListAllFilenames(std::vector<std::string> root_directories) const;
-
- rxcpp::observable<InodeResult> FilterFilenamesForSpecificInodes(
- // haystack that will be subscribed to until all in inode_list are found.
- rxcpp::observable<InodeResult> all_inodes,
- // key list: traverse all_inodes until we emit all results from inode_list.
- std::vector<Inode> inode_list,
- // all_inodes have a missing device number: use stat(2) to fill it in.
- bool missing_device_number,
- bool needs_verification) const;
-
- rxcpp::observable<InodeResult> EmitAllFilenames(
- // haystack that will be subscribed to until all in inode_list are found.
- rxcpp::observable<InodeResult> all_inodes,
- // all_inodes have a missing device number: use stat(2) to fill it in.
- bool missing_device_number,
- bool needs_verification) const;
-
- // Any borrowed parameters here can also be borrowed by the observables returned by the above
- // member functions.
- //
- // The observables must be fully consumed within the lifetime of the borrowed parameters.
- INJECT(SearchDirectories(borrowed<SystemCall*> system_call))
- : system_call_(system_call) {}
-
- // TODO: is there a way to get rid of this second RxAnyConnectable parameter?
- private:
- // This gets passed around to lazy lambdas, so we must finish consuming any observables
- // before the injected system call is deleted.
- borrowed<SystemCall*> system_call_;
-};
-
-} // namespace iorap::inode2filename
-
-#endif // IORAP_SRC_INODE2FILENAME_SEARCH_DIRECTORIES_H_