1b1466ae0SMasatake YAMATO /* 2b1466ae0SMasatake YAMATO * 3b1466ae0SMasatake YAMATO * Copyright (c) 2017, Red Hat, Inc. 4b1466ae0SMasatake YAMATO * Copyright (c) 2017, Masatake YAMATO 5b1466ae0SMasatake YAMATO * 6b1466ae0SMasatake YAMATO * This source code is released for free distribution under the terms of the 7b1466ae0SMasatake YAMATO * GNU General Public License version 2 or (at your option) any later version. 8b1466ae0SMasatake YAMATO * 9759d281dSK.Takata * Facility for delayed memory releasing, inspired from AutoreleasePool 10b1466ae0SMasatake YAMATO * of OpenStep. 11b1466ae0SMasatake YAMATO */ 12b1466ae0SMasatake YAMATO 13b1466ae0SMasatake YAMATO #ifndef CTAGS_MAIN_TRASH_H 14b1466ae0SMasatake YAMATO #define CTAGS_MAIN_TRASH_H 15b1466ae0SMasatake YAMATO 16869a1bbcSMasatake YAMATO /* 17869a1bbcSMasatake YAMATO * INCLUDE FILES 18869a1bbcSMasatake YAMATO */ 19869a1bbcSMasatake YAMATO 20869a1bbcSMasatake YAMATO #include "general.h" /* must always come first */ 21869a1bbcSMasatake YAMATO 22869a1bbcSMasatake YAMATO 23869a1bbcSMasatake YAMATO /* 24869a1bbcSMasatake YAMATO * DATA DECLARATIONS 25869a1bbcSMasatake YAMATO */ 26869a1bbcSMasatake YAMATO 27b1466ae0SMasatake YAMATO typedef void (* TrashBoxDestroyItemProc) (void *); 28b1466ae0SMasatake YAMATO typedef struct sTrashBox TrashBox; 29b1466ae0SMasatake YAMATO 30869a1bbcSMasatake YAMATO /* 31869a1bbcSMasatake YAMATO * MACROS 32869a1bbcSMasatake YAMATO */ 33869a1bbcSMasatake YAMATO 34869a1bbcSMasatake YAMATO #define DEFAULT_TRASH_BOX(PTR,PROC) trashBoxPut(NULL,PTR,(TrashBoxDestroyItemProc)PROC) 35869a1bbcSMasatake YAMATO #define DEFAULT_TRASH_BOX_TAKE_BACK(PTR) trashBoxTakeBack(NULL,PTR) 36869a1bbcSMasatake YAMATO 37869a1bbcSMasatake YAMATO #define PARSER_TRASH_BOX(PTR,PROC) parserTrashBoxPut(PTR,(TrashBoxDestroyItemProc)PROC) 38869a1bbcSMasatake YAMATO #define PARSER_TRASH_BOX_TAKE_BACK(PTR) parserTrashBoxTakeBack(PTR) 39869a1bbcSMasatake YAMATO 40869a1bbcSMasatake YAMATO 41869a1bbcSMasatake YAMATO /* 42869a1bbcSMasatake YAMATO * FUNCTION PROTOTYPES 43869a1bbcSMasatake YAMATO */ 44869a1bbcSMasatake YAMATO 45b1466ae0SMasatake YAMATO extern TrashBox* trashBoxNew (void); 46b1466ae0SMasatake YAMATO extern TrashBox* trashBoxStack (TrashBox* trash_box); 47b1466ae0SMasatake YAMATO extern void trashBoxDelete (TrashBox* trash_box); 48b1466ae0SMasatake YAMATO extern void* trashBoxPut (TrashBox* trash_box, void* item, TrashBoxDestroyItemProc destroy); 49b1466ae0SMasatake YAMATO extern TrashBoxDestroyItemProc trashBoxTakeBack (TrashBox* trash_box, void* item); 50b1466ae0SMasatake YAMATO extern void trashBoxFree (TrashBox* trash_box, void* item); 51b1466ae0SMasatake YAMATO extern void trashBoxMakeEmpty (TrashBox* trash_box); 52b1466ae0SMasatake YAMATO 53*b19b9175SMasatake YAMATO /* A parser trash box is prepared when `parser' method of a parser is called. 54*b19b9175SMasatake YAMATO * The parser can register a pair of a memory object and destructor for the object to 55*b19b9175SMasatake YAMATO * the trash box with parserTrashBoxPut (). 56*b19b9175SMasatake YAMATO * 57*b19b9175SMasatake YAMATO * The registered memory objects are destructed after `parser' method is finished in 58*b19b9175SMasatake YAMATO * the main side. You can delay the destruction with parserTrashBoxPut (). 59*b19b9175SMasatake YAMATO * 60*b19b9175SMasatake YAMATO * You can unregister the pair in the `parser' method with parserTrashBoxTakeBack (). 61*b19b9175SMasatake YAMATO * In that case, specify the memory object of the pair as the argument. 62*b19b9175SMasatake YAMATO */ 636749a76eSMasatake YAMATO extern void* parserTrashBoxPut (void* item, TrashBoxDestroyItemProc destroy); 646749a76eSMasatake YAMATO extern TrashBoxDestroyItemProc parserTrashBoxTakeBack (void* item); 656749a76eSMasatake YAMATO 66b1466ae0SMasatake YAMATO #endif /* CTAGS_MAIN_TRASH_H */ 67