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 @@ ...@@ -17,6 +17,10 @@
#include "../windows_magic.h" #include "../windows_magic.h"
#include <windows.h> #include <windows.h>
#include <vector>
#include "../stl_checked.h"
#include "../enable_if.h"
#include "../queue.h"
namespace dlib namespace dlib
{ {
...@@ -243,17 +247,29 @@ namespace dlib ...@@ -243,17 +247,29 @@ namespace dlib
template < template <
typename queue_of_files 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 queue_of_files& files
) const; ) const;
template < template <
typename queue_of_dirs 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 queue_of_dirs& dirs
) const; ) const;
...@@ -324,7 +340,7 @@ namespace dlib ...@@ -324,7 +340,7 @@ namespace dlib
template < template <
typename queue_of_dir 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 queue_of_dir& roots
) )
{ {
...@@ -345,6 +361,30 @@ namespace dlib ...@@ -345,6 +361,30 @@ namespace dlib
} while (buf[0] != 'Z'); } 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 ( inline void swap (
...@@ -368,7 +408,30 @@ namespace dlib ...@@ -368,7 +408,30 @@ namespace dlib
template < template <
typename queue_of_files 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 ( get_files (
queue_of_files& files queue_of_files& files
) const ) const
...@@ -441,7 +504,30 @@ namespace dlib ...@@ -441,7 +504,30 @@ namespace dlib
template < template <
typename queue_of_dirs 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 ( get_dirs (
queue_of_dirs& dirs queue_of_dirs& dirs
) const ) const
......
...@@ -26,6 +26,10 @@ ...@@ -26,6 +26,10 @@
#define stat64 stat #define stat64 stat
#endif #endif
#include <vector>
#include "../stl_checked.h"
#include "../enable_if.h"
#include "../queue.h"
namespace dlib namespace dlib
{ {
...@@ -237,17 +241,29 @@ namespace dlib ...@@ -237,17 +241,29 @@ namespace dlib
template < template <
typename queue_of_files 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 queue_of_files& files
) const; ) 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 < template <
typename queue_of_dirs 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 queue_of_dirs& dirs
) const; ) const;
...@@ -335,7 +351,30 @@ namespace dlib ...@@ -335,7 +351,30 @@ namespace dlib
template < template <
typename queue_of_files 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 ( get_files (
queue_of_files& files queue_of_files& files
) const ) const
...@@ -444,7 +483,30 @@ namespace dlib ...@@ -444,7 +483,30 @@ namespace dlib
template < template <
typename queue_of_dirs 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 ( get_dirs (
queue_of_dirs& dirs queue_of_dirs& dirs
) const ) const
...@@ -542,7 +604,7 @@ namespace dlib ...@@ -542,7 +604,7 @@ namespace dlib
template < template <
typename queue_of_dir 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 queue_of_dir& roots
) )
{ {
...@@ -551,6 +613,18 @@ namespace dlib ...@@ -551,6 +613,18 @@ namespace dlib
roots.enqueue(dir); 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 @@ ...@@ -4,6 +4,7 @@
#ifdef DLIB_DIR_NAV_KERNEl_ABSTRACT_ #ifdef DLIB_DIR_NAV_KERNEl_ABSTRACT_
#include <string> #include <string>
#include <vector>
#include "../uintn.h" #include "../uintn.h"
#include "../algs.h" #include "../algs.h"
...@@ -23,12 +24,14 @@ namespace dlib ...@@ -23,12 +24,14 @@ namespace dlib
template < template <
typename queue_of_dir typename queue_of_dir
// Is an implementation of queue/queue_kernel_abstract.h with T set to directory.
> >
void get_filesystem_roots ( void get_filesystem_roots (
queue_of_dir& 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 ensures
- #roots == a queue containing directories that represent all the roots - #roots == a queue containing directories that represent all the roots
of the filesystem on this machine. (e.g. in windows you have c:\, d:\ of the filesystem on this machine. (e.g. in windows you have c:\, d:\
...@@ -254,12 +257,14 @@ namespace dlib ...@@ -254,12 +257,14 @@ namespace dlib
template < template <
typename queue_of_files typename queue_of_files
// Is an implementation of queue/queue_kernel_abstract.h with T set to file.
> >
void get_files ( void get_files (
queue_of_files& files queue_of_files& files
) const; ) 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 ensures
- #files == A queue containing all the files present in this directory. - #files == A queue containing all the files present in this directory.
(Note that symbolic links will not have been resolved in the names (Note that symbolic links will not have been resolved in the names
...@@ -280,12 +285,14 @@ namespace dlib ...@@ -280,12 +285,14 @@ namespace dlib
template < template <
typename queue_of_dirs typename queue_of_dirs
// Is an implementation of queue/queue_kernel_abstract.h with T set to directory.
> >
void get_dirs ( void get_dirs (
queue_of_dirs& dirs queue_of_dirs& dirs
) const; ) 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 ensures
- #dirs == a queue containing all the directories present in this directory. - #dirs == a queue containing all the directories present in this directory.
(note that symbolic links will not have been resolved in the names (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