Re: accidental changes: review

2007-09-26 Thread Juergen Reuter

On Tue, 25 Sep 2007, Han-Wen Nienhuys wrote:


2007/9/25, Rune Zedeler [EMAIL PROTECTED]:

+  int octave_;
+  int notename_;
+  Rational alteration_;


Why don't you use a Pitch object for this combination? You would get
Scale* for free.


Primarily because the two values octave_ and has_octave_ are very
closely related.
They really /should/ be joined to an int option - if such a thing did
exist in c++.


you might want to look into making octave optional for pitch; I'm not
sure if it is worth the trouble, but it would make key signatures more
logical to specify.

Otherwise, you could use an int*




I am just curious: Why not introducing a new class Octaveless_pitch 
or Octave_Pitch (i.e. pitch within an octave) that contains all of 
Pitch except for the octaves, and then making Pitch a subclass of 
Octaveless_pitch that just adds the octaves to its superclass?


Greetings,
Juergen


___
lilypond-devel mailing list
lilypond-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: accidental changes: review

2007-09-26 Thread Trevor Bača
On 9/26/07, Juergen Reuter [EMAIL PROTECTED] wrote:
 On Tue, 25 Sep 2007, Han-Wen Nienhuys wrote:

  2007/9/25, Rune Zedeler [EMAIL PROTECTED]:
  +  int octave_;
  +  int notename_;
  +  Rational alteration_;
 
  Why don't you use a Pitch object for this combination? You would get
  Scale* for free.
 
  Primarily because the two values octave_ and has_octave_ are very
  closely related.
  They really /should/ be joined to an int option - if such a thing did
  exist in c++.
 
  you might want to look into making octave optional for pitch; I'm not
  sure if it is worth the trouble, but it would make key signatures more
  logical to specify.
 
  Otherwise, you could use an int*
 
 

 I am just curious: Why not introducing a new class Octaveless_pitch
 or Octave_Pitch (i.e. pitch within an octave) that contains all of
 Pitch except for the octaves, and then making Pitch a subclass of
 Octaveless_pitch that just adds the octaves to its superclass?

[The (American) academic terms for these are pitch-class for the
octaveless notenames and pitch for actual pitches specified in a
certain octave. Robert Morris's Composition with Pitch-classes
[1987; Yale] is a nice example. So here, Pitch_class would be the
superclass from which Pitch would inherit.]



-- 
Trevor Bača
[EMAIL PROTECTED]
___
lilypond-devel mailing list
lilypond-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: accidental changes: review

2007-09-26 Thread Han-Wen Nienhuys
2007/9/26, Juergen Reuter [EMAIL PROTECTED]:

 I am just curious: Why not introducing a new class Octaveless_pitch
 or Octave_Pitch (i.e. pitch within an octave) that contains all of
 Pitch except for the octaves, and then making Pitch a subclass of
 Octaveless_pitch that just adds the octaves to its superclass?

There would only be one scheme type, the one for the base class, so
this will require some extra typechecking for the Scheme interfaces

-- 
Han-Wen Nienhuys - [EMAIL PROTECTED] - http://www.xs4all.nl/~hanwen


___
lilypond-devel mailing list
lilypond-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-devel


accidental changes: review

2007-09-25 Thread Han-Wen Nienhuys
-  SCM key = scm_cons (scm_from_int (o), scm_from_int (n));
+  Duration *dur = unsmob_duration (note-get_property (duration));
+
+  SCM smp = get_property (measurePosition);
+  Moment mp = robust_scm2moment (smp, Moment (0));
+  /*
+  TODO: Check this. Is this correct? -rz :
+   */
+  Moment end_mp = mp.grace_part_  Rational(0)
+  ? Moment(mp.main_part_, mp.grace_part_+dur-get_length())
+  : Moment(mp.main_part_+dur-get_length(), mp.grace_part_);

grace_part_ can never be larger than zero, so you could simplify to

: Moment(mp.main_part_+dur-get_length(), 0);

other than that, it looks ok.

--- /dev/null
+  int octave_;
+  int notename_;
+  Rational alteration_;

Why don't you use a Pitch object for this combination? You would get
Scale* for free.

+  bool has_position_;

Can you document what this does?

--- a/lily/key-engraver.cc
+++ b/lily/key-engraver.cc
@@ -15,6 +15,7 @@
 #include protected-scm.hh
 #include staff-symbol-referencer.hh
 #include stream-event.hh
+#include key-entry.hh

 #include translator.icc

@@ -72,36 +73,56 @@ Key_engraver::create_key (bool is_default)
  || key == SCM_EOL)

