--- parser3/src/include/pa_memory.h 2020/05/12 09:56:39 1.38 +++ parser3/src/include/pa_memory.h 2024/11/04 03:53:25 1.45 @@ -1,15 +1,15 @@ /** @file Parser: memory reference counting classes decls. - Copyright (c) 2001-2017 Art. Lebedev Studio (http://www.artlebedev.com) + Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com) - Author: Alexandr Petrosian (http://paf.design.ru) + Authors: Konstantin Morshnev , Alexandr Petrosian */ #ifndef PA_MEMORY_H #define PA_MEMORY_H -#define IDENT_PA_MEMORY_H "$Id: pa_memory.h,v 1.38 2020/05/12 09:56:39 moko Exp $" +#define IDENT_PA_MEMORY_H "$Id: pa_memory.h,v 1.45 2024/11/04 03:53:25 moko Exp $" // include @@ -42,18 +42,19 @@ inline void *pa_malloc_atomic(size_t siz return pa_fail_alloc("allocate clean", size); } -/// @a length may be null, which mean "autocalc it" -inline char *pa_strdup(const char* auto_variable_never_null, size_t helper_length=0) { - size_t known_length= helper_length ? helper_length : strlen(auto_variable_never_null); - - size_t size=known_length+1; - if(char *result=static_cast(GC_MALLOC_ATOMIC(size))) { +/// length may be zero, and this is normal +inline char *pa_strdup(const char* auto_variable_never_null, size_t known_length) { + if(char *result=static_cast(GC_MALLOC_ATOMIC(known_length+1))) { memcpy(result, auto_variable_never_null, known_length); result[known_length]=0; return result; } - return static_cast(pa_fail_alloc("allocate clean", size)); + return static_cast(pa_fail_alloc("allocate clean", known_length+1)); +} + +inline char *pa_strdup(const char* auto_variable_never_null) { + return pa_strdup(auto_variable_never_null, strlen(auto_variable_never_null)); } inline void pa_free(void *ptr) { @@ -146,4 +147,7 @@ inline char *strdup(const char*, size_t) #endif // _MSC_VER +void pa_gc_collect(bool forced=false); +void pa_gc_set_free_space_divisor(int); + #endif