cairo_lang_sierra/extensions/modules/int/
signed128.rs

1use 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
11/// Type for i128.
12pub 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}