Value.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  2. * Copyright (c) 2021, Matthew Olsson <mattco@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <LibPDF/Object.h>
  7. #include <LibPDF/Value.h>
  8. namespace PDF {
  9. Value::~Value()
  10. {
  11. if (is_object())
  12. m_as_object->unref();
  13. }
  14. Value& Value::operator=(Value const& other)
  15. {
  16. m_type = other.m_type;
  17. switch (m_type) {
  18. case Type::Empty:
  19. case Type::Null:
  20. break;
  21. case Type::Bool:
  22. m_as_bool = other.m_as_bool;
  23. break;
  24. case Type::Int:
  25. m_as_int = other.m_as_int;
  26. break;
  27. case Type::Float:
  28. m_as_float = other.m_as_float;
  29. break;
  30. case Type::Ref:
  31. m_as_ref = other.m_as_ref;
  32. break;
  33. case Type::Object:
  34. m_as_object = other.m_as_object;
  35. if (m_as_object)
  36. m_as_object->ref();
  37. break;
  38. }
  39. return *this;
  40. }
  41. String Value::to_string(int indent) const
  42. {
  43. switch (m_type) {
  44. case Type::Empty:
  45. return "<empty>";
  46. case Type::Null:
  47. return "null";
  48. case Type::Bool:
  49. return as_bool() ? "true" : "false";
  50. case Type::Int:
  51. return String::number(as_int());
  52. case Type::Float:
  53. return String::number(as_float());
  54. case Type::Ref:
  55. return String::formatted("{} {} R", as_ref_index(), as_ref_generation_index());
  56. case Type::Object:
  57. return as_object()->to_string(indent);
  58. }
  59. VERIFY_NOT_REACHED();
  60. }
  61. }