mirror of
https://github.com/RGBCube/serenity
synced 2025-05-15 20:14:58 +00:00
44 lines
1.1 KiB
C++
44 lines
1.1 KiB
C++
/*
|
|
* Copyright (c) 2021, Matthew Olsson <mattco@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Forward.h>
|
|
#include <AK/StdLibExtras.h>
|
|
|
|
namespace PDF {
|
|
|
|
class Document;
|
|
class Object;
|
|
|
|
// Note: This macro doesn't care about PlainTextStreamObject and EncodedStreamObject because
|
|
// we never need to work directly with either of them.
|
|
|
|
#define ENUMERATE_OBJECT_TYPES(V) \
|
|
V(StringObject, string) \
|
|
V(NameObject, name) \
|
|
V(ArrayObject, array) \
|
|
V(DictObject, dict) \
|
|
V(StreamObject, stream) \
|
|
V(IndirectValue, indirect_value)
|
|
|
|
#define FORWARD_DECL(class_name, _) class class_name;
|
|
ENUMERATE_OBJECT_TYPES(FORWARD_DECL)
|
|
#undef FORWARD_DECL
|
|
|
|
template<typename T>
|
|
concept IsObject = IsBaseOf<Object, T>;
|
|
|
|
template<typename T>
|
|
concept IsValuePrimitive = IsSame<T, bool> || IsSame<T, int> || IsSame<T, float>;
|
|
|
|
template<typename T>
|
|
concept IsValueType = IsValuePrimitive<T> || IsObject<T>;
|
|
|
|
template<IsValueType T>
|
|
using UnwrappedValueType = Conditional<IsObject<T>, NonnullRefPtr<T>, T>;
|
|
|
|
}
|