#include "real.hh"
-/** a T interval.
- this represents the closed interval [left,right].
- No invariants. T must be a totally ordered ring
+/** a T interval. this represents the closed interval [left,right].
+ No invariants. T must be a totally ordered ring (with division, anyway ..)
+ At instantiation, the function infinity() has to be defined explicitely.
+
*/
template<class T>
struct Interval_t {
/* ************** */
+ static T infinity() ;
+
T center() { return (left + right) / T(2);}
void translate(T t) {
left += t;
T length() const;
void set_empty() ;
bool empty_b() const { return left > right; }
+ bool contains_b(Interval_t<T> const&) const;
Interval_t() {
set_empty();
}
return -2;
}
+template<class T>
+bool
+Interval_t<T>::contains_b(Interval_t<T> const& a)const
+{
+ int c_i= _Interval__compare( *this, a);
+ if (c_i == -2)
+ return false;
+ return c_i >= 0;
+}
template<class T>
int
return i;
}
-#ifdef AIX
-const Real INFTY = 1e8; // ARGh. AIX sucks
-#else
-const Real INFTY = HUGE_VAL;
-#endif
-
template<class T>
void
Interval_t<T>::set_empty()
{
- left = INFTY;
- right = -INFTY;
+ left = (T) infinity();
+ right = (T) -infinity();
}
template<class T>
--- /dev/null
+/*
+ interval.cc -- instantiate Interval_t<Real>
+
+ source file of the Flower Library
+
+ (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+#include "interval.hh"
+#include "real.hh"
+#include "interval.tcc"
+
+Interval__instantiate(Real);
+
+Real
+Interval_t<Real>::infinity()
+{
+ return HUGE;
+}
virtual void pre_move_processing();
virtual void post_move_processing();
virtual bool acceptable_request_b(Request*) const;
- virtual void set_feature(Features);
+ virtual void set_feature(Feature);
};
#endif // DYNAMIC_REG_HH
struct Durational_req;
struct Dynamic_req;
struct Group_change_req;
+struct Feature;
struct Group_feature_req;
struct Key_change_req;
struct Lyric_req;
struct Meter_change_req;
struct Musical_req;
struct Command_req;
+struct Collision_register;
+struct Collision;
struct Note_req;
struct Plet_req;
struct Partial_measure_req;
Remove #reg_l# from the list, and return it.
*/
Request_register * get_register_p(Request_register*reg_l);
- virtual void set_feature(Features i);
+ virtual void set_feature(Feature i);
virtual bool acceptable_request_b(Request*)const;
virtual void pre_move_processing();
virtual void post_move_processing();
*/
virtual void announce_element(Staff_elem_info);
/**
- Set features of the register(s). Default: ignore features.
+ Set Feature of the register(s). Default: ignore Feature.
*/
- virtual void set_feature(Features){}
+ virtual void set_feature(Feature){}
/**
Does this equal or contain a certain register?
*/
/* *************** */
Stem_beam_register();
~Stem_beam_register();
- virtual void set_feature(Features dir_i_);
+ virtual void set_feature(Feature dir_i_);
virtual bool try_request(Request*);
virtual void process_requests();
virtual void acknowledge_element(Staff_elem_info);
int dir_i_;
/* *************** */
protected:
- virtual void set_feature(Features );
+ virtual void set_feature(Feature );
virtual bool try_request(Request*);
virtual void process_requests();
virtual void pre_move_processing();
}
void
-Register_group_register::set_feature(Features d)
+Register_group_register::set_feature(Feature d)
{
for (iter_top(reg_list_, i); i.ok(); i++) {
i->set_feature(d);
script_req_l_arr_.set_size(0);
}
-void
-Script_register::set_feature(Features )
-{
-// if (i.direction_i_|| i.initialiser_b_)
- //dir_i_ = i.direction_i_;
-}
IMPLEMENT_STATIC_NAME(Script_register);
ADD_THIS_REGISTER(Script_register);
req_l_ = 0;
}
-Features::Features()
-{
- direction_i_ = 0;
- initialiser_b_ = false;
-}
-
-Features
-Features::dir(int d) return f;
-{
- f.initialiser_b_ = true;
- f.direction_i_ = d;
-}
+#include <limits.h>
#include "proto.hh"
#include "string.hh"
#include "moment.hh"
#include "interval.tcc"
-Interval__instantiate(Real);
Interval__instantiate(Rational);
+Interval__instantiate(int);
+
+#ifdef AIX
+const Real INFTY = 1e8; // ARGh. AIX sucks
+#else
+const Real INFTY = HUGE_VAL;
+#endif
+
+Rational
+Interval_t<Rational>::infinity()
+{
+ return INFTY;
+}
+
+int
+Interval_t<int>::infinity()
+{
+ return INT_MAX;
+}