Skip to content

Commit 0f2a034

Browse files
committed
add float attributes
1 parent e0703dd commit 0f2a034

File tree

4 files changed

+74
-33
lines changed

4 files changed

+74
-33
lines changed

crates/utils/src/attr/attributes.rs

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,26 @@ use crate::GPosIdx;
33
use 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>
88
where
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>
1922
where
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>
4145
where
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>
6368
where
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
}

crates/utils/src/attr/store.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::{attr::AttrCtx, GPosIdx};
22
use std::collections::HashMap;
33

44
/// A store for attributes
5-
#[derive(Clone, PartialEq, Eq)]
5+
#[derive(Clone)]
66
pub struct AttrStore<Attr, Value>
77
where
88
Attr: Eq + std::hash::Hash + Copy,

crates/utils/src/attr/types.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ attr_set! {
1010
CounterFSM: "counter_fsm",
1111
};
1212
};
13-
numeric {
14-
};
13+
numeric {};
14+
float {};
1515
}
1616

1717
attr_set! {
1818
port_attrs;
1919
flag {};
2020
numeric {};
21+
float {};
2122
}

crates/utils/src/macros.rs

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -124,31 +124,41 @@ attr_set! {
124124
}
125125
*/
126126
macro_rules! attr_set {
127-
(
128-
$module:ident;
129-
flag {
130-
$(
131-
$flag_tokens:tt
132-
)*
133-
};
134-
numeric {
135-
$(
136-
$num_tokens:tt
137-
)*
138-
};
139-
) => {
140-
pub mod $module {
141-
$crate::attr_enum! {
142-
enum Bool;
143-
$($flag_tokens)*
144-
}
127+
(
128+
$module:ident;
129+
flag {
130+
$(
131+
$flag_tokens:tt
132+
)*
133+
};
134+
numeric {
135+
$(
136+
$num_tokens:tt
137+
)*
138+
};
139+
float {
140+
$(
141+
$float_tokens:tt
142+
)*
143+
};
144+
) => {
145+
pub mod $module {
146+
$crate::attr_enum! {
147+
enum Bool;
148+
$($flag_tokens)*
149+
}
145150

146-
$crate::attr_enum! {
147-
enum Num;
148-
$($num_tokens)*
149-
}
151+
$crate::attr_enum! {
152+
enum Num;
153+
$($num_tokens)*
154+
}
150155

151-
pub type Attrs = $crate::Attributes<Bool, Num>;
152-
}
153-
};
156+
$crate::attr_enum! {
157+
enum Float;
158+
$($float_tokens)*
159+
}
160+
161+
pub type Attrs = $crate::Attributes<Bool, Num, Float>;
162+
}
163+
};
154164
}

0 commit comments

Comments
 (0)