Route project files through prj/<name>/ instead of flat at repo root

Repo root had ~35 groups of .prj/.dat files loose alongside the build
system and source, all sharing one flat namespace. Centralize the new
prj/<name>/ convention inside AStack::loadWeights/saveWeights/
loadTrainingBatch/saveTrainingBatch and StackCreator::fromFile/toFile
(via a new AStack::projectDir() helper) -- these already have access to
the project name, so callers (poet.cpp, the GUI) need no changes at all;
they keep passing the same base directory they always did.

Filenames inside each project folder are unchanged (e.g.
prj/mnist_2/mnist_2.prj, prj/mnist_2/mnist_2.Layer.0.w.dat) -- only the
directory moves. Added Matutils::ensureDir() (mkdir -p equivalent; no
std::filesystem in C++11) since ofstream won't create directories, used
wherever a project is saved for the first time.

File migration for existing projects is a separate commit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016K8Gu7Qejd11JbdiHZqYAs
This commit is contained in:
2026-07-27 14:41:05 +02:00
co-authored by Claude Sonnet 5
parent 4cf5f15555
commit ca27e1e705
4 changed files with 48 additions and 10 deletions
+7 -4
View File
@@ -14,6 +14,7 @@
#include "StackCreator.hpp"
#include "DeepStack.hpp"
#include "RnnStack.hpp"
#include "matutils.hpp"
#include <string>
#include <cassert>
@@ -77,8 +78,8 @@ AStack* StackCreator::fromJson(Json::Value& project, LayerConstructor *pLayerCon
AStack* StackCreator::fromFile(const std::string &dir, const std::string &name, LayerConstructor *pLayerConstructor)
{
std::cout << "Importing Project " << name << std::endl;
ifstream ifs(dir + "/" + name + string(".prj"));
ifstream ifs(dir + "/prj/" + name + "/" + name + string(".prj"));
Json::Value project;
ifs >> project;
@@ -88,8 +89,10 @@ AStack* StackCreator::fromFile(const std::string &dir, const std::string &name,
bool StackCreator::toFile(AStack* pStack, const std::string& dir, const std::string& name)
{
std::cout << "Exporting Project " << name << std::endl;
ofstream ofs(dir + "/" + name + string(".prj"));
std::string pdir = dir + "/prj/" + name;
Matutils::ensureDir(pdir);
ofstream ofs(pdir + "/" + name + string(".prj"));
Json::Value project;
project["stack"]["name"] = name;
project["stack"]["type_string"] = AStack::stackTypeStrings[pStack->type()];