]> git.donarmstrong.com Git - lilypond.git/blob - lily/p-col.cc
e776b62c926f78322a460042adc96436cebef427
[lilypond.git] / lily / p-col.cc
1 /*
2   p-col.cc -- implement Paper_column
3
4   source file of the GNU LilyPond music typesetter
5
6   (c)  1997--1998 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "p-col.hh"
10 #include "p-score.hh"
11 #include "debug.hh"
12
13 void
14 Paper_column::add_rod (Paper_column * p, Real d)
15 {
16   Direction dir =  Direction (sign (p->rank_i ()  - rank_i ()));
17   for (int i=0; i < minimal_dists_arr_drul_[dir].size (); i++)
18     {
19       Column_rod &rod = minimal_dists_arr_drul_[dir][i];
20       if (rod.other_l_ == p)
21         {
22           rod.distance_f_ = rod.distance_f_ >? d;
23           return ;
24         }
25     }
26
27   Column_rod cr;
28   cr.distance_f_ = d;
29         cr.other_l_ = p;
30
31   minimal_dists_arr_drul_[dir].push (cr);
32       
33 }
34
35 int
36 Paper_column::rank_i() const
37 {
38   return rank_i_;
39 }
40
41 void
42 Paper_column::set_rank (int i)
43 {
44   rank_i_ = i;
45   if (prebreak_l())
46     prebreak_l()->rank_i_ = i;
47   if (postbreak_l())
48     postbreak_l()->rank_i_ = i;
49 }
50
51 void
52 Paper_column::do_print() const
53 {
54 #ifndef NPRINT
55   DOUT << "rank: " << rank_i_ << '\n';
56   if (prebreak_l())
57     {
58       DOUT << "\npre: ";
59       prebreak_l()->print();
60     }
61   if (postbreak_l()) 
62     {
63       DOUT << "post: ";
64       postbreak_l()->print();
65     } 
66   if (break_status_i_)
67     {
68       DOUT <<'\n' << ((break_status_i_ == LEFT) ? "prebreak" : "postbreak");
69       DOUT << '\n';
70     }
71
72   DOUT << "Left: ";
73   for (int i=0; i < minimal_dists_arr_drul_[LEFT].size (); i++)
74     {
75       minimal_dists_arr_drul_[LEFT][i].print ();
76     }
77   DOUT << "Right: ";
78   for (int i=0; i < minimal_dists_arr_drul_[RIGHT].size (); i++)
79     {
80       minimal_dists_arr_drul_[RIGHT][i].print ();
81     }
82 #endif 
83 }
84
85 int
86 Paper_column::compare (Paper_column const &c1, Paper_column const &c2)
87 {
88   return c1.rank_i() - c2.rank_i ();
89 }
90
91 Paper_column*
92 Paper_column::prebreak_l() const
93 {
94   return (Paper_column*)broken_to_drul_[LEFT];
95 }
96
97 Paper_column*
98 Paper_column::postbreak_l() const
99 {
100   return(Paper_column*) broken_to_drul_[RIGHT];
101 }
102 bool
103 Paper_column::breakpoint_b() const
104 {
105   return !line_l_;
106 }
107
108 Paper_column::Paper_column()
109 {
110   used_b_ = false;
111   error_mark_b_ = false;
112   line_l_=0;
113   rank_i_ = -1;
114 }
115
116 Line_of_score*
117 Paper_column::line_l() const
118 {
119   return line_l_;
120 }
121
122 bool
123 Paper_column::used_b() const
124 {
125   return linked_b();
126 }
127
128 IMPLEMENT_IS_TYPE_B1(Paper_column, Horizontal_group_item);
129
130 Paper_column*
131 Paper_column::column_l () const
132 {
133   return (Paper_column*)this;
134 }
135
136
137 void
138 Paper_column::preprocess ()
139 {
140   minimal_dists_arr_drul_[LEFT].sort (Column_rod::compare);
141   minimal_dists_arr_drul_[RIGHT].sort (Column_rod::compare);  
142 }