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\
#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, )
--- /dev/null
+
+
+/// cursor which feels like a pointer
+template<class T>
+struct PCursor : public Cursor<T> {
+
+ /// make cursor with #no# items back
+ PCursor<T> operator -( int no) const {
+ return PCursor<T> (Cursor<T>::operator-(no));
+ }
+
+ /// make cursor with #no# items further
+ PCursor<T> operator +( int no) const {
+ return PCursor<T> (Cursor<T>::operator+(no));
+ }
+ PCursor(List<T> & l) : Cursor<T> (l) {}
+
+ PCursor( const Cursor<T>& cursor ) : Cursor<T>(cursor) { }
+ T operator ->() { return *(*this); }
+
+};
+/**
+ HWN: I'd like an operator->(), so here it is.
+
+ Cursor to go with pointer list.
+ */