*/
#include "pointer-group-interface.hh"
-#include "std-vector.hh"
#include "stem.hh"
#include "beam.hh"
+#include "grob.hh"
#include "staff-symbol-referencer.hh"
#include "directional-element-interface.hh"
bool
-is_concave_single_notes (std::vector<int> const &positions, Direction beam_dir)
+is_concave_single_notes (vector<int> const &positions, Direction beam_dir)
{
Interval covering;
covering.add_point (positions[0]);
/*
notes above and below the interval covered by 1st and last note.
*/
- for (vsize i = 1; i < positions.size () - 1; i++)
+ for (vsize i = 1; i + 1 < positions.size (); i++)
{
above = above || (positions[i] > covering[UP]);
below = below || (positions[i] < covering[DOWN]);
*/
int dy = positions.back () - positions[0];
int closest = max (beam_dir * positions.back (), beam_dir * positions[0]);
- for (vsize i = 2; !concave && i < positions.size () - 1; i++)
+ for (vsize i = 2; !concave && i + 1 < positions.size (); i++)
{
int inner_dy = positions[i] - positions[i - 1];
if (sign (inner_dy) != sign (dy)
}
bool all_closer = true;
- for (vsize i = 1; all_closer && i < positions.size () - 1; i++)
+ for (vsize i = 1; all_closer && i + 1 < positions.size (); i++)
{
all_closer = all_closer
&& (beam_dir * positions[i] > closest);
}
Real
-calc_positions_concaveness (std::vector<int> const &positions, Direction beam_dir)
+calc_positions_concaveness (vector<int> const &positions, Direction beam_dir)
{
Real dy = positions.back () - positions[0];
Real slope = dy / Real (positions.size () - 1);
Real concaveness = 0.0;
- for (vsize i = 1; i < positions.size () - 1; i++)
+ for (vsize i = 1; i + 1 < positions.size (); i++)
{
Real line_y = slope * i + positions[0];
{
Grob *me = unsmob_grob (smob);
- Link_array__Grob_ stems
+ vector<Grob*> stems
= extract_grob_array (me, "stems");
if (is_knee (me))
Direction beam_dir = CENTER;
for (vsize i = stems.size (); i--;)
{
- if (Stem::is_invisible (stems[i]))
- stems.erase (stems.begin () + i);
- else
+ if (Stem::is_normal_stem (stems[i]))
{
if (Direction dir = get_grob_direction (stems[i]))
beam_dir = dir;
}
+ else
+ stems.erase (stems.begin () + i);
}
if (stems.size () <= 2)
- return SCM_UNSPECIFIED;
+ return scm_from_int (0);
- std::vector<int> close_positions;
- std::vector<int> far_positions;
+ vector<int> close_positions;
+ vector<int> far_positions;
for (vsize i = 0; i < stems.size (); i++)
{
/*