Skip to content
This repository has been archived by the owner on Apr 7, 2022. It is now read-only.

Commit

Permalink
new: Memset
Browse files Browse the repository at this point in the history
  • Loading branch information
RomainTHD committed Oct 4, 2020
1 parent 675a56d commit eeb5071
Showing 1 changed file with 31 additions and 26 deletions.
57 changes: 31 additions & 26 deletions src/std/memory.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -180,54 +180,59 @@ namespace std::memory {
}

/**
* Mémoire initialisée à 0
* Set un tableau et le modifie
*
* @param nb Nombre d'objets
* @param size Taille d'un objet
* @tparam T Type d'une case
* @param ptr Pointeur
* @param value Valeur
* @param nb Nombre de cases à set
*
* @return Pointeur
* @return Tableau
*/
void* calloc(size_t nb, size_t size) {
void* ptr = malloc(nb*size);

for (u32 i=0; i<nb*size; i++) {
((byte*) ptr)[i] = 0;
template<typename T>
T* memset(void* ptr, T value, u64 nb) {
for (u64 i=0; i<nb; i++) {
((T*) ptr)[i] = value;
}
return (T*) ptr;
}

return ptr;
/**
* Set un tableau et le modifie
*
* @param ptr Pointeur
* @param value Valeur
* @param nb Nombre de cases à set
*
* @return Tableau
*/
void* memset(void* ptr, int value, u64 nb) {
return memset<byte>(ptr, value, nb);
}

/**
* Tableau initialisé à 0
* Mémoire initialisée à 0
*
* @tparam T Type
* @param nb Nombre de cases
* @param nb Nombre d'objets
* @param size Taille d'un objet
*
* @return Pointeur
*/
template<typename T>
void* calloc(size_t nb) {
return calloc(nb, sizeof(T));
void* calloc(size_t nb, size_t size) {
return memset(malloc(nb*size), 0, nb);
}

/**
* Tableau initialisé
* Tableau initialisé à 0
*
* @tparam T Type
* @param nb Nombre de cases
* @param value Valeur pour initialiser
*
* @return Pointeur
*/
template<typename T>
void* calloc(size_t nb, T value) {
void* ptr = malloc(nb*sizeof(T));

for (u32 i=0; i<nb*sizeof(T); i++) {
((T*) ptr)[i] = value;
}

return ptr;
T* calloc(size_t nb) {
return memset<T>(malloc(nb*sizeof(T)), 0, nb);
}

/**
Expand Down

0 comments on commit eeb5071

Please sign in to comment.