Skip to content

src/crdt/crdt_callback_manager.hpp

CRDT callback manager header for when an element gets added/removed. More...

Namespaces

Name
sgns
sgns::crdt

Classes

Name
class sgns::crdt::CRDTCallbackManager

Detailed Description

CRDT callback manager header for when an element gets added/removed.

Date: 2025-09-05 Henrique A. Klein ([email protected])

Source code

#pragma once

#include <functional>
#include <string>
#include <unordered_map>
#include <shared_mutex>

#include "base/buffer.hpp"
#include "base/logger.hpp"

namespace sgns::crdt
{

    class CRDTCallbackManager
    {
    public:
        using NewDataPair             = std::pair<std::string, base::Buffer>;
        using NewDataCallback         = std::function<void( NewDataPair new_data, std::string cid )>;
        using NewDataCallbackRegistry = std::unordered_map<std::string, NewDataCallback>;

        using DeletedDataCallback         = std::function<void( std::string deleted_key, std::string cid )>;
        using DeletedDataCallbackRegistry = std::unordered_map<std::string, DeletedDataCallback>;

        explicit CRDTCallbackManager();
        ~CRDTCallbackManager();
        bool RegisterNewDataCallback( const std::string &pattern, NewDataCallback callback );
        bool RegisterDeletedDataCallback( const std::string &pattern, DeletedDataCallback callback );
        void UnregisterNewDataCallback( const std::string &pattern );
        void UnregisterDeletedDataCallback( const std::string &pattern );

        void PutDataCallback( const std::string &key, const base::Buffer &value, const std::string &cid );

        void DeleteDataCallback( const std::string &deleted_key, const std::string &cid );

    private:
        std::shared_mutex new_data_callback_registry_mutex_; 
        NewDataCallbackRegistry new_data_callback_registry_; 
        std::shared_mutex
            deleted_data_callback_registry_mutex_; 
        DeletedDataCallbackRegistry deleted_data_callback_registry_; 

        base::Logger logger_ = base::createLogger( "CRDTCallbackManager" ); 
    };

}

Updated on 2026-03-04 at 13:10:44 -0800