Program Listing for File PDJE_RAIL.cpp

Return to documentation for file (include\judge\PDJE_RAIL.cpp)

#include "PDJE_RAIL.hpp"

namespace PDJE_JUDGE {
using namespace RAIL_KEY;

void
RAIL_DB::Add(const RAIL_KEY::KB_MOUSE &key,
             const PDJE_Dev_Type      &type,
             const uint64_t           &id,
             const int64_t             __offset)
{
    if (kb_mouse_raildata.contains(key)) {
        return;
    }
    kb_mouse_raildata[key]  = id;
    offset[key.Device_Name] = __offset;
    META tempmeta;
    tempmeta.key  = key;
    tempmeta.type = type;
    meta[id].push_back(tempmeta);
}
void
RAIL_DB::Add(const RAIL_KEY::MIDI &key,
             const uint64_t       &id,
             const int64_t         __offset)
{
    if (midi_raildata.contains(key)) {
        return;
    }
    midi_raildata[key]    = id;
    offset[key.port_name] = __offset;
    META tempmeta;
    tempmeta.key  = key;
    tempmeta.type = key.type;
    meta[id].push_back(tempmeta);
}

void
RAIL_DB::Delete(const RAIL_KEY::KB_MOUSE &key)
{
    if (kb_mouse_raildata.contains(key)) {
        auto id = kb_mouse_raildata[key];
        kb_mouse_raildata.erase(key);
        offset.erase(key.Device_Name);
        if (meta.contains(id)) {
            auto &vec = meta[id];
            for (auto it = vec.begin(); it != vec.end(); ++it) {
                if (auto metakey = std::get_if<RAIL_KEY::KB_MOUSE>(&it->key)) {
                    if (*metakey == key) {
                        vec.erase(it);
                        break;
                    }
                }
            }
        }
    }
}

void
RAIL_DB::Delete(const RAIL_KEY::MIDI &key)
{
    if (midi_raildata.contains(key)) {
        auto id = midi_raildata[key];
        midi_raildata.erase(key);
        offset.erase(key.port_name);
        if (meta.contains(id)) {
            auto &vec = meta[id];
            for (auto it = vec.begin(); it != vec.end(); ++it) {
                if (auto metakey = std::get_if<RAIL_KEY::MIDI>(&it->key)) {
                    if (*metakey == key) {
                        vec.erase(it);
                        break;
                    }
                }
            }
        }
    }
}

bool
RAIL_DB::Empty()
{
    return kb_mouse_raildata.empty() && midi_raildata.empty();
}

void
RAIL_DB::Clear()
{
    kb_mouse_raildata.clear();
    midi_raildata.clear();
    offset.clear();
    meta.clear();
}

std::optional<uint64_t>
RAIL_DB::GetID(const RAIL_KEY::KB_MOUSE &key)
{
    auto it = kb_mouse_raildata.find(key);
    if (it == kb_mouse_raildata.end()) {
        return std::nullopt;
    } else {
        return it->second;
    }
}

std::optional<uint64_t>
RAIL_DB::GetID(const RAIL_KEY::MIDI &key)
{
    auto it = midi_raildata.find(key);
    if (it == midi_raildata.end()) {
        return std::nullopt;
    } else {
        return it->second;
    }
}

std::optional<std::vector<RAIL_KEY::META>>
RAIL_DB::GetMETA(const uint64_t id)
{
    auto it = meta.find(id);
    if (it == meta.end()) {
        return std::nullopt;
    } else {
        return it->second;
    }
}

}; // namespace PDJE_JUDGE