+
+Ties_configuration::Ties_configuration ()
+{
+ score_ = 0.0;
+ scored_ = false;
+}
+
+void
+Ties_configuration::reset_score ()
+{
+ score_ = 0.0;
+ scored_ = false;
+ score_card_ = "";
+ tie_score_cards_.clear ();
+}
+
+void
+Ties_configuration::add_tie_score (Real s, int i, string desc)
+{
+ assert (!scored_);
+ score_ += s;
+ if (s)
+ {
+ while (tie_score_cards_.size () < size ())
+ tie_score_cards_.push_back ("");
+
+ tie_score_cards_[i] += to_string ("%s=%.2f ", desc.c_str (), s);
+ }
+}
+
+void
+Ties_configuration::add_score (Real s, string desc)
+{
+ assert (!scored_);
+ score_ += s;
+ if (s)
+ score_card_ += to_string ("%s=%.2f ", desc.c_str (), s);
+}
+
+Real
+Ties_configuration::score () const
+{
+ return score_;
+}
+
+string
+Ties_configuration::complete_tie_card (vsize i) const
+{
+ string s;
+ s += to_string ("%d (%.2f) %c: ", (*this)[i].position_, (*this)[i].delta_y_,
+ ((*this)[i].dir_ == UP ? 'u' : 'd'))
+ + (*this)[i].card () + (*this).tie_card (i);
+
+ /*
+ this is a little awkward, but we must decide where to put
+ aggregrates.
+ */
+ if (i == 0)
+ s += card ();
+
+ if (i + 1 == size ())
+ s += to_string ("TOTAL=%.2f", score ());
+
+ return s;
+}
+
+/* for use inside GDB */
+string
+Ties_configuration::complete_score_card () const
+{
+ string s;
+ for (vsize i = 0; i < size (); i++)
+ {
+ s += complete_tie_card (i);
+ }
+
+ return s;
+}
+
+string
+Ties_configuration::card () const
+{
+ return score_card_;
+}
+