cairo_lang_sierra/extensions/modules/int/
signed128.rs1use super::signed::{SintDiffLibfunc, SintOperationLibfunc, SintTraits};
2use super::unsigned128::Uint128Type;
3use super::{
4 IntConstLibfunc, IntEqualLibfunc, IntFromFelt252Libfunc, IntToFelt252Libfunc, IntTraits,
5 IntType,
6};
7use crate::define_libfunc_hierarchy;
8use crate::extensions::NamedType;
9use crate::ids::GenericTypeId;
10
11pub type Sint128Type = IntType<Sint128Traits>;
13
14define_libfunc_hierarchy! {
15 pub enum Sint128Libfunc {
16 Equal(IntEqualLibfunc<Sint128Traits>),
17 Const(IntConstLibfunc<Sint128Traits>),
18 ToFelt252(IntToFelt252Libfunc<Sint128Traits>),
19 FromFelt252(IntFromFelt252Libfunc<Sint128Traits>),
20 Operation(SintOperationLibfunc<Sint128Traits>),
21 Diff(SintDiffLibfunc<Sint128Traits>),
22 }, Sint128Concrete
23}
24
25#[derive(Default)]
26pub struct Sint128Traits;
27
28impl SintTraits for Sint128Traits {
29 const OVERFLOWING_ADD: &'static str = "i128_overflowing_add_impl";
30 const OVERFLOWING_SUB: &'static str = "i128_overflowing_sub_impl";
31 const DIFF: &'static str = "i128_diff";
32 const UNSIGNED_INT_TYPE: GenericTypeId = <Uint128Type as NamedType>::ID;
33}
34
35impl IntTraits for Sint128Traits {
36 type IntType = i128;
37 const GENERIC_TYPE_ID: GenericTypeId = GenericTypeId::new_inline("i128");
38 const IS_SMALL: bool = false;
39 const CONST: &'static str = "i128_const";
40 const EQUAL: &'static str = "i128_eq";
41 const TO_FELT252: &'static str = "i128_to_felt252";
42 const TRY_FROM_FELT252: &'static str = "i128_try_from_felt252";
43}