From: fred Date: Mon, 28 Oct 1996 21:07:30 +0000 (+0000) Subject: flower-1.0.3 X-Git-Tag: release/1.5.59~7023 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=5d14d9415ce4b7b616d602210d52525f29a584b8;p=lilypond.git flower-1.0.3 --- diff --git a/flower/Sources.make b/flower/Sources.make index 18fb18cb24..6521100b3b 100644 --- a/flower/Sources.make +++ b/flower/Sources.make @@ -5,7 +5,7 @@ cc=lgetopt.cc string.cc dataf.cc textdb.cc unionfind.cc \ templatecc=cursor.cc list.cc tsmat.cc inl=findcurs.inl link.inl list.inl -hh=cursor.hh cursor.inl lgetopt.hh link.hh list.hh dstream.hh \ +hh=cursor.hh pcursor.hh cursor.inl lgetopt.hh link.hh list.hh dstream.hh \ string.hh stringutil.hh vray.hh textdb.hh textstr.hh assoc.hh\ findcurs.hh unionfind.hh compare.hh handle.hh matrix.hh\ smat.hh vsmat.hh vector.hh real.hh choleski.hh\ diff --git a/flower/TODO b/flower/TODO index c8f3e5ad52..8d6e50591d 100644 --- a/flower/TODO +++ b/flower/TODO @@ -9,10 +9,6 @@ * Restricted cursor/list: make sublist from a list, and use rcursor as if list is as big as the sublist. - * Cursor signedcompare - - * int Cursor::op-(Cursor) - * move towards gnu? parsestream.h diff --git a/flower/compare.hh b/flower/compare.hh index 05b6e89e41..47c7101c87 100644 --- a/flower/compare.hh +++ b/flower/compare.hh @@ -2,21 +2,24 @@ #define COMPARE_HH /// handy notations for a signed comparison -#define instantiate_compare(type, function) \ -inline bool operator>(type t1, type t2) { return function(t1, t2) > 0; } \ - inline bool operator>=(type t1, type t2) { return function(t1, t2) >= 0; } \ - inline bool operator==(type t1, type t2) { return function(t1, t2) == 0; } \ - inline bool operator<=(type t1, type t2) { return function(t1, t2) <= 0; } \ - inline bool operator<(type t1, type t2) { return function(t1, t2) < 0; } \ - inline type MAX(type t1, type t2) { return (t1 > t2 )? t1 : t2; }\ - inline type MIN(type t1, type t2) { return (t1 < t2 )? t1 : t2; }\ +#define template_instantiate_compare(type, function, prefix) \ +prefix inline bool operator>(type t1, type t2) { return function(t1, t2) > 0; } \ +prefix inline bool operator>=(type t1, type t2) { return function(t1, t2) >= 0; } \ +prefix inline bool operator==(type t1, type t2) { return function(t1, t2) == 0; } \ +prefix inline bool operator<=(type t1, type t2) { return function(t1, t2) <= 0; } \ +prefix inline bool operator<(type t1, type t2) { return function(t1, t2) < 0; } \ +prefix inline type MAX(type t1, type t2) { return (t1 > t2 )? t1 : t2; }\ +prefix inline type MIN(type t1, type t2) { return (t1 < t2 )? t1 : t2; }\ \ - bool operator<(type t1, type t2) /* stupid fix to allow ; */ +prefix bool operator<(type t1, type t2) /* stupid fix to allow ; */ /** make the operators{<,<=,==,>=,>} and the MAX and MIN of two. Please fill a & in the type argument if necessary. */ + + +#define instantiate_compare(type, func) template_instantiate_compare(type,func, ) diff --git a/flower/pcursor.hh b/flower/pcursor.hh new file mode 100644 index 0000000000..8b0b179b4f --- /dev/null +++ b/flower/pcursor.hh @@ -0,0 +1,26 @@ + + +/// cursor which feels like a pointer +template +struct PCursor : public Cursor { + + /// make cursor with #no# items back + PCursor operator -( int no) const { + return PCursor (Cursor::operator-(no)); + } + + /// make cursor with #no# items further + PCursor operator +( int no) const { + return PCursor (Cursor::operator+(no)); + } + PCursor(List & l) : Cursor (l) {} + + PCursor( const Cursor& cursor ) : Cursor(cursor) { } + T operator ->() { return *(*this); } + +}; +/** + HWN: I'd like an operator->(), so here it is. + + Cursor to go with pointer list. + */