SVCS - Русская документация
Загрузка...
Поиск...
Не найдено
Tree.hxx
См. документацию.
1
17#pragma once
18
19#include "VcsObject.hxx"
20#include <optional>
21#include <string>
22#include <vector>
23
31 * @russian
32 * @namespace svcs::core
33 * @brief Основные структуры данных СКВ и модель объектов.
34 * @details Содержит фундаментальные типы объектов СКВ, такие как Blob, Tree, Commit,
35 * которые формируют строительные блоки системы контроля версий.
36 */
37namespace svcs::core {
38
50struct TreeEntry {
58 std::string mode;
59
60
67 std::string name;
68
74 * @brief Хеш-идентификатор (SHA-256) ссылаемого объекта (Blob или Tree).
75 */
76 std::string hash_id;
77
85 std::string type;
86
100 bool operator<(const TreeEntry& other) const;
101};
102
116TreeEntry createEntry(std::string name, std::string hash_id);
117
129class Tree : public VcsObject {
130private:
138 std::vector<TreeEntry> entries;
139
140public:
152 explicit Tree(std::vector<TreeEntry> entries);
153
154 // VcsObject overrides
155
166 [[nodiscard]] std::string getType() const override;
167
180 [[nodiscard]] std::string serialize() const override;
181
193 static Tree deserialize(const std::string& raw_content);
194
206 void addEntry(const TreeEntry& entry);
207
219 bool removeEntry(const std::string& name);
220
232 [[nodiscard]] std::optional<TreeEntry> findEntry(const std::string& name) const;
233
243 [[nodiscard]] const std::vector<TreeEntry>& getEntries() const;
244};
245
246}
Определение абстрактного базового класса для всех объектов системы контроля версий.
Представляет состояние директории в СКВ, реализуя контракт VcsObject.
Определения Tree.hxx:74
void addEntry(const TreeEntry &entry)
Добавляет новую запись в Tree или обновляет существующую запись, если имя совпадает.
Определения Tree.cxx:106
Tree(std::vector< TreeEntry > entries)
Конструктор для объекта Tree.
Определения Tree.cxx:28
const std::vector< TreeEntry > & getEntries() const
Возвращает список записей, хранящихся в Tree.
Определения Tree.cxx:145
bool removeEntry(const std::string &name)
Удаляет запись (файл или поддиректорию) из Tree по имени.
Определения Tree.cxx:118
std::string getType() const override
Возвращает тип объекта СКВ.
Определения Tree.cxx:129
std::optional< TreeEntry > findEntry(const std::string &name) const
Ищет конкретную запись внутри Tree по имени.
Определения Tree.cxx:133
static Tree deserialize(const std::string &raw_content)
Создает объект Tree из сериализованной строки, прочитанной из базы данных объектов.
Определения Tree.cxx:60
std::string serialize() const override
Сериализует содержимое Tree в стандартизированный строковый формат для хеширования и хранения.
Определения Tree.cxx:44
Абстрактный базовый класс, представляющий любой сохраняемый, адресуемый объект в СКВ.
Определения VcsObject.hxx:30
std::string hash_id
Уникальный криптографический хеш-идентификатор (например, SHA-256) для этого объекта.
Определения VcsObject.hxx:36
Основные структуры данных СКВ и модель объектов.
TreeEntry createEntry(std::string name, std::string hash_id)
Создание записи дерева.
Определения Tree.cxx:24
Представляет отдельный элемент (файл или поддиректорию) внутри объекта Tree.
Определения Tree.hxx:31
std::string type
Тип ссылаемого объекта ("blob" или "tree").
Определения Tree.hxx:50
std::string name
Имя файла или поддиректории.
Определения Tree.hxx:40
std::string mode
Режим файла (права доступа) и идентификатор типа (например, "100644" для blob, "040000" для tree).
Определения Tree.hxx:35
bool operator<(const TreeEntry &other) const
Оператор сравнения, необходимый для сортировки.
Определения Tree.cxx:20