/** @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 */ |