Forward.h 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * Copyright (c) 2021, Matthew Olsson <mattco@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Forward.h>
  8. #include <AK/StdLibExtras.h>
  9. namespace PDF {
  10. class Document;
  11. class Object;
  12. // Note: This macro doesn't care about PlainTextStreamObject and EncodedStreamObject because
  13. // we never need to work directly with either of them.
  14. #define ENUMERATE_OBJECT_TYPES(V) \
  15. V(StringObject, string) \
  16. V(NameObject, name) \
  17. V(ArrayObject, array) \
  18. V(DictObject, dict) \
  19. V(StreamObject, stream) \
  20. V(IndirectValue, indirect_value)
  21. #define FORWARD_DECL(class_name, _) class class_name;
  22. ENUMERATE_OBJECT_TYPES(FORWARD_DECL)
  23. #undef FORWARD_DECL
  24. template<typename T>
  25. concept IsObject = IsBaseOf<Object, T>;
  26. template<typename T>
  27. concept IsValuePrimitive = IsSame<T, bool> || IsSame<T, int> || IsSame<T, float>;
  28. template<typename T>
  29. concept IsValueType = IsValuePrimitive<T> || IsObject<T>;
  30. template<IsValueType T>
  31. using UnwrappedValueType = Conditional<IsObject<T>, NonnullRefPtr<T>, T>;
  32. }