rutabaga_gfx/
macros.rs

1// Copyright 2021 The ChromiumOS Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5//! Macros for rutabaga_gfx.
6
7#[macro_export]
8macro_rules! checked_range {
9    ($x:expr; <= $y:expr) => {
10        if $x <= $y {
11            Ok(())
12        } else {
13            Err(RutabagaError::CheckedRange {
14                field1: (stringify!($x), $x as usize),
15                field2: (stringify!($y), $y as usize),
16            })
17        }
18    };
19    ($x:ident <= $y:ident) => {
20        check_range!($x; <= $y)
21    };
22}
23
24#[macro_export]
25macro_rules! checked_arithmetic {
26    ($x:ident $op:ident $y:ident $op_name:expr) => {
27        $x.$op($y).ok_or_else(|| RutabagaError::CheckedArithmetic {
28            field1: (stringify!($x), $x as usize),
29            field2: (stringify!($y), $y as usize),
30            op: $op_name,
31        })
32    };
33    ($x:ident + $y:ident) => {
34        checked_arithmetic!($x checked_add $y "+")
35    };
36    ($x:ident - $y:ident) => {
37        checked_arithmetic!($x checked_sub $y "-")
38    };
39    ($x:ident * $y:ident) => {
40        checked_arithmetic!($x checked_mul $y "*")
41    };
42    ($x:ident / $y:ident) => {
43        checked_arithmetic!($x checked_div $y "/")
44    };
45}