Forward.h 1.0 KB

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