rvm  1.11
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
table.cc
Go to the documentation of this file.
1 #include "config.h"
2 
3 #include <iostream>
4 #include <algorithm>
5 
6 #include "asserts.h"
7 #include "types.h"
8 #include "error.h"
9 #include "estring.h"
10 #include "table.h"
11 
12 //----------------------------------------------------------------------------
13 
15 
17 {
18  x = npos;
19  y = npos;
20  repeat = false;
21 }
22 
24 {
25  assign(a_class);
26 }
27 
29 {
30 }
31 
33 {
34 }
35 
37 {
38  return(0);
39 }
40 
42 {
43  return(0);
44 }
45 
47  std::ostream& a_out,
48  size_type a_line,
49  size_type a_width
50  ) const
51 {
52 }
53 
55 {
56  assign(a_class);
57 
58  return(*this);
59 }
60 
61 bool operator==(const table_cell_base& a_1, const table_cell_base& a_2)
62 {
63  bool value;
64 
65  value = (&a_1 == &a_2);
66 
67  return(value);
68 }
69 
70 //----------------------------------------------------------------------------
71 
73 {
74 }
75 
77 {
78  assign(a_class);
79 }
80 
82 {
83  assign(a_class);
84 }
85 
87 {
88 }
89 
91 {
92  assign(a_class.m_value);
93  x = a_class.x;
94  y = a_class.y;
95  repeat = a_class.repeat;
96 }
97 
98 void table_cell_estring::assign(const estring& a_class)
99 {
100  m_value = a_class;
101 }
102 
104 {
105  return(1);
106 }
107 
109 {
110  size_type value;
111 
112  value = m_value.size();
113 
114  return(value);
115 }
116 
118  std::ostream& a_out,
119  size_type a_line,
120  size_type a_width
121  ) const
122 {
123  estring str;
124 
125  if (repeat) {
126  a_line = 0;
127  }
128  if (a_line == 0) {
129  str = m_value;
130  str.width(a_width);
131  a_out << str.fmt_str();
132  a_out.flush();
133  }
134  else {
135  str = "";
136  str.width(a_width);
137  a_out << str.fmt_str();
138  a_out.flush();
139  }
140 }
141 
144 {
145  assign(a_class);
146 
147  return(*this);
148 }
149 
152 {
153  assign(a_class);
154 
155  return(*this);
156 }
157 
158 //----------------------------------------------------------------------------
159 
161 {
162  m_value = new table;
163  if (m_value == 0)
164  throw(err_nomem);
165 }
166 
168 {
169  m_value = 0;
170  assign(a_class);
171 }
172 
174 {
175  m_value = 0;
176  assign(a_class);
177 }
178 
180 {
181  if (m_value != 0)
182  delete(m_value);
183 }
184 
186 {
187  ASSERT(a_class.m_value != 0);
188  assign(*a_class.m_value);
189  x = a_class.x;
190  y = a_class.y;
191  repeat = a_class.repeat;
192 }
193 
194 void table_cell_table::assign(const table& a_class)
195 {
196  if (m_value != 0) {
197  delete(m_value);
198  }
199  m_value = new table(a_class);
200 }
201 
203 {
204  size_type value;
205 
206  value = m_value->height();
207 
208  return(value);
209 }
210 
212 {
213  size_type value;
214 
215  value = m_value->width();
216 
217  return(value);
218 }
219 
221  std::ostream& a_out,
222  size_type a_line,
223  size_type a_width
224  ) const
225 {
226  if (repeat) {
227  a_line %= m_value->height();
228  }
229  if (a_line < m_value->height()) {
230  m_value->write(a_out, a_line, a_width);
231  }
232  else {
233  estring str;
234 
235  str = "";
236  str.width(a_width);
237  a_out << str.fmt_str();
238  a_out.flush();
239  }
240 }
241 
244 {
245  assign(a_class);
246 
247  return(*this);
248 }
249 
252 {
253  assign(a_class);
254 
255  return(*this);
256 }
257 
258 //----------------------------------------------------------------------------
259 
261 {
262  mf_init();
263 }
264 
265 table::table(const table::size_type a_ncols, const table::size_type a_nrows)
266 {
267  size_type cx, cy;
268 
269  mf_init();
270  for (cy = 0; cy != a_nrows; ++cy) {
271  table_row_type new_row;
272 
273  for (cx = 0; cx != a_ncols; ++cx) {
274  new_row.push_back(static_cast<table_cell_base *>(0));
275  }
276 
277  TRY_nomem(m_table.push_back(new_row));
278  }
279 }
280 
281 table::table(const table& a_class)
282 {
283  mf_init();
284  assign(a_class);
285 }
286 
288 {
289 }
290 
291 void table::resize(const size_type a_x, const size_type a_y)
292 {
293  size_type cy;
294 
295  while (m_table.size() > a_y)
296  mf_remove_row(m_table.size()-1);
297 
298  for (cy = 0; cy != m_table.size(); ++cy) {
299  while (m_table[cy].size() > a_x)
300  mf_remove_elt(m_table[cy].size()-1,cy);
301  }
302 
303  while (m_table.size() < a_y) {
304  table_row_type new_row;
305 
306  TRY_nomem(m_table.push_back(new_row));
307  }
308 
309  for (cy = 0; cy != m_table.size(); ++cy) {
310  while (m_table[cy].size() < a_x)
311  TRY_nomem(m_table[cy].push_back(static_cast<table_cell_base *>(0)));
312  }
313 }
314 
316 {
317  size_type num_cols;
318  table_row_type new_row;
319  table_type::iterator ti;
320 
321  while (a_y > m_table.size())
322  insert_row(m_table.size());
323 
324  num_cols = ncols();
325  while (new_row.size() < num_cols)
326  TRY_nomem(new_row.push_back(static_cast<table_cell_base *>(0)));
327  ti = m_table.begin();
328  ti += a_y;
329  TRY_nomem(m_table.insert(ti,new_row));
330 }
331 
333 {
334  table_type::iterator cy;
335  table_row_type::iterator cx;
336 
337  for (cy = m_table.begin(); cy != m_table.end(); ++cy) {
338  while (a_x > cy->size()) {
339  TRY_nomem(cy->push_back(static_cast<table_cell_base *>(0)));
340  }
341  cx = cy->begin();
342  cx += a_x;
343  TRY_nomem(cy->insert(cx,static_cast<table_cell_base *>(0)));
344  }
345 }
346 
347 void table::assign(const table& a_class)
348 {
349  std::list<table_cell_estring>::const_iterator ctce;
350  std::list<table_cell_table>::const_iterator ctct;
351 
352  m_table.clear();
353  m_list_estring.clear();
354  m_list_table.clear();
355 
356  resize(a_class.ncols(),a_class.nrows());
357 
358  for (
359  ctce = a_class.m_list_estring.begin();
360  ctce != a_class.m_list_estring.end();
361  ++ctce
362  ) {
363  mf_add_elt(*ctce);
364  }
365  for (
366  ctct = a_class.m_list_table.begin();
367  ctct != a_class.m_list_table.end();
368  ++ctct
369  ) {
370  mf_add_elt(*ctct);
371  }
372 }
373 
375  const size_type a_x,
376  const size_type a_y,
377  const estring& a_class
378  )
379 {
380  estring es;
381  table_cell_estring new_cell(a_class);
382 
383  if (a_y >= m_table.size()) {
384  es = "Column index out of bounds: ";
385  es += estring(a_y);
386  throw(INTERNAL_ERROR(0,es));
387  }
388  if (a_x >= m_table[a_y].size()) {
389  es = "Row index out of bounds: ";
390  es += estring(a_x);
391  throw(INTERNAL_ERROR(0,es));
392  }
393  if (m_table[a_y][a_x] != 0)
394  mf_remove_elt(a_x,a_y);
395  new_cell.x = a_x;
396  new_cell.y = a_y;
397  new_cell.repeat = m_repeat;
398  m_repeat = false;
399  mf_add_elt(new_cell);
400 }
401 
403  const size_type a_x,
404  const size_type a_y,
405  const table& a_class
406  )
407 {
408  estring es;
409  table_cell_table new_cell(a_class);
410 
411  if (a_y >= m_table.size()) {
412  es = "Column index out of bounds: ";
413  es += estring(a_y);
414  throw(INTERNAL_ERROR(0,es));
415  }
416  if (a_x >= m_table[a_y].size()) {
417  es = "Row index out of bounds: ";
418  es += estring(a_x);
419  throw(INTERNAL_ERROR(0,es));
420  }
421  if (m_table[a_y][a_x] != 0)
422  mf_remove_elt(a_x,a_y);
423 
424  new_cell.x = a_x;
425  new_cell.y = a_y;
426  new_cell.repeat = m_repeat;
427  m_repeat = false;
428  mf_add_elt(new_cell);
429 }
430 
432 {
433  estring es;
434  table_type::const_iterator cy;
435  size_type width = 0;
436 
437  if (m_table.size() == 0) {
438  return(0);
439  }
440 
441  for (cy = m_table.begin(); cy != m_table.end(); cy++) {
442  if (a_x >= cy->size()) {
443  es = "Column index out of bounds: ";
444  es += estring(a_x);
445  throw(INTERNAL_ERROR(0,es));
446  }
447  if ((*cy)[a_x] != 0)
448  width = std::max(width,(*cy)[a_x]->width());
449  }
450 
451  return(width);
452 }
453 
455 {
456  size_type cx;
457  size_type width = 0;
458 
459  if (m_table.size() == 0) {
460  return(0);
461  }
462 
463  for (cx = 0; cx != m_table.begin()->size(); ++cx) {
464  width += col_width(cx);
465  }
466 
467  return(width);
468 }
469 
471 {
472  size_type y;
473  size_type height = 0;
474 
475  for (y = 0; y != m_table.size(); ++y) {
476  height += row_height(y);
477  }
478 
479  return(height);
480 }
481 
483 {
484  estring es;
485  table_row_type::const_iterator cx;
486  size_type height = 0;
487 
488  if (m_table.size() == 0) {
489  return(0);
490  }
491  if (a_y >= m_table.size()) {
492  es = "Row index out of bounds: ";
493  es += estring(a_y);
494  throw(INTERNAL_ERROR(0,es));
495  }
496  for (cx = m_table[a_y].begin(); cx != m_table[a_y].end(); ++cx) {
497  if (*cx != 0)
498  height = std::max(height, (*cx)->height());
499  }
500 
501  return(height);
502 }
503 
505 {
506  table_type::const_iterator cy;
507  table_row_type::const_iterator cx;
508  size_type height = 0;
509 
510  for (cy = m_table.begin(); cy != m_table.end(); ++cy) {
511  size_type row_height = 0;
512 
513  for (cx = cy->begin(); cx != cy->end(); ++cx) {
514  if (*cx != 0)
515  row_height = std::max(row_height, (*cx)->height());
516  }
517 
518  height += row_height;
519  }
520 
521  return(height);
522 }
523 
525 {
526  table_type::const_iterator cy;
527  size_type x, max_x = 0;
528  size_type width = 0;
529 
530  for (cy = m_table.begin(); cy != m_table.end(); ++cy) {
531  max_x = std::max(max_x, cy->size());
532  }
533 
534  for (x = 0; x < max_x; ++x) {
535  size_type col_width = 0;
536 
537  for (cy = m_table.begin(); cy != m_table.end(); ++cy) {
538  if ((x < cy->size()) && ((*cy)[x] != 0)) {
539  col_width = std::max(col_width, (*cy)[x]->width());
540  }
541  }
542 
543  width += col_width;
544  }
545 
546  return(width);
547 }
548 
550 {
551  table_type::const_iterator cy;
552  size_type cols = 0;
553 
554  for (cy = m_table.begin(); cy != m_table.end(); ++cy) {
555  cols = std::max(cols,cy->size());
556  }
557 
558  return(cols);
559 }
560 
562 {
563  size_type value;
564 
565  value = m_table.size();
566 
567  return(value);
568 }
569 
571  std::ostream& a_out,
572  size_type a_line,
573  size_type a_width
574  ) const
575 {
576  size_type row = 0;
578  size_type col = 0;
580 
581  if (m_table.size() == 0)
582  return;
583 
584  while ((m_table.size() > row) && (a_line >= (height = row_height(row))))
585  {
586  a_line -= height;
587  ++row;
588  }
589  for (col = 0; col != m_table[row].size(); ++col) {
590  width = std::min(col_width(col), a_width);
591  if (m_table[row][col] != 0)
592  m_table[row][col]->write(a_out,a_line,width);
593  else {
594  estring estr;
595 
596  estr = "";
597  estr.width(width);
598  a_out << estr.fmt_str();
599  a_out.flush();
600  }
601  a_width -= width;
602  }
603 
604  if (a_width > 0) {
605  estring estr;
606 
607  estr = "";
608  estr.width(a_width);
609  a_out << estr.fmt_str();
610  a_out.flush();
611  }
612 }
613 
614 table& table::operator=(const table& a_class)
615 {
616  assign(a_class);
617 
618  return(*this);
619 }
620 
622 {
623  return(m_cursor_x);
624 }
625 
627 {
628  return(m_cursor_y);
629 }
630 
632 {
633  estring es;
634 
635  if (a_y >= m_table.size()) {
636  es = "Column index out of bounds: ";
637  es += estring(a_y);
638  throw(ERROR(0,es));
639  }
640  if (a_x >= m_table[a_y].size()) {
641  es = "Row index out of bounds: ";
642  es += estring(a_x);
643  throw(ERROR(0,es));
644  }
645 
646  m_cursor_x = a_x;
647  m_cursor_y = a_y;
648 }
649 
650 bool table::eot(void) const
651 {
652  if ((m_cursor_x == ncols()-1) && (m_cursor_y == nrows()-1)) {
653  return(true);
654  }
655 
656  return(false);
657 }
658 
659 void table::repeat(const bool a_bool)
660 {
661  m_repeat = a_bool;
662 }
663 
664 void table::mf_init(void)
665 {
666  m_cursor_x = 0;
667  m_cursor_y = 0;
668  m_repeat = false;
669 }
670 
672 {
673  estring es;
674 
675  if (a_class.y >= m_table.size()) {
676  es = "Column index out of bounds: ";
677  es += estring(a_class.y);
678  throw(INTERNAL_ERROR(0,es));
679  }
680  if (a_class.x >= m_table[a_class.y].size()) {
681  es = "Row index out of bounds: ";
682  es += estring(a_class.x);
683  throw(INTERNAL_ERROR(0,es));
684  }
685  TRY_nomem(m_list_estring.push_back(a_class));
686  m_table[a_class.y][a_class.x] = &(*m_list_estring.rbegin());
687 }
688 
690 {
691  estring es;
692 
693  if (a_class.y >= m_table.size()) {
694  es = "Column index out of bounds: ";
695  es += estring(a_class.y);
696  throw(INTERNAL_ERROR(0,es));
697  }
698  if (a_class.x >= m_table[a_class.y].size()) {
699  es = "Row index out of bounds: ";
700  es += estring(a_class.x);
701  throw(INTERNAL_ERROR(0,es));
702  }
703  TRY_nomem(m_list_table.push_back(a_class));
704  m_table[a_class.y][a_class.x] = &(*m_list_table.rbegin());
705 }
706 
708 {
709  estring es;
710 
711  if (a_class.y >= m_table.size()) {
712  es = "Column index out of bounds: ";
713  es += estring(a_class.y);
714  throw(INTERNAL_ERROR(0,es));
715  }
716  if (a_class.x >= m_table[a_class.y].size()) {
717  es = "Row index out of bounds: ";
718  es += estring(a_class.x);
719  throw(INTERNAL_ERROR(0,es));
720  }
721  m_table[a_class.y][a_class.x] = static_cast<table_cell_base *>(0);
722  m_list_estring.erase(
723  find(m_list_estring.begin(), m_list_estring.end(), a_class)
724  );
725 }
726 
728 {
729  estring es;
730 
731  if (a_class.y >= m_table.size()) {
732  es = "Column index out of bounds: ";
733  es += estring(a_class.y);
734  throw(INTERNAL_ERROR(0,es));
735  }
736  if (a_class.x >= m_table[a_class.y].size()) {
737  es = "Row index out of bounds: ";
738  es += estring(a_class.x);
739  throw(INTERNAL_ERROR(0,es));
740  }
741  m_table[a_class.y][a_class.x] = static_cast<table_cell_base *>(0);
742  m_list_table.erase(
743  find(m_list_table.begin(), m_list_table.end(), a_class)
744  );
745 }
746 
748  table::size_type a_x,
749  table::size_type a_y
750  )
751 {
752  estring es;
753  std::list<table_cell_estring>::const_iterator ctce;
754  std::list<table_cell_table>::const_iterator ctct;
755 
756  if (a_y >= m_table.size()) {
757  es = "Column index out of bounds: ";
758  es += estring(a_y);
759  throw(INTERNAL_ERROR(0,es));
760  }
761  if (a_x >= m_table[a_y].size()) {
762  es = "Row index out of bounds: ";
763  es += estring(a_x);
764  throw(INTERNAL_ERROR(0,es));
765  }
766  if (m_table[a_y][a_x] != 0) {
767  for (ctce = m_list_estring.begin(); ctce != m_list_estring.end(); ++ctce)
768  {
769  if (*ctce == *m_table[a_y][a_x]) {
770  mf_remove_elt(*ctce);
771  return;
772  }
773  }
774  for (ctct = m_list_table.begin(); ctct != m_list_table.end(); ++ctct) {
775  if (*ctct == *m_table[a_y][a_x]) {
776  mf_remove_elt(*ctct);
777  return;
778  }
779  }
780  // This should never happen
781  ASSERT(0);
782  }
783 }
784 
786 {
787  size_type cx;
788  table_type::iterator ti;
789 
790  estring es;
791 
792  if (a_y >= m_table.size()) {
793  es = "Column index out of bounds: ";
794  es += estring(a_y);
795  throw(INTERNAL_ERROR(0,es));
796  }
797  for (cx = 0; cx < m_table[a_y].size(); ++cx) {
798  mf_remove_elt(cx,a_y);
799  }
800  ti = m_table.begin();
801  ti += a_y;
802  m_table.erase(ti);
803 }
804 
805 //----------------------------------------------------------------------------
806 
807 std::ostream& operator<<(std::ostream& a_out, table& a_class)
808 {
809  table::size_type width, height, cy;
810 
811  height = a_class.col_height();
812  width = a_class.row_width();
813 
814  for (cy = 0; cy != height; ++cy) {
815  a_class.write(a_out, cy, width);
816  a_out << std::endl;
817  a_out.flush();
818  }
819 
820  return(a_out);
821 }
822 
823 //----------------------------------------------------------------------------
824 
825 table& table_write(table& a_table, const estring& a_estr)
826 {
827  if ((a_table.ncols() == 0) && (a_table.nrows() == 0)) {
828  a_table.insert_row(0);
829  a_table.insert_col(0);
830  }
831  a_table.assign(a_table.cursor_x(), a_table.cursor_y(), a_estr);
832  if (a_table.cursor_x() == a_table.ncols()-1)
833  a_table.insert_col(a_table.ncols());
834  table_skip(a_table);
835 
836  return(a_table);
837 }
838 
839 table& table_write(table& a_table, const table& a_subtable)
840 {
841  if ((a_table.ncols() == 0) && (a_table.nrows() == 0)) {
842  a_table.insert_row(0);
843  a_table.insert_col(0);
844  }
845  a_table.assign(a_table.cursor_x(), a_table.cursor_y(), a_subtable);
846  if (a_table.cursor_x() == a_table.ncols()-1)
847  a_table.insert_col(a_table.ncols());
848  table_skip(a_table);
849 
850  return(a_table);
851 }
852 
854 {
855  if (a_table.cursor_y() == a_table.nrows()-1)
856  a_table.insert_row(a_table.nrows());
857  a_table.set_cursor(0,a_table.cursor_y()+1);
858 
859  return(a_table);
860 }
861 
863 {
864  a_table.set_cursor(0,0);
865 
866  return(a_table);
867 }
868 
870 {
871  if (a_table.cursor_x() == a_table.ncols()-1) {
872  if (a_table.cursor_y() != a_table.nrows()-1) {
873  a_table.set_cursor(0,a_table.cursor_y()+1);
874  }
875  }
876  else {
877  a_table.set_cursor(a_table.cursor_x()+1,a_table.cursor_y());
878  }
879 
880  return(a_table);
881 }
882 
884 {
885  a_table.repeat(true);
886 
887  return(a_table);
888 }
889 
890 table& operator<<(table& a_table, const estring& a_estr)
891 {
892  table_write(a_table, a_estr);
893 
894  return(a_table);
895 }
896 
897 table& operator<<(table& a_table, const table& a_subtable)
898 {
899  table_write(a_table, a_subtable);
900 
901  return(a_table);
902 }
903 
904 table& operator<<(table& a_table, table& (*a_arg)(table&))
905 {
906  a_arg(a_table);
907 
908  return(a_table);
909 }
910 
911 //----------------------------------------------------------------------------
912 
virtual void assign(const table_cell_table &a_class)
Definition: table.cc:185
size_type col_height(void) const
Definition: table.cc:470
Basic types definitions and templates.
table & table_endl(table &a_table)
Definition: table.cc:853
virtual size_type height(void) const
Definition: table.cc:504
virtual void assign(const table &a_class)
Definition: table.cc:347
An extended string class.
Definition: estring.h:52
#define ASSERT(code)
Definition: asserts.h:9
#define err_nomem
Definition: error.h:116
table_cell_estring & operator=(const table_cell_estring &a_class)
Definition: table.cc:143
virtual void write(std::ostream &out, size_type a_line, size_type a_width) const
Definition: table.cc:46
size_type col_width(const size_type a_x) const
Definition: table.cc:431
virtual void assign(const table_cell_base &a_class)
Definition: table.cc:32
virtual void write(std::ostream &out, size_type a_line, size_type a_width) const
Definition: table.cc:117
virtual ~table_cell_estring()
Definition: table.cc:86
size_type y
Definition: table.h:36
table & operator=(const table &a_class)
Definition: table.cc:614
virtual ~table_cell_base()
Definition: table.cc:28
static const size_type npos
Definition: table.h:17
void repeat(const bool a_bool)
Definition: table.cc:659
table & table_skip(table &a_table)
Definition: table.cc:869
table & table_write(table &a_table, const estring &a_estr)
Definition: table.cc:825
size_type m_cursor_x
Definition: table.h:153
void mf_remove_row(size_type a_y)
Definition: table.cc:785
void mf_add_elt(const table_cell_estring &a_class)
Definition: table.cc:671
size_type row_height(const size_type a_y) const
Definition: table.cc:482
virtual ~table_cell_table()
Definition: table.cc:179
size_type x
Definition: table.h:35
table_cell_base::size_type size_type
Definition: table.h:101
virtual size_type width(void) const
Definition: table.cc:108
size_type cursor_x(void) const
Definition: table.cc:621
table & table_repeat(table &a_table)
Definition: table.cc:883
estring m_value
Definition: table.h:67
virtual void insert_col(const size_type a_x)
Definition: table.cc:332
const size_type nrows(void) const
Definition: table.cc:561
#define TRY_nomem(code)
Definition: error.h:144
void mf_init(void)
Definition: table.cc:664
virtual ~table()
Definition: table.cc:287
value_type fmt_str(void)
Generate a formatted string.
Definition: estring.cc:688
bool m_repeat
Definition: table.h:155
virtual void insert_row(const size_type a_y)
Definition: table.cc:315
bool eot(void) const
Definition: table.cc:650
const size_type ncols(void) const
Definition: table.cc:549
#define INTERNAL_ERROR(e, s)
Definition: error.h:123
virtual size_type width(void) const
Definition: table.cc:41
virtual size_type height(void) const
Definition: table.cc:103
bool repeat
Definition: table.h:37
virtual void assign(const table_cell_estring &a_class)
Definition: table.cc:90
virtual void resize(const size_type a_x, const size_type a_y)
Definition: table.cc:291
table * m_value
Definition: table.h:93
table_type m_table
Definition: table.h:150
virtual size_type height(void) const
Definition: table.cc:36
size_type width(const size_type a_l)
Set the width of a formatted string.
Definition: estring.cc:446
virtual size_type height(void) const
Definition: table.cc:202
std::vector< table_cell_base * > table_row_type
Definition: table.h:99
std::list< table_cell_estring > m_list_estring
Definition: table.h:151
size_type cursor_y(void) const
Definition: table.cc:626
size_type m_cursor_y
Definition: table.h:154
size_type row_width(void) const
Definition: table.cc:454
table_cell_table & operator=(const table_cell_table &a_class)
Definition: table.cc:243
table & table_rewind(table &a_table)
Definition: table.cc:862
virtual void write(std::ostream &out, size_type a_line, size_type a_width) const
Definition: table.cc:570
bool operator==(const table_cell_base &a_1, const table_cell_base &a_2)
Definition: table.cc:61
#define ERROR(e, s)
Definition: error.h:120
estring::size_type size_type
Definition: table.h:16
table_cell_base()
Definition: table.cc:16
void set_cursor(size_type a_x, size_type a_y)
Definition: table.cc:631
std::ostream & operator<<(std::ostream &a_out, table &a_class)
Definition: table.cc:807
Definition: table.h:96
virtual void write(std::ostream &out, size_type a_line, size_type a_width) const
Definition: table.cc:220
void mf_remove_elt(const table_cell_estring &a_class)
Definition: table.cc:707
table_cell_base & operator=(const table_cell_base &a_class)
Definition: table.cc:54
virtual size_type width(void) const
Definition: table.cc:524
std::list< table_cell_table > m_list_table
Definition: table.h:152
virtual size_type width(void) const
Definition: table.cc:211
table()
Definition: table.cc:260