#pragma once #include "text/token.hpp" #include "utils/globals.hpp" namespace Nimbin { struct CarriedWordNode { Text::TokenPtr word; CarriedWordNode* prev{nullptr}; cpputils::unique_ptr next; CarriedWordNode(Text::TokenPtr w) : word(std::move(w)) {} }; struct CarriedLine { cpputils::unique_ptr first; CarriedWordNode* last{nullptr}; size_t size{0}; bool empty () const; void clear (); void compact(); void push (Text::TokenPtr w); Text::TokenPtr pop_back (); Text::TokenPtr pop_front(); DynArray nodes () const; DynArray reverse_nodes() const; DynArray get_SlotPosition(const Vec3& anchor, const Vec3& right, double carry_gap); static Vec3 get_LineAnchor(const Camera& camera, double carry_dist); }; } // namespace Nimbin