/usr/include/ossim/util/ossimFileWalker.h is in libossim-dev 2.2.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 | //----------------------------------------------------------------------------
//
// File: ossimFileWalker.h
//
// License: MIT
//
// See LICENSE.txt file in the top level directory for more details.
//
// Author: David Burken
//
// Description: See description for class below.
//
//----------------------------------------------------------------------------
// $Id$
#ifndef ossimFileWalker_HEADER
#define ossimFileWalker_HEADER 1
#include <ossim/base/ossimConstants.h>
#include <ossim/base/ossimFilename.h>
#include <ossim/parallel/ossimJob.h>
#include <ossim/parallel/ossimJobMultiThreadQueue.h>
#include <string>
#include <vector>
#include <mutex>
#include <memory>
class ossimFilename;
class ossimFileProcessorInterface;
/**
* @class ossimFileWalker
*
* Utility class to walk through directories and get a list of files to
* process. For each file found the ossimFileProcessorInterface::processFile
* method is excecuted. Internally the processFile calls are placed in a job
* queue.
*
* Typical usage (snip from ossimTiledElevationDatabase):
*
* ossimFileWalker* fw = new ossimFileWalker();
* fw->initializeDefaultFilterList();
* fw->setFileProcessor( this );
* fw->walk(f);
*/
class OSSIM_DLL ossimFileWalker
{
public:
/** default constructor */
ossimFileWalker();
/** destructor */
~ossimFileWalker();
/**
* @brief Takes an array of files.
*
* For each file in array: If files is a directory, it will walk it. Files
* found in walk or files(not directories) in the array will be processed
* via a job queue.
*
* Files are filter prior to the callback execution. The filtering is to
* eliminate sending unwanted files to the callback. There is a default
* filter table. This can be edited by calling the non-const
* getFilteredExtensions method.
*
* Each callback is placed in a threaded job queue. So users should ensure
* their callback is thread safe.
*/
void walk(const std::vector<ossimFilename>& files);
/**
* @brief This will walk "root" and execute a callback for each file found.
*
* Files are filter prior to the callback execution. The filtering is to
* eliminate sending unwanted files to the callback. There is a default
* filter table. This can be edited by calling the non-const
* getFilteredExtensions method.
*
* Each callback is placed in a threaded job queue. So users should ensure
* their callback is thread safe.
*/
void walk(const ossimFilename& root);
/**
* @brief Sets ossimFileProcessorInterfacecallback method to process files.
*
* @param fpi ossimFileProcessorInterface pointer
*/
void setFileProcessor(ossimFileProcessorInterface* fpi);
/** @return The list of filtered out files. */
const std::vector<std::string>& getFilteredExtensions() const;
/**
* @brief Non const method to allow access for
* adding or deleting extensions from the list.
*
* The list is used by the private isFiltered method to avoid trying to
* process unwanted files.
*/
std::vector<std::string>& getFilteredExtensions();
/** @brief Dumps filtered image extenstions to std out. */
void dumpFilteredExtensionList() const;
/**
* @brief Initializes the filter list with a default set of filtered out
* file names.
*/
void initializeDefaultFilterList();
/**
* @brief Sets recurse flag.
*
* If set to true this stops recursing of the
* current directory. Defaulted to true in the constructor.
* Typically used to indicate the directory being processed holds a
* directory based image, e.g. RPF data.
*
* @param flag True to recurse, false to stop recursion of current
* directory.
*/
void setRecurseFlag(bool flag);
/**
* @brief Sets waitOnDir flag.
*
* If set to true each directory is processed in entirety before sub
* directories are recursed. This allows callers of setRecurseFlag
* to disable directory walking. If your code is calling setRecurseFlag
* this flag should be set to true.
*
* @param flag true to wait, false to not wait. Defaulted to false in the constructor.
*/
void setWaitOnDirFlag(bool flag);
/**
* @brief If set to true this stops files walking (aborts).
* @param flag True to abort current "walk".
*/
void setAbortFlag(bool flag);
/** @brief Sets the max number of threads(jobs) to run at one time. */
void setNumberOfThreads(ossim_uint32 nThreads);
private:
/** @brief Private ossimJob class. */
class ossimFileWalkerJob : public ossimJob
{
public:
/**
* @brief Constructor that takes file processor pointer and file.
* @param fpi ossimFileProcessorInterface pointer
* @param file The file to process.
*/
ossimFileWalkerJob(ossimFileProcessorInterface* fpi,
const ossimFilename& file);
protected:
/**
* @brief Defines pure virtual ossimJob::start.
*
* This executes the call to m_processFileCallBackPtr.
*/
virtual void run();
private:
ossimFileProcessorInterface* m_fileProcessor;
ossimFilename m_file;
}; // End: class ossimFileWalkerJob
/** @brief Private ossimJobCallback class. */
class ossimFileWalkerJobCallback : public ossimJobCallback
{
public:
ossimFileWalkerJobCallback();
virtual void started(std::shared_ptr<ossimJob> job);
virtual void finished(std::shared_ptr<ossimJob> job);
virtual void canceled(std::shared_ptr<ossimJob> job);
};
/**
* @brief Processes files in directory.
*
* If a file in the directory is itself a directory this will do a recursive
* call to itself. Individual files are processed in a job queue...
*/
void walkDir(const ossimFilename& dir);
/**
* @brief Convenience method for file walker code to check file to see is
* it should be processed.
*
* @param f File to check.
*
* @return true if f is in filter list, false if not.
*/
bool isFiltered(const ossimFilename& f) const;
/**
* @brief isDotFile method.
* @param f File/directory to check.
* @return true if file is a dot file.
*/
bool isDotFile(const ossimFilename& f) const;
/**
* @brief Callback to method to process a file.
*
* @param const ossimFilename& First parameter(argument) file to process.
*/
ossimFileProcessorInterface* m_fileProcessor;
std::shared_ptr<ossimJobMultiThreadQueue> m_jobQueue;
std::vector<std::string> m_filteredExtensions;
bool m_recurseFlag;
bool m_waitOnDirFlag;
bool m_abortFlag;
std::mutex m_mutex;
};
#endif /* #ifndef ossimFileWalker_HEADER */
|