MarkedValueList.h 894 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/IntrusiveList.h>
  8. #include <AK/Noncopyable.h>
  9. #include <AK/Vector.h>
  10. #include <LibJS/Forward.h>
  11. #include <LibJS/Runtime/Value.h>
  12. namespace JS {
  13. class MarkedValueList : public Vector<Value, 32> {
  14. AK_MAKE_NONCOPYABLE(MarkedValueList);
  15. public:
  16. explicit MarkedValueList(Heap&);
  17. MarkedValueList(MarkedValueList&&);
  18. ~MarkedValueList();
  19. MarkedValueList& operator=(MarkedValueList&&) = delete;
  20. Vector<Value, 32>& values() { return *this; }
  21. MarkedValueList copy() const
  22. {
  23. MarkedValueList copy { m_heap };
  24. copy.extend(*this);
  25. return copy;
  26. }
  27. private:
  28. Heap& m_heap;
  29. IntrusiveListNode<MarkedValueList> m_list_node;
  30. public:
  31. using List = IntrusiveList<&MarkedValueList::m_list_node>;
  32. };
  33. }