Botan 1.10.17

mem_ops.h
Go to the documentation of this file.
1 /*
2 * Memory Operations
3 * (C) 1999-2009 Jack Lloyd
4 *
5 * Distributed under the terms of the Botan license
6 */
7
8 #ifndef BOTAN_MEMORY_OPS_H__
9 #define BOTAN_MEMORY_OPS_H__
10
11 #include <botan/types.h>
12 #include <cstring>
13
14 namespace Botan {
15
16 /**
17 * Copy memory
18 * @param out the destination array
19 * @param in the source array
20 * @param n the number of elements of in/out
21 */
22 template<typename T> inline void copy_mem(T* out, const T* in, size_t n)
23 {
24 std::memmove(out, in, sizeof(T)*n);
25 }
26
27 /**
28 * Zeroize memory
29 * @param ptr a pointer to an array
30 * @param n the number of Ts pointed to by ptr
31 */
32 template<typename T> inline void clear_mem(T* ptr, size_t n)
33 {
34 if(n) // avoid glibc warning if n == 0
35 std::memset(ptr, 0, sizeof(T)*n);
36 }
37
38 /**
39 * Set memory to a fixed value
40 * @param ptr a pointer to an array
41 * @param n the number of Ts pointed to by ptr
42 * @param val the value to set each byte to
43 */
44 template<typename T>
45 inline void set_mem(T* ptr, size_t n, byte val)
46 {
47 std::memset(ptr, val, sizeof(T)*n);
48 }
49
50 /**
51 * Memory comparison, input insensitive
52 * @param p1 a pointer to an array
53 * @param p2 a pointer to another array
54 * @param n the number of Ts in p1 and p2
55 * @return true iff p1[i] == p2[i] forall i in [0...n)
56 */
57 template<typename T> inline bool same_mem(const T* p1, const T* p2, size_t n)
58 {
59 bool is_same = true;
60
61 for(size_t i = 0; i != n; ++i)
62 is_same &= (p1[i] == p2[i]);
63
64 return is_same;
65 }
66
67 }
68
69 #endif
Botan::same_mem
bool same_mem(const T *p1, const T *p2, size_t n)
Definition: mem_ops.h:57
Botan::clear_mem
void clear_mem(T *ptr, size_t n)
Definition: mem_ops.h:32
Botan::byte
unsigned char byte
Definition: types.h:22
Botan::copy_mem
void copy_mem(T *out, const T *in, size_t n)
Definition: mem_ops.h:22
Botan
Definition: algo_base.h:14
Botan::set_mem
void set_mem(T *ptr, size_t n, byte val)
Definition: mem_ops.h:45