SVCS - Русская документация
Загрузка...
Поиск...
Не найдено
Класс svcs::core::VcsObjectabstract

Абстрактный базовый класс, представляющий любой сохраняемый, адресуемый объект в СКВ. Подробнее...

#include <VcsObject.hxx>

Граф наследования:svcs::core::VcsObject:
svcs::core::Blob svcs::core::Commit svcs::core::TestableObject svcs::core::Tree

Открытые члены

 VcsObject ()=default
 Конструктор по умолчанию. Требуется для производных классов.
 VcsObject (const VcsObject &other)=default
 Конструктор копирования. Требуется для производных классов для корректного копирования hash_id.
virtual ~VcsObject ()=default
 Виртуальный деструктор.
virtual std::string serialize () const =0
 Чисто виртуальный метод для сериализации основных данных объекта.
virtual std::string getType () const =0
 Чисто виртуальный метод для получения типа объекта СКВ.
std::string getHashId () const
 Возвращает уникальный хеш-идентификатор объекта.

Открытые статические члены

static std::string calculateHash (const std::string &content)
 Вычисляет SHA-256 хеш для заданного канонического содержимого.

Защищенные члены

void computeHash (const std::string &content)
 Вычисляет криптографический хеш-идентификатор для содержимого объекта.

Защищенные данные

std::string hash_id
 Уникальный криптографический хеш-идентификатор (например, SHA-256) для этого объекта.

Подробное описание

Абстрактный базовый класс, представляющий любой сохраняемый, адресуемый объект в СКВ.

VcsObject обеспечивает обязательное наличие хеш-идентификатора, логики сериализации и идентификации типа для всех производных классов. Он служит основной доменной сущностью для базы данных объектов.

Конструктор(ы)

◆ VcsObject()

svcs::core::VcsObject::VcsObject ( const VcsObject & other)
default

Конструктор копирования. Требуется для производных классов для корректного копирования hash_id.

Аргументы
otherОбъект VcsObject для копирования.

◆ ~VcsObject()

virtual svcs::core::VcsObject::~VcsObject ( )
virtualdefault

Виртуальный деструктор.

Обеспечивает правильную очистку при удалении производных объектов через указатель на базовый класс.

Методы

◆ calculateHash()

std::string svcs::core::VcsObject::calculateHash ( const std::string & content)
static

Вычисляет SHA-256 хеш для заданного канонического содержимого.

Аргументы
contentСодержимое объекта Git-формата (header + raw_data).
Возвращает
std::string Вычисленный 64-символьный хеш.

◆ computeHash()

void svcs::core::VcsObject::computeHash ( const std::string & content)
protected

Вычисляет криптографический хеш-идентификатор для содержимого объекта.

Этот метод должен добавлять тип объекта и длину содержимого (в стиле Git) перед хешированием полного содержимого и установкой внутреннего hash_id.

Аргументы
contentСериализованные строковые данные объекта (обычно возвращаемые serialize()).

◆ getHashId()

std::string svcs::core::VcsObject::getHashId ( ) const
nodiscard

Возвращает уникальный хеш-идентификатор объекта.

Возвращает
std::string Криптографический хеш-идентификатор.

◆ getType()

virtual std::string svcs::core::VcsObject::getType ( ) const
nodiscardpure virtual

Чисто виртуальный метод для получения типа объекта СКВ.

Это критически важно для хранения объектов и их восстановления (например, "commit", "blob", "tree").

Возвращает
std::string Идентификатор типа объекта.

Замещается в svcs::core::Blob, svcs::core::Commit, svcs::core::TestableObject и svcs::core::Tree.

◆ serialize()

virtual std::string svcs::core::VcsObject::serialize ( ) const
nodiscardpure virtual

Чисто виртуальный метод для сериализации основных данных объекта.

Возвращаемое строковое содержимое будет хешировано и сохранено в базе данных.

Возвращает
std::string Стандартизированные, сериализованные данные объекта.

Замещается в svcs::core::Blob, svcs::core::Commit, svcs::core::TestableObject и svcs::core::Tree.

Данные класса

◆ hash_id

std::string svcs::core::VcsObject::hash_id
protected

Уникальный криптографический хеш-идентификатор (например, SHA-256) для этого объекта.

Защищенный, чтобы разрешить внутреннюю установку через computeHash(), но предотвратить внешнее изменение.


Объявления и описания членов классов находятся в файлах: