From 3159281d7798250f652122644ac6eb1fd492392a Mon Sep 17 00:00:00 2001 From: Dimitre Date: Fri, 17 Mar 2023 00:56:28 -0300 Subject: [PATCH 1/5] listdir and sort --- apps/projectGenerator | 2 +- .../input_output/dirListExample/src/ofApp.cpp | 32 ++++++++------ .../openFrameworks/communication/ofSerial.cpp | 2 +- libs/openFrameworks/utils/ofFileUtils.cpp | 44 ++++++++++--------- libs/openFrameworks/utils/ofFileUtils.h | 11 ++--- 5 files changed, 50 insertions(+), 41 deletions(-) diff --git a/apps/projectGenerator b/apps/projectGenerator index 9fe7054b390..272666f90ed 160000 --- a/apps/projectGenerator +++ b/apps/projectGenerator @@ -1 +1 @@ -Subproject commit 9fe7054b390829381241581cbc3874ed6d5aafbf +Subproject commit 272666f90ed4cc290e34b6f49c70e66c34632084 diff --git a/examples/input_output/dirListExample/src/ofApp.cpp b/examples/input_output/dirListExample/src/ofApp.cpp index e3497f3973a..31a02a3040b 100644 --- a/examples/input_output/dirListExample/src/ofApp.cpp +++ b/examples/input_output/dirListExample/src/ofApp.cpp @@ -3,22 +3,26 @@ //-------------------------------------------------------------- void ofApp::setup(){ - dir.listDir("images/of_logos/"); - dir.allowExt("jpg"); + uint64_t mStart = ofGetElapsedTimeMillis(); +// dir.listDir("/Users/z/Pictures/s1"); // 1 ms + dir.listDir("/Users/z/Pictures/Sun"); //171 ms //16ms after dir.sort(); // in linux the file system doesn't return file lists ordered in alphabetical order - + uint64_t mEnd = ofGetElapsedTimeMillis(); + cout << mEnd - mStart << endl; +// dir.allowExt("jpg"); + //allocate the vector to have as many ofImages as files - if( dir.size() ){ - images.assign(dir.size(), ofImage()); - } +// if( dir.size() ){ +// images.assign(dir.size(), ofImage()); +// } // you can now iterate through the files and load them into the ofImage vector - for(int i = 0; i < (int)dir.size(); i++){ - images[i].load(dir.getPath(i)); - } - currentImage = 0; - - ofBackground(ofColor::white); +// for(int i = 0; i < (int)dir.size(); i++){ +// images[i].load(dir.getPath(i)); +// } +// currentImage = 0; +// +// ofBackground(ofColor::white); } //-------------------------------------------------------------- @@ -31,13 +35,13 @@ void ofApp::draw(){ if (dir.size() > 0){ ofSetColor(ofColor::white); - images[currentImage].draw(300,50); +// images[currentImage].draw(300,50); ofSetColor(ofColor::gray); string pathInfo = dir.getName(currentImage) + " " + dir.getPath(currentImage) + "\n\n" + "press any key to advance current image\n\n" + "many thanks to hikaru furuhashi for the OFs"; - ofDrawBitmapString(pathInfo, 300, images[currentImage].getHeight() + 80); +// ofDrawBitmapString(pathInfo, 300, images[currentImage].getHeight() + 80); } ofSetColor(ofColor::gray); diff --git a/libs/openFrameworks/communication/ofSerial.cpp b/libs/openFrameworks/communication/ofSerial.cpp index 3c1ab211138..90ebe2855ce 100644 --- a/libs/openFrameworks/communication/ofSerial.cpp +++ b/libs/openFrameworks/communication/ofSerial.cpp @@ -176,7 +176,7 @@ void ofSerial::buildDeviceList(){ ofDirectory dir("/dev"); int deviceCount = 0; for(auto & entry: dir){ - std::string deviceName = entry.getFileName(); + std::string deviceName = entry.string(); //we go through the prefixes for(auto & prefix: prefixMatch){ diff --git a/libs/openFrameworks/utils/ofFileUtils.cpp b/libs/openFrameworks/utils/ofFileUtils.cpp index 0ae1e326c99..d96f4f67502 100644 --- a/libs/openFrameworks/utils/ofFileUtils.cpp +++ b/libs/openFrameworks/utils/ofFileUtils.cpp @@ -1402,25 +1402,27 @@ std::size_t ofDirectory::listDir(){ of::filesystem::directory_iterator end_iter; if ( of::filesystem::exists(myDir) && of::filesystem::is_directory(myDir)){ for( of::filesystem::directory_iterator dir_iter(myDir) ; dir_iter != end_iter ; ++dir_iter){ - files.emplace_back(dir_iter->path().string(), ofFile::Reference); + files.emplace_back(dir_iter->path()); } }else{ ofLogError("ofDirectory") << "listDir:() source directory does not exist: \"" << myDir << "\""; return 0; } - if(!showHidden){ - ofRemove(files, [](ofFile & file){ - return file.isHidden(); - }); - } + // FIXME: +// if(!showHidden){ +// ofRemove(files, [](of::filesystem::path & file){ +// return file.isHidden(); +// }); +// } - if(!extensions.empty() && !ofContains(extensions, (string)"*")){ - ofRemove(files, [&](ofFile & file){ - return std::find(extensions.begin(), extensions.end(), ofToLower(file.getExtension())) == extensions.end(); - }); - } + +// if(!extensions.empty() && !ofContains(extensions, (string)"*")){ +// ofRemove(files, [&](ofFile & file){ +// return std::find(extensions.begin(), extensions.end(), ofToLower(file.getExtension())) == extensions.end(); +// }); +// } if(ofGetLogLevel() == OF_LOG_VERBOSE){ for(int i = 0; i < (int)size(); i++){ @@ -1439,7 +1441,7 @@ string ofDirectory::getOriginalDirectory() const { //------------------------------------------------------------------------------------------------------------ string ofDirectory::getName(std::size_t position) const{ - return files.at(position).getFileName(); + return files.at(position).string(); } //------------------------------------------------------------------------------------------------------------ @@ -1463,7 +1465,8 @@ const vector & ofDirectory::getFiles() const{ if(files.empty() && !myDir.empty()){ const_cast(this)->listDir(); } - return files; + // FIXME +// return files; } //------------------------------------------------------------------------------------------------------------ @@ -1507,7 +1510,8 @@ void ofDirectory::sort(){ if(files.empty() && !myDir.empty()){ listDir(); } - ofSort(files, natural); + std::sort(files.begin(), files.end()); +// ofSort(files, natural); } //------------------------------------------------------------------------------------------------------------ @@ -1639,22 +1643,22 @@ bool ofDirectory::operator>=(const ofDirectory & dir) const{ } //------------------------------------------------------------------------------------------------------------ -vector::const_iterator ofDirectory::begin() const{ - return getFiles().begin(); +vector::const_iterator ofDirectory::begin() const{ + return files.begin(); } //------------------------------------------------------------------------------------------------------------ -vector::const_iterator ofDirectory::end() const{ +vector::const_iterator ofDirectory::end() const{ return files.end(); } //------------------------------------------------------------------------------------------------------------ -vector::const_reverse_iterator ofDirectory::rbegin() const{ - return getFiles().rbegin(); +vector::const_reverse_iterator ofDirectory::rbegin() const{ + return files.rbegin(); } //------------------------------------------------------------------------------------------------------------ -vector::const_reverse_iterator ofDirectory::rend() const{ +vector::const_reverse_iterator ofDirectory::rend() const{ return files.rend(); } diff --git a/libs/openFrameworks/utils/ofFileUtils.h b/libs/openFrameworks/utils/ofFileUtils.h index bed0c30d38e..5b720085544 100644 --- a/libs/openFrameworks/utils/ofFileUtils.h +++ b/libs/openFrameworks/utils/ofFileUtils.h @@ -1191,15 +1191,16 @@ class ofDirectory{ /// \returns true if the path was removed successfully static bool removeDirectory(const of::filesystem::path& path, bool deleteIfNotEmpty, bool bRelativeToData = true); - std::vector::const_iterator begin() const; - std::vector::const_iterator end() const; - std::vector::const_reverse_iterator rbegin() const; - std::vector::const_reverse_iterator rend() const; + std::vector::const_iterator begin() const; + std::vector::const_iterator end() const; + std::vector::const_reverse_iterator rbegin() const; + std::vector::const_reverse_iterator rend() const; of::filesystem::path myDir; std::string originalDirectory; std::vector extensions; - std::vector files; +// std::vector files; + std::vector files; bool showHidden; }; From 771e9e57501e8e7bbd9e7a48e9f502efb87b654c Mon Sep 17 00:00:00 2001 From: Dimitre Date: Fri, 17 Mar 2023 00:57:51 -0300 Subject: [PATCH 2/5] revert example --- .../input_output/dirListExample/src/ofApp.cpp | 32 ++++++++----------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/examples/input_output/dirListExample/src/ofApp.cpp b/examples/input_output/dirListExample/src/ofApp.cpp index 31a02a3040b..e3497f3973a 100644 --- a/examples/input_output/dirListExample/src/ofApp.cpp +++ b/examples/input_output/dirListExample/src/ofApp.cpp @@ -3,26 +3,22 @@ //-------------------------------------------------------------- void ofApp::setup(){ - uint64_t mStart = ofGetElapsedTimeMillis(); -// dir.listDir("/Users/z/Pictures/s1"); // 1 ms - dir.listDir("/Users/z/Pictures/Sun"); //171 ms //16ms after + dir.listDir("images/of_logos/"); + dir.allowExt("jpg"); dir.sort(); // in linux the file system doesn't return file lists ordered in alphabetical order - uint64_t mEnd = ofGetElapsedTimeMillis(); - cout << mEnd - mStart << endl; -// dir.allowExt("jpg"); - + //allocate the vector to have as many ofImages as files -// if( dir.size() ){ -// images.assign(dir.size(), ofImage()); -// } + if( dir.size() ){ + images.assign(dir.size(), ofImage()); + } // you can now iterate through the files and load them into the ofImage vector -// for(int i = 0; i < (int)dir.size(); i++){ -// images[i].load(dir.getPath(i)); -// } -// currentImage = 0; -// -// ofBackground(ofColor::white); + for(int i = 0; i < (int)dir.size(); i++){ + images[i].load(dir.getPath(i)); + } + currentImage = 0; + + ofBackground(ofColor::white); } //-------------------------------------------------------------- @@ -35,13 +31,13 @@ void ofApp::draw(){ if (dir.size() > 0){ ofSetColor(ofColor::white); -// images[currentImage].draw(300,50); + images[currentImage].draw(300,50); ofSetColor(ofColor::gray); string pathInfo = dir.getName(currentImage) + " " + dir.getPath(currentImage) + "\n\n" + "press any key to advance current image\n\n" + "many thanks to hikaru furuhashi for the OFs"; -// ofDrawBitmapString(pathInfo, 300, images[currentImage].getHeight() + 80); + ofDrawBitmapString(pathInfo, 300, images[currentImage].getHeight() + 80); } ofSetColor(ofColor::gray); From 04a92cc90d5a02e5832fe7353f85e166f209296e Mon Sep 17 00:00:00 2001 From: Dimitre Date: Fri, 17 Mar 2023 01:04:17 -0300 Subject: [PATCH 3/5] fix --- libs/openFrameworks/utils/ofFileUtils.cpp | 4 ++-- libs/openFrameworks/utils/ofFileUtils.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/openFrameworks/utils/ofFileUtils.cpp b/libs/openFrameworks/utils/ofFileUtils.cpp index d96f4f67502..bba6a1232e8 100644 --- a/libs/openFrameworks/utils/ofFileUtils.cpp +++ b/libs/openFrameworks/utils/ofFileUtils.cpp @@ -1461,12 +1461,12 @@ ofFile ofDirectory::operator[](std::size_t position) const { } //------------------------------------------------------------------------------------------------------------ -const vector & ofDirectory::getFiles() const{ +const vector & ofDirectory::getFiles() const{ if(files.empty() && !myDir.empty()){ const_cast(this)->listDir(); } // FIXME -// return files; + return files; } //------------------------------------------------------------------------------------------------------------ diff --git a/libs/openFrameworks/utils/ofFileUtils.h b/libs/openFrameworks/utils/ofFileUtils.h index 5b720085544..19077bdf4f7 100644 --- a/libs/openFrameworks/utils/ofFileUtils.h +++ b/libs/openFrameworks/utils/ofFileUtils.h @@ -1075,7 +1075,7 @@ class ofDirectory{ /// Directory contents are automatically listed. /// /// \returns vector of files in the directory - const std::vector & getFiles() const; + const std::vector & getFiles() const; /// Access directory contents via th array operator. /// From d89374f7f16c042b23e7b72ec112f42a8dc78bc6 Mon Sep 17 00:00:00 2001 From: Dimitre Date: Fri, 13 Sep 2024 13:58:24 -0300 Subject: [PATCH 4/5] more ofFile ideas --- libs/openFrameworks/utils/ofFileUtils.cpp | 75 ++++++----------------- libs/openFrameworks/utils/ofFileUtils.h | 6 +- 2 files changed, 23 insertions(+), 58 deletions(-) diff --git a/libs/openFrameworks/utils/ofFileUtils.cpp b/libs/openFrameworks/utils/ofFileUtils.cpp index 822dde4df3c..5f5f41e2c45 100644 --- a/libs/openFrameworks/utils/ofFileUtils.cpp +++ b/libs/openFrameworks/utils/ofFileUtils.cpp @@ -1123,7 +1123,7 @@ bool ofFile::doesFileExist(const fs::path & _path, bool bRelativeToData){ if(bRelativeToData){ path = ofToDataPath(path); } - return !path.empty() && of::filesystem::exists(path); + return !path.empty() && fs::exists(path); } //------------------------------------------------------------------------------------------------------------ @@ -1380,9 +1380,9 @@ std::size_t ofDirectory::listDir(){ return 0; } - of::filesystem::directory_iterator end_iter; - if ( of::filesystem::exists(myDir) && of::filesystem::is_directory(myDir)){ - for( of::filesystem::directory_iterator dir_iter(myDir) ; dir_iter != end_iter ; ++dir_iter){ + fs::directory_iterator end_iter; + if ( fs::exists(myDir) && fs::is_directory(myDir)){ + for( fs::directory_iterator dir_iter(myDir) ; dir_iter != end_iter ; ++dir_iter){ files.emplace_back(dir_iter->path()); } }else{ @@ -1393,7 +1393,7 @@ std::size_t ofDirectory::listDir(){ // FIXME: // if(!showHidden){ -// ofRemove(files, [](of::filesystem::path & file){ +// ofRemove(files, [](fs::path & file){ // return file.isHidden(); // }); // } @@ -1409,25 +1409,25 @@ std::size_t ofDirectory::listDir(){ for(int i = 0; i < (int)size(); i++){ ofLogVerbose() << "\t" << getName(i); } - ofLogVerbose() << "listed " << size() << " files in \"" << originalDirectory << "\""; + ofLogVerbose() << "listed " << size() << " files in " << originalDirectory; } return size(); } //------------------------------------------------------------------------------------------------------------ -string ofDirectory::getOriginalDirectory() const { - return ofPathToString(originalDirectory); +fs::path ofDirectory::getOriginalDirectory() const { + return originalDirectory; } //------------------------------------------------------------------------------------------------------------ -string ofDirectory::getName(std::size_t position) const{ - return files.at(position).string(); +fs::path ofDirectory::getName(std::size_t position) const{ + return files.at(position); } //------------------------------------------------------------------------------------------------------------ -string ofDirectory::getPath(std::size_t position) const{ - return ofPathToString(originalDirectory / getName(position)); +fs::path ofDirectory::getPath(std::size_t position) const{ + return originalDirectory / getName(position); } //------------------------------------------------------------------------------------------------------------ @@ -1442,7 +1442,7 @@ ofFile ofDirectory::operator[](std::size_t position) const { } //------------------------------------------------------------------------------------------------------------ -const vector & ofDirectory::getFiles() const{ +const vector & ofDirectory::getFiles() const{ if(files.empty() && !myDir.empty()){ const_cast(this)->listDir(); } @@ -1460,48 +1460,14 @@ void ofDirectory::reset(){ close(); } -//------------------------------------------------------------------------------------------------------------ -static bool natural(const ofFile& a, const ofFile& b) { - string aname = a.getBaseName(), bname = b.getBaseName(); - int aint = ofToInt(aname), bint = ofToInt(bname); - if(ofToString(aint) == aname && ofToString(bint) == bname) { - return aint < bint; - } else { - return a < b; - } -} - - -//------------------------------------------------------------------------------------------------------------ -struct StringSort{ - fs::path path; - string basename; - int nameInt; - string stringInt; -}; - -//------------------------------------------------------------------------------------------------------------ -static bool naturalStr(const StringSort& a, const StringSort& b) { - if(a.stringInt == a.basename && b.stringInt == b.basename) { - return a.nameInt < b.nameInt; - } else { - return a.path < b.path; - } -} - -//------------------------------------------------------------------------------------------------------------ -static bool byDate(const ofFile& a, const ofFile& b) { - auto ta = fs::last_write_time(a); - auto tb = fs::last_write_time(b); - return ta < tb; -} - //------------------------------------------------------------------------------------------------------------ void ofDirectory::sortByDate() { if (files.empty() && !myDir.empty()) { listDir(); } - ofSort(files, byDate); + std::sort(files.begin(), files.end(), [](const fs::path & a, const fs::path & b) { + return fs::last_write_time(a); < fs::last_write_time(b); + }); } //------------------------------------------------------------------------------------------------------------ @@ -1510,7 +1476,6 @@ void ofDirectory::sort(const SortMode & mode){ listDir(); } std::sort(files.begin(), files.end()); -// ofSort(files, natural); } //------------------------------------------------------------------------------------------------------------ @@ -1642,22 +1607,22 @@ bool ofDirectory::operator>=(const ofDirectory & dir) const{ } //------------------------------------------------------------------------------------------------------------ -vector::const_iterator ofDirectory::begin() const{ +vector::const_iterator ofDirectory::begin() const{ return files.begin(); } //------------------------------------------------------------------------------------------------------------ -vector::const_iterator ofDirectory::end() const{ +vector::const_iterator ofDirectory::end() const{ return files.end(); } //------------------------------------------------------------------------------------------------------------ -vector::const_reverse_iterator ofDirectory::rbegin() const{ +vector::const_reverse_iterator ofDirectory::rbegin() const{ return files.rbegin(); } //------------------------------------------------------------------------------------------------------------ -vector::const_reverse_iterator ofDirectory::rend() const{ +vector::const_reverse_iterator ofDirectory::rend() const{ return files.rend(); } diff --git a/libs/openFrameworks/utils/ofFileUtils.h b/libs/openFrameworks/utils/ofFileUtils.h index 89e0290ec78..d8de5aecfe2 100644 --- a/libs/openFrameworks/utils/ofFileUtils.h +++ b/libs/openFrameworks/utils/ofFileUtils.h @@ -1017,7 +1017,7 @@ class ofDirectory { std::size_t listDir(); /// \returns the current path - std::string getOriginalDirectory() const; + of::filesystem::path getOriginalDirectory() const; /// Get the filename at a given position in the directory contents /// list, ie. "duck.jpg". @@ -1028,7 +1028,7 @@ class ofDirectory { /// listed directory contents. /// \param position array index in the directory contents list /// \returns file or directory name - std::string getName(std::size_t position) const; + of::filesystem::path getName(std::size_t position) const; /// Get the full path of the file or directory at a given position in /// the directory contents list. @@ -1039,7 +1039,7 @@ class ofDirectory { /// listed directory contents. /// \param position array index in the directory contents list /// \returns file or directory name including the current path - std::string getPath(std::size_t position) const; + of::filesystem::path getPath(std::size_t position) const; /// Open an ofFile instance using the path a given position in the /// directory contents list. From 5823beb3ec47cd8d7dfdc831369b6de9c9188464 Mon Sep 17 00:00:00 2001 From: Dimitre Date: Fri, 13 Sep 2024 14:02:24 -0300 Subject: [PATCH 5/5] ideas, changes --- libs/openFrameworks/utils/ofFileUtils.cpp | 2 +- libs/openFrameworks/utils/ofFileUtils.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/openFrameworks/utils/ofFileUtils.cpp b/libs/openFrameworks/utils/ofFileUtils.cpp index 5f5f41e2c45..3110c77f84c 100644 --- a/libs/openFrameworks/utils/ofFileUtils.cpp +++ b/libs/openFrameworks/utils/ofFileUtils.cpp @@ -1466,7 +1466,7 @@ void ofDirectory::sortByDate() { listDir(); } std::sort(files.begin(), files.end(), [](const fs::path & a, const fs::path & b) { - return fs::last_write_time(a); < fs::last_write_time(b); + return fs::last_write_time(a) < fs::last_write_time(b); }); } diff --git a/libs/openFrameworks/utils/ofFileUtils.h b/libs/openFrameworks/utils/ofFileUtils.h index d8de5aecfe2..7bc4a7c13d6 100644 --- a/libs/openFrameworks/utils/ofFileUtils.h +++ b/libs/openFrameworks/utils/ofFileUtils.h @@ -1194,7 +1194,7 @@ class ofDirectory { of::filesystem::path myDir; of::filesystem::path originalDirectory; std::vector extensions; - std::vector files; + std::vector files; bool showHidden; };