#include "parray.hh"
class Dimension_cache;
-typedef Interval (*Dim_cache_callback)(Dimension_cache *);
+typedef Interval (*Dim_cache_callback)(Dimension_cache const *);
+typedef Real (*Offset_cache_callback)(Dimension_cache const *);
/**
- Adminstration of offset dimension info.
+ Adminstration of offset dimension info.
*/
class Dimension_cache
{
bool valid_b_;
- /** Is this element dimensionless?.
- This is private to guarantee correctness of the cache
- */
- bool empty_b_;
Interval dim_;
/**
The offset wrt. to the center of #parent_l_#
*/
- Real offset_;
- Graphical_element *elt_l_;
- Dim_cache_callback callback_l_;
- friend class Graphical_element;
+
+ Real extra_offset_;
+ Real basic_offset_;
+ bool off_valid_b_;
+
+ Score_element *elt_l_;
+ friend class Score_element;
void init ();
public:
+ Array<Offset_cache_callback> off_callbacks_;
+ /**
+ What to call to find extent. Nil means empty.
+ */
+ Dim_cache_callback callback_l_;
+ static Interval point_dimension_callback (Dimension_cache const* );
+ Axis axis () const;
+ Real get_offset () const;
void set_callback (Dim_cache_callback);
/** The #offset_# is defined with regard to this graphical_element/
dimension_cache. */
-
+ void set_offset_callback (Offset_cache_callback);
Dimension_cache * parent_l_;
- Link_array<Dimension_cache> dependencies_l_arr_;
- Graphical_element *element_l () { return elt_l_; }
- Real absolute_coordinate () const;
- void invalidate ();
- void invalidate_dependencies ();
-
+
+ Score_element *element_l () const { return elt_l_; }
+
Dimension_cache(Dimension_cache const&);
Dimension_cache ();
+
+ /**
+ Find the offset relative to D. If D equals THIS, then it is 0.
+ Otherwise, it recursively defd as
+
+ OFFSET_ + PARENT_L_->relative_coordinate (D)
+ */
Real relative_coordinate (Dimension_cache *d) const;
- Dimension_cache*common_group (Dimension_cache const* s) const;
- Dimension_cache*common_group (Link_array<Dimension_cache> caches) const;
+ Dimension_cache*common_refpoint (Dimension_cache const* s) const;
+ Dimension_cache*common_refpoint (Link_array<Dimension_cache> caches) const;
void set_empty (bool);
void translate (Real);
- void set_offset (Real);
+
bool valid_b () const { return valid_b_; }
- bool empty_b() const { return empty_b_; }
- void set_dim (Interval);
+ bool empty_b() const;
Interval get_dim () const;
};