]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/include/interval.hh
release: 1.0.1
[lilypond.git] / flower / include / interval.hh
index d236759219e1f66887b988b4111cfb1739bda840..9468fae4871024d00e32720a364ebfdfa3aa696b 100644 (file)
@@ -24,8 +24,19 @@ struct Interval_t {
   /* ************** */
     
   static T infinity() ;
+  static String T_to_str (T arg);
     
-  T center() { return (left + right) / T(2);}
+  // ugh, egcs 1.02 ices on this
+//  T center() { return (left + right) / T(2);}
+  // and can't handle this either
+  // anyone want to make a bug report?
+  // better make one soon, egcs in rh5.1 barfs on this!
+  T center() {
+    T two (2);
+//    return (left + right) / two;
+    T result ((left + right) / two);
+    return result;
+  }
   void translate (T t) {
     left += t;
     right += t;
@@ -67,6 +78,11 @@ struct Interval_t {
     left =m;
     right = M;
   }
+  Interval_t<T> &operator -= (T r) {
+    *this += -r;
+    return *this;
+  }
+
   Interval_t<T> &operator += (T r) {
     left += r;
     right +=r;
@@ -85,6 +101,12 @@ struct Interval_t {
   String str() const;    
   void print () const;
   bool elt_b (T r);
+  void negate () {
+    T r = -left;
+    T l = -right;
+    left = l;
+    right =r;
+  }
 };
 
 
@@ -120,6 +142,23 @@ Interval_t<T> operator +(T a,Interval_t<T> i)
   return i;
 }
 
+template<class T>
+inline
+Interval_t<T> operator - (Interval_t<T> i, T a)
+{
+  i += -a;
+  return i;
+}
+
+template<class T>
+inline
+Interval_t<T> operator - (T a,Interval_t<T> i)
+{
+  i.negate ();
+  i += a;
+  return i;
+}
+
 template<class T>
 inline
 Interval_t<T> operator +(Interval_t<T> i,T a){
@@ -140,12 +179,10 @@ Interval_t<T> operator *(Interval_t<T> i,T a){
   return a*i;
 }
 
+// again? see fproto.hh
 typedef Interval_t<Real> Interval;
-
-
+typedef Interval_t<int> Slice;
 
 
 #endif // INTERVAL_HH
 
-
-