• Advertisement
Sign in to follow this  

Custom memory and addons

This topic is 1740 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hy smile.png

 

 

this method:

AS_API int asSetGlobalMemoryFunctions(asALLOCFUNC_t allocFunc, asFREEFUNC_t freeFunc);

 

work only with AngelScript engine, module, contex, but - AS have addons.

Share this post


Link to post
Share on other sites
Advertisement

i think i'ts no big task, i can modificate addons, but i have small problem for do this

 

in angelscript.h - have

 

 
typedef void *(*asALLOCFUNC_t)(size_t);
typedef void (*asFREEFUNC_t)(void *);

 

 

but  asNEW, asDELTE, asNEWARRAY and asDELETEARRAY we can't use from CScriptArray besoce he live in
 
as_memory.h
 
extern asALLOCFUNC_t userAlloc;
extern asFREEFUNC_t  userFree;


// We don't overload the new operator as that would affect the application as well


#ifndef AS_DEBUG


#define asNEW(x)        new(userAlloc(sizeof(x))) x
#define asDELETE(ptr,x) {void *tmp = ptr; (ptr)->~x(); userFree(tmp);}


#define asNEWARRAY(x,cnt)  (x*)userAlloc(sizeof(x)*cnt)
#define asDELETEARRAY(ptr) userFree(ptr)


#else


typedef void *(*asALLOCFUNCDEBUG_t)(size_t, const char *, unsigned int);


#define asNEW(x)        new(((asALLOCFUNCDEBUG_t)(userAlloc))(sizeof(x), __FILE__, __LINE__)) x
#define asDELETE(ptr,x) {void *tmp = ptr; (ptr)->~x(); userFree(tmp);}


#define asNEWARRAY(x,cnt)  (x*)((asALLOCFUNCDEBUG_t)(userAlloc))(sizeof(x)*cnt, __FILE__, __LINE__)
#define asDELETEARRAY(ptr) userFree(ptr)


#endif

 

need move asNEW, asDELTE, asNEWARRAY and asDELETEARRAY from as_memory to angelscript.h for we can use this. 

 

added:

 

ans so, if addons will be use asNEW, what will be with this code:

 

 

#if defined(__S3E__) // Marmalade doesn't understand (nothrow)
newBuffer = (SArrayBuffer*)new asBYTE[sizeof(SArrayBuffer)-1 + elementSize*(buffer->numElements + delta)];
#else
newBuffer = (SArrayBuffer*)new (nothrow) asBYTE[sizeof(SArrayBuffer)-1 + elementSize*(buffer->numElements + delta)];
#endif
 

 

Edited by FDsagizi

Share this post


Link to post
Share on other sites

Rather than exposing the internal macros, it would be easier just to use set a pair of global function pointers and declare a new pair of macros. That way your code won't be so tightly tied to the internals of the library.

 

Remember that the add-ons are not part of the core library. They should be treated as if they are part of the application. How are you doing the memory allocations for your own types that you register with the library?

Share this post


Link to post
Share on other sites

Remember that the add-ons are not part of the core library. They should be treated as if they are part of the application. How are you doing the memory allocations for your own types that you register with the library?

 

So, it's good question, for my types i use my memory allocator.
 
i understand you. You right!
 
What you think, about make possible set custom memory allocator for addons, example asSetGlobalMemoryFunctions_for_CScriptScrint. ( i use standard CScriptArray, and i think -  many guys too ) that it would be convenient, to use from a box!

Share this post


Link to post
Share on other sites

Yes. I do think it would be good to allow the use of custom memory allocators in the add-ons too. I just haven't spent any time on thinking about the best way of doing it.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement