summaryrefslogtreecommitdiff
path: root/pcol.cc
diff options
context:
space:
mode:
Diffstat (limited to 'pcol.cc')
-rw-r--r--pcol.cc106
1 files changed, 106 insertions, 0 deletions
diff --git a/pcol.cc b/pcol.cc
new file mode 100644
index 0000000000..44c82a938d
--- /dev/null
+++ b/pcol.cc
@@ -0,0 +1,106 @@
+#include "pcol.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());
+ if (w.empty())
+ w.unite(Interval(0,0));
+ return w;
+}
+
+void
+PCol::print() const
+{
+ #ifndef NPRINT
+ mtor << "PCol {";
+ mtor << "# symbols: " << its.size() ;
+ mtor << "breakable: " << breakable<<"\n";
+ mtor << "extent: " << width().min << ", " << width().max << "\n";
+ mtor << "}\n";
+ #endif
+}
+
+int
+PCol::compare(const PCol &, const PCol &)
+{
+ assert(false);
+ return 0 ;
+}
+
+void
+PCol::OK () const
+{
+ if (prebreak || postbreak ) {
+ assert(breakable);
+ }
+
+}
+
+void
+PCol::set_breakable()
+{
+ if (breakable)
+ return;
+
+ prebreak = new PCol(this);
+ postbreak = new PCol(this);
+ breakable = true;
+ used = true;
+}
+
+PCol::PCol(PCol *parent) {
+ daddy = parent;
+ prebreak=0;
+ postbreak=0;
+ breakable=false;
+ line=0;
+ used = false;
+}
+
+PCol::~PCol()
+{
+ if (prebreak)
+ delete prebreak; // no recursion!
+ if (postbreak)
+ delete postbreak;
+}
+
+void
+PCol::add(const Item *i)
+{
+ its.bottom().add(i);
+ used = true;
+}
+