could you add a comment on what is happening here?

   {
-SCM new_alter_pair = scm_assoc (scm_caar (s), key);
-Rational old_alter = robust_scm2rational (scm_cdar (s), 0);
-if (new_alter_pair == SCM_BOOL_F
+Key_entry *old_entry = Key_entry::unsmob (scm_car (s));
+Key_entry *new_entry = NULL;
+for (SCM t = key; scm_is_pair (t); t = scm_cdr (t))
+  {
+Key_entry *entry = Key_entry::unsmob (scm_car (t));
+if ( old_entry-get_notename () == entry -
get_notename ())

no space after (

+  {
+new_entry = entry;
+break;
+  }
+  }
+Rational old_alter = old_entry-get_alteration ();
+Rational new_alter = new_entry-get_alteration ();
+SCM old_alterpair = old_entry - to_name_alter_pair ();

no space around -

-  item_-set_property (alteration-alist, key);
+  SCM key_scm = scm_list_copy (key);
+  for (SCM s = key_scm; scm_is_pair (s); s = scm_cdr (s))
+  {
+Key_entry *entry = Key_entry::unsmob (scm_car (s));
+*SCM_CARLOC (s) = entry - to_name_alter_pair ();

del space around -


+
+
+IMPLEMENT_TYPE_P (Key_entry, ly:key-signature-entry?);
+
+SCM
+Key_entry::mark_smob (SCM x)
+{
+  return SCM_EOL; // FIXME: I don't understand what this function is
supposed to do. This is just blindly coppied from moment.cc

call scm_gc_mark() on all SCM values that are inside the smob. You can
return one of them iso. scm_gc_mark()ing them.

+LY_DEFINE (ly_make_keysig_entry, ly:make-keysig-entry,
+ 2, 3, 0, (SCM note, SCM alter, SCM octave, SCM barnumber, SCM 
measurepos),
+ An entry for key signature. Key signatures consists of lists of
these. The three last arguments are used for local key changes.)
+{

please break string and wrap lines


+  LY_ASSERT_TYPE (scm_is_integer, note, 1);
+  LY_ASSERT_TYPE (scm_is_integer, alter, 2);
+
+  if (octave == SCM_UNDEFINED)
+{
+  Key_entry e (scm_to_int (note), scm_to_int (alter));
+
+  return e.smobbed_copy ();
+}
+  else
+{
+  LY_ASSERT_TYPE (scm_is_integer, octave, 3);
+  LY_ASSERT_TYPE (scm_is_integer, barnumber, 4);
+  LY_ASSERT_SMOB (Moment, measurepos, 5);

can you check for unsmob_moment() here?

 /* FIXME: why is octave == 0 and default not middleC ? */
+/* Because otherwise Pitch () would not be a zero element -
+   e.g. implementation of negated () would not work. -rz ! */

Huh? I recall that octave == 0 is actually middle C. The strange thing
is that c' (with one quote) is is encoded as octave 0.



-- 
Han-Wen Nienhuys - [EMAIL PROTECTED] - http://www.xs4all.nl/~hanwen


___
lilypond-devel mailing list
lilypond-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: accidental changes: review

2007-09-25 Thread Rune Zedeler

Thanks for comments.

Han-Wen Nienhuys skrev:

+  int octave_;
+  int notename_;
+  Rational alteration_;


Why don't you use a Pitch object for this combination? You would get
Scale* for free.


Primarily because the two values octave_ and has_octave_ are very 
closely related.
They really /should/ be joined to an int option - if such a thing did 
exist in c++.
Therefore I find it very errorprone to move the octave_ into another 
object without has_octave_. The pitch object will not make sense if 
has_octave_==false.

We have

LY_DEFINE (ly_make_keysig_entry, ly:make-keysig-entry,
   2, 3, 0, (SCM note, SCM alter,
 SCM octave, SCM barnumber, SCM measurepos),
   An entry for key signature. Key signatures consists of lists of
   these. The three last arguments are used for local key changes.)

It will not make sense to join the three first together, because the two 
first are related, and the three last are related.



/* FIXME: why is octave == 0 and default not middleC ? */
+/* Because otherwise Pitch () would not be a zero element -
+   e.g. implementation of negated () would not work. -rz ! */


Huh? I recall that octave == 0 is actually middle C. The strange thing
is that c' (with one quote) is is encoded as octave 0.


Just to ensure I understand you correctly: The FIXME is wrong?
It /should/ say
FIXME: Why does octave == 0 refer to middleC-octave and not the octave 
below?


-Rune


___
lilypond-devel mailing list
lilypond-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-devel


Re: accidental changes: review

2007-09-25 Thread Han-Wen Nienhuys
2007/9/25, Rune Zedeler [EMAIL PROTECTED]:
  +  int octave_;
  +  int notename_;
  +  Rational alteration_;
 
  Why don't you use a Pitch object for this combination? You would get
  Scale* for free.

 Primarily because the two values octave_ and has_octave_ are very
 closely related.
 They really /should/ be joined to an int option - if such a thing did
 exist in c++.

you might want to look into making octave optional for pitch; I'm not
sure if it is worth the trouble, but it would make key signatures more
logical to specify.

Otherwise, you could use an int*


  /* FIXME: why is octave == 0 and default not middleC ? */
  +/* Because otherwise Pitch () would not be a zero element -
  +   e.g. implementation of negated () would not work. -rz ! */
 
  Huh? I recall that octave == 0 is actually middle C. The strange thing
  is that c' (with one quote) is is encoded as octave 0.

 Just to ensure I understand you correctly: The FIXME is wrong?

I think the fixme should just go away.

-- 
Han-Wen Nienhuys - [EMAIL PROTECTED] - http://www.xs4all.nl/~hanwen


___
lilypond-devel mailing list
lilypond-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-devel