File: ut0byte.h

package info (click to toggle)
mysql-8.0 8.0.44-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,272,892 kB
  • sloc: cpp: 4,685,345; ansic: 412,712; pascal: 108,395; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; python: 21,816; sh: 17,285; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,083; makefile: 1,793; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (92 lines) | stat: -rw-r--r-- 3,697 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*****************************************************************************

Copyright (c) 1994, 2025, Oracle and/or its affiliates.

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License, version 2.0, as published by the
Free Software Foundation.

This program is designed to work with certain software (including
but not limited to OpenSSL) that is licensed under separate terms,
as designated in a particular file or component or in included license
documentation.  The authors of MySQL hereby grant you an additional
permission to link the program and your derivative works with the
separately licensed software that they have either included with
the program or referenced in the documentation.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0,
for more details.

You should have received a copy of the GNU General Public License along with
this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA

*****************************************************************************/

/** @file include/ut0byte.h
 Utilities for byte operations

 Created 1/20/1994 Heikki Tuuri
 ***********************************************************************/

#ifndef ut0byte_h
#define ut0byte_h

#include "univ.i"
#include "ut0ut.h"

/** Creates a 64-bit integer out of two 32-bit integers.
@param[in]      high            high-order 32 bits
@param[in]      low             low-order 32 bits
@return created integer */
constexpr uint64_t ut_ull_create(uint32_t high, uint32_t low);

/** Rounds a 64-bit integer downward to a multiple of a power of 2.
@param[in]      n               number to be rounded
@param[in]      align_no        align by this number
@return rounded value */
static inline uint64_t ut_uint64_align_down(uint64_t n, ulint align_no);

/** Rounds uint64_t upward to a multiple of a power of 2.
@param[in]      n               number to be rounded
@param[in]      align_no        align by this number
@return rounded value */
static inline uint64_t ut_uint64_align_up(uint64_t n, ulint align_no);

/** The following function rounds up a pointer to the nearest aligned address.
@param[in]      ptr             pointer
@param[in]      align_no        align by this number
@return aligned pointer */
static inline void *ut_align(const void *ptr, ulint align_no);

/** The following function rounds down a pointer to the nearest aligned address.
@param[in]      ptr             pointer
@param[in]      align_no        align by this number
@return aligned pointer */
static inline void *ut_align_down(const void *ptr, ulint align_no);

/** The following function computes the offset of a pointer from the nearest
aligned address.
@param[in]      ptr             pointer
@param[in]      align_no        align by this number
@return distance from aligned pointer */
static inline ulint ut_align_offset(const void *ptr, ulint align_no);

/** Gets the nth bit of a ulint.
@param[in]      a       ulint
@param[in]      n       nth bit requested
@return true if nth bit is 1; 0th bit is defined to be the least significant */
static inline bool ut_bit_get_nth(ulint a, ulint n);

/** Sets the nth bit of a ulint.
@param[in]      a       ulint
@param[in]      n       nth bit requested
@param[in]      val     value for the bit to set
@return the ulint with the bit set as requested */
static inline ulint ut_bit_set_nth(ulint a, ulint n, bool val);

#include "ut0byte.ic"

#endif