37struct Line { int32_t
id = -1; };
38struct Box { int32_t
id = -1; };
39struct Label { int32_t
id = -1; };
90 std::vector<Rec> recs_;
91 std::deque<int32_t> order_;
97 while ((
int)order_.size() >= cap_) {
98 int32_t old = order_.front();
100 recs_[old].alive =
false;
102 int32_t
id = (int32_t)recs_.size();
104 recs_.push_back(std::move(r));
105 order_.push_back(
id);
110 if (!
alive(
id))
return;
111 recs_[id].alive =
false;
112 order_.erase(std::find(order_.begin(), order_.end(),
id));
115 bool alive(int32_t
id)
const {
return id >= 0 &&
id < (int)recs_.size() && recs_[id].alive; }
120 int32_t
size()
const {
return (int32_t)recs_.size(); }
122 Rec&
at(int32_t
id) {
return recs_[id]; }
123 const Rec&
at(int32_t
id)
const {
return recs_[id]; }
125 const std::deque<int32_t>&
order()
const {
return order_; }
134template <
class Rec,
class Handle>
154 p1.
price, p2.
price, xloc,
false,
false,
true }) };
191 return r.y1 + (r.y2 - r.y1) / (
double)(r.x2 - r.x1) * (
double)(x - r.x1);
204 return Box{ a.
alloc(
BoxRec{ left, right, top, bottom, xloc,
true }) };
209 top_left.
price, bottom_right.
price, xloc,
true }) };
260 std::move(text),
true }) };
309template <
class... A>
inline void pf_noop(A&&...) {}
const std::deque< int32_t > & order() const
const Rec & at(int32_t id) const
bool alive(int32_t id) const
void pf_linefill_delete(DrawingArena< LinefillRec > &a, Linefill h)
void pf_line_set_xy1(DrawingArena< LineRec > &a, Line h, int64_t x, double y)
std::string pf_label_get_text(DrawingArena< LabelRec > &a, Label h)
void pf_label_delete(DrawingArena< LabelRec > &a, Label h)
void pf_line_set_xy2(DrawingArena< LineRec > &a, Line h, int64_t x, double y)
double pf_line_get_y1(DrawingArena< LineRec > &a, Line h)
void pf_box_set_bottom_right_point(DrawingArena< BoxRec > &a, Box h, ChartPoint p)
Line pf_linefill_get_line2(DrawingArena< LinefillRec > &a, Linefill h)
int64_t pf_point_x(const ChartPoint &p, XLoc xloc)
Line pf_line_copy(DrawingArena< LineRec > &a, Line h)
void pf_box_set_top(DrawingArena< BoxRec > &a, Box h, double v)
Box pf_box_new(DrawingArena< BoxRec > &a, int64_t left, double top, int64_t right, double bottom, XLoc xloc=XLoc::bar_index)
void pf_box_set_lefttop(DrawingArena< BoxRec > &a, Box h, int64_t left, double top)
void pf_label_set_point(DrawingArena< LabelRec > &a, Label h, ChartPoint p)
Box pf_box_new_pts(DrawingArena< BoxRec > &a, ChartPoint top_left, ChartPoint bottom_right, XLoc xloc=XLoc::bar_index)
void pf_box_set_right(DrawingArena< BoxRec > &a, Box h, int64_t v)
Line pf_line_new_pts(DrawingArena< LineRec > &a, ChartPoint p1, ChartPoint p2, XLoc xloc=XLoc::bar_index)
void pf_box_set_xloc(DrawingArena< BoxRec > &a, Box h, int64_t left, int64_t right, XLoc xloc)
void pf_box_set_top_left_point(DrawingArena< BoxRec > &a, Box h, ChartPoint p)
double pf_label_get_y(DrawingArena< LabelRec > &a, Label h)
Line pf_line_new(DrawingArena< LineRec > &a, int64_t x1, double y1, int64_t x2, double y2, XLoc xloc=XLoc::bar_index, bool el=false, bool er=false)
void pf_label_set_xy(DrawingArena< LabelRec > &a, Label h, int64_t x, double y)
void pf_line_set_y1(DrawingArena< LineRec > &a, Line h, double v)
Line pf_linefill_get_line1(DrawingArena< LinefillRec > &a, Linefill h)
Label pf_label_new(DrawingArena< LabelRec > &a, int64_t x, double y, std::string text, XLoc xloc=XLoc::bar_index, YLoc yloc=YLoc::price)
int64_t pf_box_get_left(DrawingArena< BoxRec > &a, Box h)
void pf_box_set_rightbottom(DrawingArena< BoxRec > &a, Box h, int64_t right, double bottom)
int64_t pf_line_get_x2(DrawingArena< LineRec > &a, Line h)
int64_t pf_line_get_x1(DrawingArena< LineRec > &a, Line h)
void pf_line_set_x2(DrawingArena< LineRec > &a, Line h, int64_t v)
double pf_box_get_bottom(DrawingArena< BoxRec > &a, Box h)
Linefill pf_linefill_new(DrawingArena< LinefillRec > &a, Line l1, Line l2)
void pf_label_set_x(DrawingArena< LabelRec > &a, Label h, int64_t v)
void pf_label_set_text(DrawingArena< LabelRec > &a, Label h, std::string text)
void pf_label_set_yloc(DrawingArena< LabelRec > &a, Label h, YLoc yloc)
bool is_na(const Line &h)
void pf_line_set_xloc(DrawingArena< LineRec > &a, Line h, int64_t x1, int64_t x2, XLoc xloc)
Rec & pf_require_live(DrawingArena< Rec > &a, Handle h)
void pf_line_set_first_point(DrawingArena< LineRec > &a, Line h, ChartPoint p)
double pf_box_get_top(DrawingArena< BoxRec > &a, Box h)
void pf_line_set_x1(DrawingArena< LineRec > &a, Line h, int64_t v)
Label pf_label_new_pt(DrawingArena< LabelRec > &a, ChartPoint point, std::string text, YLoc yloc=YLoc::price)
double pf_line_get_y2(DrawingArena< LineRec > &a, Line h)
int64_t pf_label_get_x(DrawingArena< LabelRec > &a, Label h)
void pf_box_delete(DrawingArena< BoxRec > &a, Box h)
void pf_line_set_second_point(DrawingArena< LineRec > &a, Line h, ChartPoint p)
void pf_line_delete(DrawingArena< LineRec > &a, Line h)
void pf_box_set_left(DrawingArena< BoxRec > &a, Box h, int64_t v)
int64_t pf_box_get_right(DrawingArena< BoxRec > &a, Box h)
double pf_line_get_price(DrawingArena< LineRec > &a, Line h, int64_t x)
void pf_line_set_y2(DrawingArena< LineRec > &a, Line h, double v)
void pf_label_set_y(DrawingArena< LabelRec > &a, Label h, double v)
Label pf_label_copy(DrawingArena< LabelRec > &a, Label h)
void pf_label_set_xloc(DrawingArena< LabelRec > &a, Label h, int64_t x, XLoc xloc)
void pf_box_set_bottom(DrawingArena< BoxRec > &a, Box h, double v)
Box pf_box_copy(DrawingArena< BoxRec > &a, Box h)
pine_drawing_error(const std::string &msg)