Mass++ Common Libraries v2.7.5
 All Classes Namespaces Files Functions Variables Enumerations Macros
MemoryFunctions.cpp
Go to the documentation of this file.
1 
12 #include "stdafx.h"
13 #include "MemoryFunctions.h"
14 
15 #include <stdio.h>
16 #include <stdlib.h>
17 
18 
19 // fill array
20 void fillarray( void* p, void* value, size_t size, size_t n ) {
21  // void* -> char* (because void* doesn't have the size of element)
22  char* cp = (char*)p;
23  char* cv = (char*)value;
24 
25  // fill
26  for( unsigned int i = 0; i < n; i++ ) {
27  char* p_i = cp + ( size * i );
28  for( unsigned int j = 0; j < size; j++ ) {
29  p_i[ j ] = cv[ j ];
30  }
31  }
32 }
33 
34 // fill 0
35 void fillzero( void* p, size_t n ) {
36  unsigned char zero = 0;
37 
38  fillarray( p, &zero, 1, n );
39 }
40 
41 // is big endian
42 bool isbigendian() {
43  // create 2 bytes data
44  short num = 1; // (Big: 00 01, Little: 01 00)
45 
46  // get first byte
47  char* c = (char*)&num;
48 
49  return ( *c == 0 );
50 }
51 
52 // is little endian
54  return !isbigendian();
55 }
56 
57 // memory reverse
58 void memreverse( void* p, size_t n ) {
59  // check parameters
60  if( p == NULL || n == 0 ) {
61  return;
62  }
63 
64  // create buffer
65  char* buffer = new char[ n ];
66 
67  // copy to buffer
68  memcpy( buffer, p, n );
69 
70  // reverse
71  char* cp = (char*)p;
72  for( unsigned int i = 0; i < n; i++ ) {
73  cp[ i ] = buffer[ n - 1 - i ];
74  }
75 
76  // delete
77  delete[] buffer;
78 }
79 
80 // memory swap
81 void memswap( void* p0, void* p1, size_t n ) {
82  // check parameters
83  if( p0 == NULL || p1 == NULL || n == 0 ) {
84  return;
85  }
86 
87  // create buffer
88  void* tmp = malloc( n );
89 
90  // copy
91  memcpy( tmp, p0, n );
92  memcpy( p0, p1, n );
93  memcpy( p1, tmp, n );
94 
95  // free
96  free( tmp );
97 }
bool isbigendian()
judges whether the system is big endian
void fillarray(void *p, void *value, size_t size, size_t n)
This function assigns the specified value to each element.
#define NULL
Definition: CoreMacros.h:18
void memswap(void *p0, void *p1, size_t n)
swaps memory ( p0 <-> p1 )
interfaces of function which deals with memory
bool islittleendian()
gets the system is little endian
void memreverse(void *p, size_t n)
reverse memory (ex. Big Endian <-> Little Endian)
void fillzero(void *p, size_t n)
This function fills a block of memory zeros.