xref: /Universal-ctags/main/trashbox.h (revision b19b9175e2f7092f37ad64a02fe56b47d042b07b)
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