mirror of https://github.com/acidanthera/audk.git
106 lines
2.8 KiB
C
106 lines
2.8 KiB
C
/** @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 */
|