]> git.donarmstrong.com Git - lilypond.git/blobdiff - src/pcol.cc
release: 0.0.21
[lilypond.git] / src / pcol.cc
index 902f57bab22bdec8e40025cf5efdbaf77cf0b154..52df4297d4ab8be9155d8e98220a6f8f2e685368 100644 (file)
@@ -1,67 +1,58 @@
 #include "pcol.hh"
+#include "pscore.hh"
 #include "pstaff.hh"
 #include "debug.hh"
 
-void
-Idealspacing::print() const
-{
-#ifndef NPRINT
-    mtor << "idealspacing {" ;
-    mtor << "distance "<<space<< " strength " << hooke << "}\n";
-#endif
-}
-
-Idealspacing::Idealspacing(const PCol * l,const PCol * r)
-{
-    space = 0.0;
-    hooke = 0.0;
-    left = l;
-    right = r;
-}
-
-void
-Idealspacing::OK() const
-{
-#ifndef NDEBUG
-    assert(hooke >= 0 && left  && right);
-#endif    
-}
-
-/****************************************************************/
-
 Interval
 PCol::width() const
 {
     Interval w;
 
-    for (PCursor<const Item *> ic(its); ic.ok(); ic++)
-       w.unite(ic->width());
+    for (iter_top(its,i); i.ok(); i++)
+       w.unite(i->width());
     if (w.empty())
        w.unite(Interval(0,0));
     return w;
 }
 
+int
+PCol::rank() const
+{
+    if(!pscore_)
+       return -1;
+    PCursor<PCol*> me=pscore_->find_col( (PCol*)this);
+    if (!me.ok())
+       return -1;
+    PCursor<PCol*> bot(pscore_->cols.top());
+    return me - bot;
+}
+
 void
 PCol::print() const
 {
-    #ifndef NPRINT
+#ifndef NPRINT
     mtor << "PCol {";
+
+    if (rank() >= 0)
+       mtor << "rank: " << rank() << '\n';
+
     mtor << "# symbols: " << its.size() ;
     if (breakable()){
-       mtor << "pre,post: ";
+       mtor << "\npre,post: ";
        prebreak->print();
        postbreak->print();
+    } else if (daddy) {
+       mtor<<'\n' << ((this == daddy->prebreak) ? "prebreak" : "postbreak");
     }
-    mtor << "extent: " << width().min << ", " << width().max << "\n";
+    mtor << "extent: " << width().str() << "\n";
     mtor << "}\n";
-    #endif 
+#endif 
 }
 
 int
-PCol::compare(const PCol &, const PCol &)
+PCol::compare(const PCol &c1, const PCol &c2)
 {
-    assert(false);
-    return 0 ;
+    return c1.pscore_->compare_pcols((PCol*)&c1,(PCol*)&c2);
 }
 
 void
@@ -71,8 +62,7 @@ PCol::OK () const
        assert(prebreak&&postbreak);
        assert(prebreak->daddy == this);
        assert(postbreak->daddy == this);
-    }
-    
+    }    
 }
 
 void
@@ -83,7 +73,10 @@ PCol::set_breakable()
 
     prebreak = new PCol(this);
     postbreak = new PCol(this);
-    used = true;
+    prebreak->pscore_ = pscore_;
+    postbreak->pscore_ = pscore_;
+    
 }
 
 bool
@@ -92,20 +85,20 @@ PCol::breakable() const
     return prebreak||postbreak;
 }
 
-PCol::PCol(PCol *parent) {
+PCol::PCol(PCol *parent)
+{
     daddy = parent;
     prebreak=0;
     postbreak=0;
     line=0;
-    used  = false;
+    pscore_ = 0;
 }
 
 PCol::~PCol()
 {
-
-       delete prebreak;        
-
-       delete postbreak;       
+    delete prebreak;
+    delete postbreak;  
 }
 
 void
@@ -113,6 +106,11 @@ PCol::add( Item *i)
 {
     its.bottom().add(i);
     i->pcol_ = this;
-    used = true;
 }
 
+bool
+PCol::used()const
+{
+    return breakable() || its.size();
+}