28 #ifndef AGG_SCANLINE_BIN_INCLUDED 29 #define AGG_SCANLINE_BIN_INCLUDED 31 #include "agg_array.h" 46 typedef int32 coord_type;
65 void reset(
int min_x,
int max_x)
67 unsigned max_len = max_x - min_x + 3;
68 if(max_len > m_spans.size())
70 m_spans.resize(max_len);
72 m_last_x = 0x7FFFFFF0;
73 m_cur_span = &m_spans[0];
77 void add_cell(
int x,
unsigned)
86 m_cur_span->x = (int16)x;
93 void add_span(
int x,
unsigned len,
unsigned)
97 m_cur_span->len = (int16)(m_cur_span->len + len);
102 m_cur_span->x = (int16)x;
103 m_cur_span->len = (int16)len;
105 m_last_x = x + len - 1;
109 void add_cells(
int x,
unsigned len,
const void*)
123 m_last_x = 0x7FFFFFF0;
124 m_cur_span = &m_spans[0];
128 int y()
const {
return m_y; }
129 unsigned num_spans()
const {
return unsigned(m_cur_span - &m_spans[0]); }
130 const_iterator begin()
const {
return &m_spans[1]; }
151 typedef int32 coord_type;
157 span(coord_type x_, coord_type len_) : x(x_), len(len_) {}
174 const span& operator*()
const {
return m_spans[m_span_idx]; }
175 const span* operator->()
const {
return &m_spans[m_span_idx]; }
177 void operator ++ () { ++m_span_idx; }
180 const span_array_type& m_spans;
191 m_last_x = 0x7FFFFFF0;
192 m_spans.remove_all();
196 void add_cell(
int x,
unsigned)
200 m_spans.last().len++;
204 m_spans.add(
span(coord_type(x), 1));
210 void add_span(
int x,
unsigned len,
unsigned)
214 m_spans.last().len += coord_type(len);
218 m_spans.add(
span(coord_type(x), coord_type(len)));
220 m_last_x = x + len - 1;
224 void add_cells(
int x,
unsigned len,
const void*)
238 m_last_x = 0x7FFFFFF0;
239 m_spans.remove_all();
243 int y()
const {
return m_y; }
244 unsigned num_spans()
const {
return m_spans.size(); }
254 span_array_type m_spans;