Commit b434f430 authored by Davis King's avatar Davis King

Made the dir_nav stuff work with std::vector and dlib::std_vector_c

as well as dlib::queue objects.

--HG--
extra : convert_revision : svn%3Afdd8eb12-d10e-0410-9acb-85c331704f74/trunk%402501
parent 39fe9862
......@@ -17,6 +17,10 @@
#include "../windows_magic.h"
#include <windows.h>
#include <vector>
#include "../stl_checked.h"
#include "../enable_if.h"
#include "../queue.h"
namespace dlib
{
......@@ -243,17 +247,29 @@ namespace dlib
template <
typename queue_of_files
// Is an implementation of queue/queue_kernel_abstract.h with T set to file.
>
void get_files (
typename enable_if<is_std_vector<queue_of_files>,void>::type get_files (
queue_of_files& files
) const;
template <
typename queue_of_files
>
typename disable_if<is_std_vector<queue_of_files>,void>::type get_files (
queue_of_files& files
) const;
template <
typename queue_of_dirs
// Is an implementation of queue/queue_kernel_abstract.h with T set to directory.
>
void get_dirs (
typename enable_if<is_std_vector<queue_of_dirs>,void>::type get_dirs (
queue_of_dirs& dirs
) const;
template <
typename queue_of_dirs
>
typename disable_if<is_std_vector<queue_of_dirs>,void>::type get_dirs (
queue_of_dirs& dirs
) const;
......@@ -324,7 +340,7 @@ namespace dlib
template <
typename queue_of_dir
>
void get_filesystem_roots (
typename disable_if<is_std_vector<queue_of_dir>,void>::type get_filesystem_roots (
queue_of_dir& roots
)
{
......@@ -345,6 +361,30 @@ namespace dlib
} while (buf[0] != 'Z');
}
template <
typename queue_of_dir
>
typename enable_if<is_std_vector<queue_of_dir>,void>::type get_filesystem_roots (
queue_of_dir& roots
)
{
roots.clear();
const DWORD mask = GetLogicalDrives();
DWORD bit = 1;
char buf[] = "A:\\";
do
{
if (mask & bit)
{
directory dir("",buf,directory::private_constructor());
roots.push_back(dir);
}
bit <<= 1;
++buf[0];
} while (buf[0] != 'Z');
}
// ----------------------------------------------------------------------------------------
inline void swap (
......@@ -368,7 +408,30 @@ namespace dlib
template <
typename queue_of_files
>
void directory::
typename enable_if<is_std_vector<queue_of_files>,void>::type directory::
get_files (
queue_of_files& files
) const
{
queue<file>::kernel_2a temp_files;
get_files(temp_files);
files.clear();
// copy the queue of files into the vector
temp_files.reset();
while (temp_files.move_next())
{
files.push_back(temp_files.element());
}
}
// ----------------------------------------------------------------------------------------
template <
typename queue_of_files
>
typename disable_if<is_std_vector<queue_of_files>,void>::type directory::
get_files (
queue_of_files& files
) const
......@@ -441,7 +504,30 @@ namespace dlib
template <
typename queue_of_dirs
>
void directory::
typename enable_if<is_std_vector<queue_of_dirs>,void>::type directory::
get_dirs (
queue_of_dirs& dirs
) const
{
queue<directory>::kernel_2a temp_dirs;
get_dirs(temp_dirs);
dirs.clear();
// copy the queue of dirs into the vector
temp_dirs.reset();
while (temp_dirs.move_next())
{
dirs.push_back(temp_dirs.element());
}
}
// ----------------------------------------------------------------------------------------
template <
typename queue_of_dirs
>
typename disable_if<is_std_vector<queue_of_dirs>,void>::type directory::
get_dirs (
queue_of_dirs& dirs
) const
......
......@@ -26,6 +26,10 @@
#define stat64 stat
#endif
#include <vector>
#include "../stl_checked.h"
#include "../enable_if.h"
#include "../queue.h"
namespace dlib
{
......@@ -237,17 +241,29 @@ namespace dlib
template <
typename queue_of_files
// Is an implementation of queue/queue_kernel_abstract.h with T set to file.
>
void get_files (
typename enable_if<is_std_vector<queue_of_files>,void>::type get_files (
queue_of_files& files
) const;
template <
typename queue_of_files
>
typename disable_if<is_std_vector<queue_of_files>,void>::type get_files (
queue_of_files& files
) const;
template <
typename queue_of_dirs
>
typename enable_if<is_std_vector<queue_of_dirs>,void>::type get_dirs (
queue_of_dirs& dirs
) const;
template <
typename queue_of_dirs
// Is an implementation of queue/queue_kernel_abstract.h with T set to directory.
>
void get_dirs (
typename disable_if<is_std_vector<queue_of_dirs>,void>::type get_dirs (
queue_of_dirs& dirs
) const;
......@@ -335,7 +351,30 @@ namespace dlib
template <
typename queue_of_files
>
void directory::
typename enable_if<is_std_vector<queue_of_files>,void>::type directory::
get_files (
queue_of_files& files
) const
{
queue<file>::kernel_2a temp_files;
get_files(temp_files);
files.clear();
// copy the queue of files into the vector
temp_files.reset();
while (temp_files.move_next())
{
files.push_back(temp_files.element());
}
}
// ----------------------------------------------------------------------------------------
template <
typename queue_of_files
>
typename disable_if<is_std_vector<queue_of_files>,void>::type directory::
get_files (
queue_of_files& files
) const
......@@ -444,7 +483,30 @@ namespace dlib
template <
typename queue_of_dirs
>
void directory::
typename enable_if<is_std_vector<queue_of_dirs>,void>::type directory::
get_dirs (
queue_of_dirs& dirs
) const
{
queue<directory>::kernel_2a temp_dirs;
get_dirs(temp_dirs);
dirs.clear();
// copy the queue of dirs into the vector
temp_dirs.reset();
while (temp_dirs.move_next())
{
dirs.push_back(temp_dirs.element());
}
}
// ----------------------------------------------------------------------------------------
template <
typename queue_of_dirs
>
typename disable_if<is_std_vector<queue_of_dirs>,void>::type directory::
get_dirs (
queue_of_dirs& dirs
) const
......@@ -542,7 +604,7 @@ namespace dlib
template <
typename queue_of_dir
>
void get_filesystem_roots (
typename disable_if<is_std_vector<queue_of_dir>,void>::type get_filesystem_roots (
queue_of_dir& roots
)
{
......@@ -551,6 +613,18 @@ namespace dlib
roots.enqueue(dir);
}
template <
typename queue_of_dir
>
typename enable_if<is_std_vector<queue_of_dir>,void>::type get_filesystem_roots (
const std::vector<directory>& roots
)
{
roots.clear();
directory dir("/");
roots.push_back(dir);
}
// ----------------------------------------------------------------------------------------
}
......
......@@ -4,6 +4,7 @@
#ifdef DLIB_DIR_NAV_KERNEl_ABSTRACT_
#include <string>
#include <vector>
#include "../uintn.h"
#include "../algs.h"
......@@ -23,12 +24,14 @@ namespace dlib
template <
typename queue_of_dir
// Is an implementation of queue/queue_kernel_abstract.h with T set to directory.
>
void get_filesystem_roots (
queue_of_dir& roots
);
/*!
requires
- queue_of_dirs == an implementation of queue/queue_kernel_abstract.h with T
set to directory or a std::vector<directory> or dlib::std_vector_c<directory>.
ensures
- #roots == a queue containing directories that represent all the roots
of the filesystem on this machine. (e.g. in windows you have c:\, d:\
......@@ -254,12 +257,14 @@ namespace dlib
template <
typename queue_of_files
// Is an implementation of queue/queue_kernel_abstract.h with T set to file.
>
void get_files (
queue_of_files& files
) const;
/*!
requires
- queue_of_files == an implementation of queue/queue_kernel_abstract.h with T
set to file or a std::vector<file> or dlib::std_vector_c<file>.
ensures
- #files == A queue containing all the files present in this directory.
(Note that symbolic links will not have been resolved in the names
......@@ -280,12 +285,14 @@ namespace dlib
template <
typename queue_of_dirs
// Is an implementation of queue/queue_kernel_abstract.h with T set to directory.
>
void get_dirs (
queue_of_dirs& dirs
) const;
/*!
requires
- queue_of_dirs == an implementation of queue/queue_kernel_abstract.h with T
set to directory or a std::vector<directory> or dlib::std_vector_c<directory>.
ensures
- #dirs == a queue containing all the directories present in this directory.
(note that symbolic links will not have been resolved in the names
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment