[go: up one dir, main page]

Menu

Diff of /lv_io.cpp [000000] .. [r1]  Maximize  Restore

Switch to side-by-side view

--- a
+++ b/lv_io.cpp
@@ -0,0 +1,158 @@
+/****************************************************************************
+* 
+* Copyright (c) 2006 by JIA Pei, all rights reserved.
+* Copyright (c) 2006 by Vision Open: http://www.visionopen.com/
+*
+* Author:      	JIA Pei
+* Contact:     	jp4work@gmail.com
+* URL:		http://www.visionopen.com/members/jiapei.php
+* The author administrates Vision Open -- http://www.visionopen.com
+*
+* This program is free software; you can redistribute it and/or modify it 
+* under the terms of the GNU General Public License as published by the 
+* Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful, but 
+* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
+* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 
+* for more details.
+* 
+* You should have received a copy of the GNU General Public License along 
+* with this program; if not, write to the Free Software Foundation, Inc., 
+* 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+* 
+* This software is partly based on the following open source: 
+*  
+*		- Boost 
+*		- OpenCV 
+* 
+* This software is using IMM Face Database, which can be downloaded from
+* http://www2.imm.dtu.dk/~aam/.
+*
+* M. B. Stegmann, B. K. Ersb{\o}ll, and R. Larsen. FAME - a flexible appearance 
+* modelling environment. IEEE Trans. on Medical Imaging, 22(10):1319-1331, 2003
+*
+****************************************************************************/
+
+// $Id: lv_io.cpp,v 1.1.1.1 2006-09-03 17:49:04 JIA Pei Exp $ 
+
+
+#include "lv_io.h"
+
+#include <iostream>
+#include <fstream>
+#include <string>
+#include <boost/filesystem/operations.hpp>  // includes boost/filesystem/path.hpp
+#include <boost/filesystem/fstream.hpp>     // ditto
+#include <iostream>                         // for std::cout
+#include <boost/regex/v4/fileiter.hpp>
+
+
+using namespace std;
+
+
+
+// local (static) compare function for the qsort() call below
+static int str_compare( const void *arg1, const void *arg2 )
+{
+    return strcmp( ( *(string*)arg1).c_str (), ( *(string*)arg2).c_str () );
+}
+
+
+/**
+
+    @author     JIA Pei
+
+    @version    2006-09-01
+
+    @brief      Scans a directory and sorts all files with a specified extension.
+
+    @param      path        Path to read from.
+
+    @param      extension   The file extension to search for.
+
+    @return     The filenames found without any path. 
+
+*/
+vector<string> lv_io::ScanNSortDirectory( const string &path, const string &extension )
+{
+    boost::re_detail::file_iterator_ref *ref = new boost::re_detail::file_iterator_ref ();
+    BOOST_REGEX_NOEH_ASSERT(ref);
+    ref->count = 1;
+
+    string searchPath;
+    int nbFiles;
+    vector<string> vFilenames;
+
+    // add termination backslash (if needed)
+    string pathBS = lv_io::AddBackSlash(path);
+
+    // build and sort list of filenames
+    searchPath = pathBS + string("*.") + extension;
+
+    ref->hf = FindFirstFileA(searchPath.c_str (), &(ref->_data));
+
+    vFilenames.push_back( pathBS+string(ref->_data.cFileName) );
+    nbFiles=1;
+    while( FindNextFileA ( ref->hf, &(ref->_data) ) )
+    {
+        vFilenames.push_back( pathBS+string(ref->_data.cFileName) );
+        nbFiles++;
+    }	
+    FindClose( ref->hf );
+
+    // sort the filenames
+    qsort( (void *)&(vFilenames[0]), (size_t)nbFiles, sizeof( string), str_compare );
+
+    // return
+    return vFilenames;
+}
+
+
+
+/**
+
+    @author     JIA Pei
+
+    @version    2006-09-01
+
+    @brief      Ensures that a string is terminated with a backslash.
+                If the already has a terminating backslash, nothing is done.
+
+    @param      path	Input string.
+
+    @return     Backslash-terminated output string.
+
+*/
+string lv_io::AddBackSlash( const string &path )
+{
+    int len = path.length();
+
+    // For Windows
+    #ifdef BOOST_REGEX_FI_WIN32_MAP
+    {
+        if (len <= 0 || (len>0 && path[len-1]=='\\'))
+        {
+            return path;
+        }
+        else
+        {
+            return path+"\\";
+        }
+    }
+
+    // For Posix -- Portable Operating System Interface for uniX
+    #elif defined(BOOST_REGEX_FI_POSIX_MAP)
+    {
+        if (len <= 0 || (len>0 && path[len-1]=='/'))
+        {
+            return path;
+        }
+        else
+        {
+            return path+"/";
+        }
+    }
+    #endif
+}
+