]> git.donarmstrong.com Git - lilypond.git/blob - lily/ctie-engraver.cc
25082cd973881e22ccca7f72d044fed36fd1ea24
[lilypond.git] / lily / ctie-engraver.cc
1 /*   
2   ctie-engraver.cc --  implement Command_tie_engraver
3   
4   source file of the GNU LilyPond music typesetter
5   
6   (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7   
8  */
9
10 #include "ctie-engraver.hh"
11 #include "command-request.hh"
12 #include "note-head.hh"
13 #include "musical-request.hh"
14
15 Command_tie_engraver::Command_tie_engraver()
16 {
17   req_l_ = 0;
18 }
19
20
21 bool
22 Command_tie_engraver::do_try_music (Music *m)
23 {
24   if (Command_tie_req * c = dynamic_cast<Command_tie_req*> (m))
25     {
26       req_l_ = c;
27       return true;
28     }
29   return false;
30 }
31
32 void
33 Command_tie_engraver::acknowledge_element (Score_element_info i)
34 {
35   if (Note_head *nh = dynamic_cast<Note_head *> (i.elem_l_))
36     {
37       Note_req * m = dynamic_cast<Note_req* > (i.req_l_);
38       now_heads_.push (CHead_melodic_tuple (nh, m, now_moment()+ m->duration ()));
39     }
40 }
41
42 void
43 Command_tie_engraver::do_process_requests ()
44 {
45   
46 }
47
48 void
49 Command_tie_engraver::processed_acknowledged ()
50 {
51 }
52
53 void
54 Command_tie_engraver::do_pre_move_processing ()
55 {
56   for (int i=0; i < now_heads_.size (); i++)
57     {
58       past_notes_pq_.insert (now_heads_[i]);
59     }
60 }
61
62 void
63 Command_tie_engraver::do_post_move_processing ()
64 {
65   Moment now = now_moment ();
66   while (past_notes_pq_.front ().end_ < now)
67     past_notes_pq_.delmin ();
68 }
69
70
71
72 ADD_THIS_TRANSLATOR(Command_tie_engraver);
73
74
75 CHead_melodic_tuple::CHead_melodic_tuple ()
76 {
77   head_l_ =0;
78   mel_l_ =0;
79   end_ = 0;
80 }
81
82 CHead_melodic_tuple::CHead_melodic_tuple (Note_head *h, Melodic_req*m, Moment mom)
83 {
84   head_l_ = h;
85   mel_l_ = m;
86   end_ = mom;
87 }
88
89 int
90 CHead_melodic_tuple::pitch_compare (CHead_melodic_tuple const&h1,
91                              CHead_melodic_tuple const &h2)
92 {
93   return Melodic_req::compare (*h1.mel_l_, *h2.mel_l_);
94 }
95
96 int
97 CHead_melodic_tuple::time_compare (CHead_melodic_tuple const&h1,
98                              CHead_melodic_tuple const &h2)
99 {
100   return (h1.end_ - h2.end_ ).sign ();
101 }