メモ

おなかへったー。でもうちには食べ物が何もないよ。

page_header_set_field関数他で頻繁に登場するut_adは通常のビルドでは何もしない。

#ifdef UNIV_DEBUG
#define ut_ad(EXPR)  	ut_a(EXPR)
#define ut_d(EXPR)	do {EXPR;} while (0)
#else
#define ut_ad(EXPR)
#define ut_d(EXPR)
#endif

とりあえず、以下のコードは、

UNIV_INLINE
void
page_header_set_field(
/*==================*/
	page_t*	page,	/* in: page */
	ulint	field,	/* in: PAGE_LEVEL, ... */
	ulint	val)	/* in: value */
{
	ut_ad(page);
	ut_ad(field <= PAGE_N_RECS);
	ut_ad(field == PAGE_N_HEAP || val < UNIV_PAGE_SIZE);
	ut_ad(field != PAGE_N_HEAP || (val & 0x7fff) < UNIV_PAGE_SIZE);

	mach_write_to_2(page + PAGE_HEADER + field, val);
}

こう読んでしまってよいっぽい。

UNIV_INLINE
void
page_header_set_field(
/*==================*/
	page_t*	page,	/* in: page */
	ulint	field,	/* in: PAGE_LEVEL, ... */
	ulint	val)	/* in: value */
{
	mach_write_to_2(page + PAGE_HEADER + field, val);
}

というか亀田の世界戦、かなりしんどかったですね〜。奇跡的な判定勝利。