tweaking pointers

This commit is contained in:
Andy Pack 2023-06-17 10:18:18 +01:00
parent 85941393bf
commit 560b613ca5
Signed by: sarsoo
GPG Key ID: A55BA3536A5E0ED7
4 changed files with 32 additions and 14 deletions

View File

@ -2,8 +2,8 @@
namespace kc { namespace kc {
FileContext::FileContext(kc::FileEntry entry) FileContext::FileContext(std::shared_ptr<kc::FileEntry> entry)
: file_entry(std::make_shared<kc::FileEntry>(entry)) : file_entry(entry)
{ {
} }
@ -33,7 +33,7 @@ void FileContext::parse()
std::smatch image_match; std::smatch image_match;
while(std::regex_search(file_content, image_match, image_regex)) { while(std::regex_search(file_content, image_match, image_regex)) {
images.push_back(image_match.str()); images.push_back(kc::Link(image_match.str()));
file_content = image_match.suffix(); file_content = image_match.suffix();
} }

View File

@ -13,7 +13,7 @@ namespace kc {
class FileContext { class FileContext {
public: public:
FileContext(kc::FileEntry entry); FileContext(std::shared_ptr<kc::FileEntry> entry);
std::shared_ptr<kc::FileEntry> file_entry; std::shared_ptr<kc::FileEntry> file_entry;
std::vector<kc::Link> links; std::vector<kc::Link> links;

View File

@ -1,20 +1,25 @@
#include "FileContextCache.hpp" #include "FileContextCache.hpp"
#include <algorithm>
#include <execution>
#include "../fs/fs.hpp" #include "../fs/fs.hpp"
#include "../logging.hpp" #include "../logging.hpp"
namespace kc { namespace kc {
void FileContextCache::load(std::string root_path) void FileContextCache::load(const std::string root_path)
{ {
BOOST_LOG_TRIVIAL(trace) << "Beginning cache load"; BOOST_LOG_TRIVIAL(trace) << "Beginning cache load";
auto entries = kc::walk_dir(root_path); auto entries = kc::walk_dir(root_path);
this->root_path.assign(root_path);
for (auto entry : entries) for (auto entry : entries)
{ {
if (entry.relative_path.extension() == ".md") if (entry->relative_path.extension() == ".md")
{ {
entry.load_content(); entry->load_content();
} }
file_contexts.push_back(std::make_shared<kc::FileContext>(entry)); file_contexts.push_back(std::make_shared<kc::FileContext>(entry));
@ -26,8 +31,14 @@ void FileContextCache::load(std::string root_path)
void FileContextCache::parse_all() void FileContextCache::parse_all()
{ {
tag_map.clear(); tag_map.clear();
for (auto context: file_contexts)
{ #if __APPLE__
std::for_each(file_contexts.begin(), file_contexts.end(), [this](std::shared_ptr<kc::FileContext> &context)
#else
std::for_each(std::execution::par_unseq, file_contexts.begin(), file_contexts.end(), [this](std::shared_ptr<kc::FileContext> &context)
#endif
{
if (context->file_entry->relative_path.extension() == ".md") if (context->file_entry->relative_path.extension() == ".md")
{ {
context->parse(); context->parse();
@ -40,7 +51,7 @@ void FileContextCache::parse_all()
} }
} }
} }
} });
} }
void FileContextCache::clear() void FileContextCache::clear()
@ -49,14 +60,19 @@ void FileContextCache::clear()
file_contexts.shrink_to_fit(); file_contexts.shrink_to_fit();
} }
size_t FileContextCache::size() size_t FileContextCache::size() const
{ {
return file_contexts.size(); return file_contexts.size();
} }
std::vector<std::shared_ptr<kc::FileContext>> FileContextCache::get() std::vector<std::shared_ptr<kc::FileContext>> FileContextCache::get() const
{ {
return file_contexts; return file_contexts;
} }
std::string FileContextCache::get_root_path() const
{
return root_path;
}
} }

View File

@ -12,14 +12,16 @@ class FileContextCache {
public: public:
void load(std::string root_path); void load(std::string root_path);
void clear(); void clear();
size_t size(); size_t size() const;
std::vector<std::shared_ptr<kc::FileContext>> get(); std::vector<std::shared_ptr<kc::FileContext>> get() const;
void parse_all(); void parse_all();
std::string get_root_path() const;
std::unordered_map<std::string, std::vector<std::shared_ptr<kc::FileEntry>>> tag_map; std::unordered_map<std::string, std::vector<std::shared_ptr<kc::FileEntry>>> tag_map;
private: private:
std::vector<std::shared_ptr<kc::FileContext>> file_contexts; std::vector<std::shared_ptr<kc::FileContext>> file_contexts;
std::string root_path;
}; };
} }