Files
fn_registry/cpp/functions/infra/job_cache_sha256.cpp
T
egutierrez aca2348a20 chore: auto-commit (97 archivos)
- .claude/CLAUDE.md
- .claude/agents/fn-recopilador/SKILL.md
- .claude/rules/INDEX.md
- .claude/rules/cpp_apps.md
- bash/functions/infra/build_cpp_windows.sh
- cpp/CMakeLists.txt
- cpp/PATTERNS.md
- cpp/framework/app_base.cpp
- cpp/framework/app_base.h
- dev/issues/README.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 18:11:24 +02:00

67 lines
1.7 KiB
C++

#include "job_cache_sha256.h"
#include <cstdio>
#include <filesystem>
#include <fstream>
#include <sstream>
namespace fs = std::filesystem;
namespace fn::cache_sha256 {
namespace {
std::string subdir_for(const std::string& key) {
return key.size() >= 2 ? key.substr(0, 2) : key;
}
} // namespace
std::string path_for(const std::string& root,
const std::string& key,
const std::string& suffix) {
fs::path p = fs::path(root) / subdir_for(key) / (key + suffix);
return p.string();
}
bool ensure_dir(const std::string& root, const std::string& key) {
std::error_code ec;
fs::path dir = fs::path(root) / subdir_for(key);
fs::create_directories(dir, ec);
return !ec;
}
bool read(const std::string& root,
const std::string& key,
const std::string& suffix,
std::string* out) {
if (!out) return false;
std::ifstream f(path_for(root, key, suffix), std::ios::binary);
if (!f.is_open()) return false;
std::ostringstream ss;
ss << f.rdbuf();
*out = ss.str();
return f.good() || f.eof();
}
bool write(const std::string& root,
const std::string& key,
const std::string& suffix,
const std::string& bytes) {
if (!ensure_dir(root, key)) return false;
std::ofstream f(path_for(root, key, suffix),
std::ios::binary | std::ios::trunc);
if (!f.is_open()) return false;
f.write(bytes.data(), (std::streamsize)bytes.size());
return f.good();
}
bool exists(const std::string& root,
const std::string& key,
const std::string& suffix) {
std::error_code ec;
return fs::exists(path_for(root, key, suffix), ec) && !ec;
}
} // namespace fn::cache_sha256