/*	
 *	clipgc.h
 *
 *	P/ECE用ガーベージコレクター
 *
 *	「K.Sasada's Home Page」(http://www.namikilab.tuat.ac.jp/~sasada/)さんの
 *	『PiGC : P/ECE 用ガベージコレクター』(http://www.namikilab.tuat.ac.jp/~sasada/prog/pigc.html)
 *	の実装を参考にさせて頂きました。ありがとうございます。
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2009 Naoyuki Sawa
 *
 *	* Tue Jul 22 07:00:00 JST 2004 Naoyuki Sawa
 *	- 作成開始。
 */
#ifndef __CLIP_GC_H__
#define __CLIP_GC_H__

/****************************************************************************
 *	アプリケーション用関数
 ****************************************************************************/

/* ガーベージコレクターを初期化します。
 * [note]
 *	* gc_init()を呼ぶと、pceHeapAlloc()がガーベージコレクター対応となります。
 *	  2004/06/22現在、malloc(),calloc(),realloc(),strdup()もpceHeapAlloc()を利用しているので、
 *	  これらの関数もガーベージコレクター対応となります。
 *	* gc_init()を呼んだアプリケーションは、終了前に必ずgc_free()を呼んでください。
 *	  gc_free()を呼ばずに終了すると、P/ECEがハングアップします。
 *	  2004/06/22現在、CLiPライブラリの終了ルーチンは自動的にgc_free()を呼び出しません。
 *	  必ず、アプリケーションプログラムから明示的にgc_free()を呼び出してください。
 */
void gc_init();

/* ガーベージコレクターを終了します。
 * [note]
 *	* ガーベージコレクターが初期化されていなかった場合は、何もしません。
 */
void gc_free();

/* 直ちにガーベージコレクターを起動します。
 * [note]
 *	* 通常は、pceHeapAlloc()の中で自動的にガーベージコレクターが起動します。
 *	  アプリケーションプログラムが明示的にガーベージコレクターを起動する必要はありません。
 *	* 処理時間に余裕のある時にgc_run()を呼んで明示的にガーベージコレクターを起動し、
 *	  その後のガーベージコレクション処理時間を節約するのが、この関数の利用法です。
 *	* Sat Jun 20 01:31:13 JST 2009 Naoyuki Sawa 追記
 *	- gc_run()に排他制御を追加しました。割り込みルーチン内でGCが起動しても安全です。
 */
void gc_run();

#endif /*__CLIP_GC_H__*/
