melior/ir/attribute/
integer.rs1use super::{Attribute, AttributeLike};
2use crate::{
3 ir::{Type, TypeLike},
4 Error,
5};
6use mlir_sys::{
7 mlirIntegerAttrGet, mlirIntegerAttrGetValueInt, mlirIntegerAttrGetValueSInt,
8 mlirIntegerAttrGetValueUInt, MlirAttribute,
9};
10
11#[derive(Clone, Copy)]
13pub struct IntegerAttribute<'c> {
14 attribute: Attribute<'c>,
15}
16
17impl<'c> IntegerAttribute<'c> {
18 pub fn new(r#type: Type<'c>, integer: i64) -> Self {
20 unsafe { Self::from_raw(mlirIntegerAttrGet(r#type.to_raw(), integer)) }
21 }
22
23 pub fn value(&self) -> i64 {
25 unsafe { mlirIntegerAttrGetValueInt(self.to_raw()) }
26 }
27
28 pub fn signed_value(&self) -> i64 {
30 unsafe { mlirIntegerAttrGetValueSInt(self.to_raw()) }
31 }
32
33 pub fn unsigned_value(&self) -> u64 {
35 unsafe { mlirIntegerAttrGetValueUInt(self.to_raw()) }
36 }
37}
38
39attribute_traits!(IntegerAttribute, is_integer, "integer");
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44 use crate::{ir::r#type::IntegerType, test::create_test_context};
45
46 #[test]
47 fn value() {
48 let context = create_test_context();
49
50 assert_eq!(
51 IntegerAttribute::new(IntegerType::new(&context, 64).into(), 42).value(),
52 42
53 );
54 }
55}