| /** @file | |
| Utility functions for performing basic math operations constrained within a | |
| modulus. | |
| These functions are intended to simplify small changes to a value which much | |
| remain within a specified modulus. Changes must be less than or equal to | |
| the modulus specified by MaxVal. | |
| Copyright (c) 2012, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials are licensed and made available | |
| under the terms and conditions of the BSD License which accompanies this | |
| distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php. | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #ifndef _MODULO_UTIL_H | |
| #define _MODULO_UTIL_H | |
| #include <Uefi.h> | |
| #include <sys/EfiCdefs.h> | |
| __BEGIN_DECLS | |
| /** Counter = (Counter + 1) % MaxVal; | |
| Counter is always expected to be LESS THAN MaxVal. | |
| 0 <= Counter < MaxVal | |
| @param[in] Counter The value to be incremented. | |
| @param[in] MaxVal Modulus of the operation. | |
| @return Returns the result of incrementing Counter, modulus MaxVal. | |
| If Counter >= MaxVal, returns -1. | |
| **/ | |
| INT32 | |
| EFIAPI | |
| ModuloIncrement( | |
| UINT32 Counter, | |
| UINT32 MaxVal | |
| ); | |
| /** Counter = (Counter - 1) % MaxVal; | |
| Counter is always expected to be LESS THAN MaxVal. | |
| 0 <= Counter < MaxVal | |
| @param[in] Counter The value to be decremented. | |
| @param[in] MaxVal Modulus of the operation. | |
| @return Returns the result of decrementing Counter, modulus MaxVal. | |
| If Counter >= MaxVal, returns -1. | |
| **/ | |
| INT32 | |
| EFIAPI | |
| ModuloDecrement( | |
| UINT32 Counter, | |
| UINT32 MaxVal | |
| ); | |
| /** Counter = (Counter + Increment) % MaxVal; | |
| @param[in] Counter The value to be incremented. | |
| @param[in] Increment The value to add to Counter. | |
| @param[in] MaxVal Modulus of the operation. | |
| @return Returns the result of adding Increment to Counter, modulus MaxVal, | |
| or -1 if Increment is larger than MaxVal. | |
| **/ | |
| INT32 | |
| EFIAPI | |
| ModuloAdd ( | |
| UINT32 Counter, | |
| UINT32 Increment, | |
| UINT32 MaxVal | |
| ); | |
| /** Increment Counter but don't increment past MaxVal. | |
| @param[in] Counter The value to be decremented. | |
| @param[in] MaxVal The upper bound for Counter. Counter < MaxVal. | |
| @return Returns the result of incrementing Counter. | |
| **/ | |
| UINT32 | |
| EFIAPI | |
| BoundIncrement( | |
| UINT32 Counter, | |
| UINT32 MaxVal | |
| ); | |
| /** Decrement Counter but don't decrement past zero. | |
| @param[in] Counter The value to be decremented. | |
| @return Returns the result of decrementing Counter. | |
| **/ | |
| UINT32 | |
| EFIAPI | |
| BoundDecrement( | |
| UINT32 Counter | |
| ); | |
| __END_DECLS | |
| #endif /* _MODULO_UTIL_H */ |