/* * Copyright (c) 2026, Aliaksandr Kalenik * * SPDX-License-Identifier: BSD-2-Clause */ #include namespace Compositor { template static Value lookup_or_default(HashMap const& map, Web::WebGL::WebGLObjectId id) { return map.get(id).value_or(Value {}); } template static Value take_or_default(HashMap& map, Web::WebGL::WebGLObjectId id) { return map.take(id).value_or(Value {}); } template static ErrorOr add_unique(HashMap& map, Web::WebGL::WebGLObjectId id, Value value) { if (id == 0) return Error::from_string_literal("WebGL object id 0 is reserved"); if (map.contains(id)) return Error::from_string_literal("WebGL object id is already in use"); map.set(id, value); return {}; } GLuint WebGLObjectMap::lookup(Web::WebGL::WebGLObjectId id) const { return lookup_or_default(m_objects, id); } GLuint WebGLObjectMap::take(Web::WebGL::WebGLObjectId id) { return take_or_default(m_objects, id); } ErrorOr WebGLObjectMap::add(Web::WebGL::WebGLObjectId id, GLuint name) { return add_unique(m_objects, id, name); } GLsync WebGLObjectMap::lookup_sync(Web::WebGL::WebGLObjectId id) const { return lookup_or_default(m_syncs, id); } GLsync WebGLObjectMap::take_sync(Web::WebGL::WebGLObjectId id) { return take_or_default(m_syncs, id); } ErrorOr WebGLObjectMap::add_sync(Web::WebGL::WebGLObjectId id, GLsync sync) { return add_unique(m_syncs, id, sync); } }