@@ -3,22 +3,26 @@ use crate::GPosIdx;
33use std:: { hash:: Hash , str:: FromStr } ;
44
55/// Stores the attributes of a component
6- #[ derive( Clone , PartialEq , Eq ) ]
7- pub struct Attributes < Bool , Num >
6+ #[ derive( Clone ) ]
7+ pub struct Attributes < Bool , Num , Float >
88where
99 Bool : FromStr + Hash + Eq + Copy ,
1010 Num : FromStr + Hash + Eq + Copy ,
11+ Float : FromStr + Hash + Eq + Copy ,
1112{
1213 /// Numerical attributes
1314 num_attrs : AttrStore < Num , u64 > ,
1415 /// Boolean attributes
1516 bool_attrs : AttrStore < Bool , bool > ,
17+ /// Float attributes
18+ float_attrs : AttrStore < Float , f64 > ,
1619}
1720
18- impl < Bool , Num > AttrCtx < Num , u64 > for Attributes < Bool , Num >
21+ impl < Bool , Num , Float > AttrCtx < Num , u64 > for Attributes < Bool , Num , Float >
1922where
2023 Bool : FromStr + Hash + Eq + Copy ,
2124 Num : FromStr + Hash + Eq + Copy ,
25+ Float : FromStr + Hash + Eq + Copy ,
2226{
2327 fn get ( & self , attr : Num ) -> Option < & u64 > {
2428 self . num_attrs . get ( attr)
@@ -37,10 +41,11 @@ where
3741 }
3842}
3943
40- impl < Bool , Num > AttrCtx < Bool , bool > for Attributes < Bool , Num >
44+ impl < Bool , Num , Float > AttrCtx < Bool , bool > for Attributes < Bool , Num , Float >
4145where
4246 Bool : FromStr + Hash + Eq + Copy ,
4347 Num : FromStr + Hash + Eq + Copy ,
48+ Float : FromStr + Hash + Eq + Copy ,
4449{
4550 fn get ( & self , attr : Bool ) -> Option < & bool > {
4651 self . bool_attrs . get ( attr)
@@ -59,15 +64,40 @@ where
5964 }
6065}
6166
62- impl < Bool , Num > Default for Attributes < Bool , Num >
67+ impl < Bool , Num , Float > AttrCtx < Float , f64 > for Attributes < Bool , Num , Float >
6368where
6469 Bool : FromStr + Hash + Eq + Copy ,
6570 Num : FromStr + Hash + Eq + Copy ,
71+ Float : FromStr + Hash + Eq + Copy ,
72+ {
73+ fn get ( & self , attr : Float ) -> Option < & f64 > {
74+ self . float_attrs . get ( attr)
75+ }
76+
77+ fn get_loc ( & self , attr : Float ) -> Option < GPosIdx > {
78+ self . float_attrs . get_loc ( attr)
79+ }
80+
81+ fn set ( & mut self , attr : Float , value : f64 , loc : GPosIdx ) {
82+ self . float_attrs . set ( attr, value, loc) ;
83+ }
84+
85+ fn remove ( & mut self , attr : Float ) {
86+ self . float_attrs . remove ( attr) ;
87+ }
88+ }
89+
90+ impl < Bool , Num , Float > Default for Attributes < Bool , Num , Float >
91+ where
92+ Bool : FromStr + Hash + Eq + Copy ,
93+ Num : FromStr + Hash + Eq + Copy ,
94+ Float : FromStr + Hash + Eq + Copy ,
6695{
6796 fn default ( ) -> Self {
6897 Self {
6998 num_attrs : AttrStore :: default ( ) ,
7099 bool_attrs : AttrStore :: default ( ) ,
100+ float_attrs : AttrStore :: default ( ) ,
71101 }
72102 }
73103}
0 commit comments