diff options
Diffstat (limited to 'storage/innobase/include/fut0lst.ic')
-rw-r--r-- | storage/innobase/include/fut0lst.ic | 108 |
1 files changed, 64 insertions, 44 deletions
diff --git a/storage/innobase/include/fut0lst.ic b/storage/innobase/include/fut0lst.ic index 6c7e863b078..dcd13c61871 100644 --- a/storage/innobase/include/fut0lst.ic +++ b/storage/innobase/include/fut0lst.ic @@ -1,7 +1,24 @@ -/********************************************************************** -File-based list utilities +/***************************************************************************** + +Copyright (c) 1995, 2009, Innobase Oy. All Rights Reserved. + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; version 2 of the License. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -(c) 1995 Innobase Oy +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 59 Temple +Place, Suite 330, Boston, MA 02111-1307 USA + +*****************************************************************************/ + +/******************************************************************//** +@file include/fut0lst.ic +File-based list utilities Created 11/28/1995 Heikki Tuuri ***********************************************************************/ @@ -26,34 +43,35 @@ Created 11/28/1995 Heikki Tuuri last element of the list; undefined if empty list */ -/************************************************************************ +/********************************************************************//** Writes a file address. */ UNIV_INLINE void flst_write_addr( /*============*/ - fil_faddr_t* faddr, /* in: pointer to file faddress */ - fil_addr_t addr, /* in: file address */ - mtr_t* mtr) /* in: mini-transaction handle */ + fil_faddr_t* faddr, /*!< in: pointer to file faddress */ + fil_addr_t addr, /*!< in: file address */ + mtr_t* mtr) /*!< in: mini-transaction handle */ { ut_ad(faddr && mtr); - ut_ad(mtr_memo_contains(mtr, buf_block_align(faddr), - MTR_MEMO_PAGE_X_FIX)); + ut_ad(mtr_memo_contains_page(mtr, faddr, MTR_MEMO_PAGE_X_FIX)); + ut_a(addr.page == FIL_NULL || addr.boffset >= FIL_PAGE_DATA); + ut_a(ut_align_offset(faddr, UNIV_PAGE_SIZE) >= FIL_PAGE_DATA); mlog_write_ulint(faddr + FIL_ADDR_PAGE, addr.page, MLOG_4BYTES, mtr); mlog_write_ulint(faddr + FIL_ADDR_BYTE, addr.boffset, MLOG_2BYTES, mtr); } -/************************************************************************ -Reads a file address. */ +/********************************************************************//** +Reads a file address. +@return file address */ UNIV_INLINE fil_addr_t flst_read_addr( /*===========*/ - /* out: file address */ - fil_faddr_t* faddr, /* in: pointer to file faddress */ - mtr_t* mtr) /* in: mini-transaction handle */ + const fil_faddr_t* faddr, /*!< in: pointer to file faddress */ + mtr_t* mtr) /*!< in: mini-transaction handle */ { fil_addr_t addr; @@ -62,86 +80,88 @@ flst_read_addr( addr.page = mtr_read_ulint(faddr + FIL_ADDR_PAGE, MLOG_4BYTES, mtr); addr.boffset = mtr_read_ulint(faddr + FIL_ADDR_BYTE, MLOG_2BYTES, mtr); + ut_a(addr.page == FIL_NULL || addr.boffset >= FIL_PAGE_DATA); + ut_a(ut_align_offset(faddr, UNIV_PAGE_SIZE) >= FIL_PAGE_DATA); return(addr); } -/************************************************************************ +/********************************************************************//** Initializes a list base node. */ UNIV_INLINE void flst_init( /*======*/ - flst_base_node_t* base, /* in: pointer to base node */ - mtr_t* mtr) /* in: mini-transaction handle */ + flst_base_node_t* base, /*!< in: pointer to base node */ + mtr_t* mtr) /*!< in: mini-transaction handle */ { - ut_ad(mtr_memo_contains(mtr, buf_block_align(base), - MTR_MEMO_PAGE_X_FIX)); + ut_ad(mtr_memo_contains_page(mtr, base, MTR_MEMO_PAGE_X_FIX)); + mlog_write_ulint(base + FLST_LEN, 0, MLOG_4BYTES, mtr); flst_write_addr(base + FLST_FIRST, fil_addr_null, mtr); flst_write_addr(base + FLST_LAST, fil_addr_null, mtr); } -/************************************************************************ -Gets list length. */ +/********************************************************************//** +Gets list length. +@return length */ UNIV_INLINE ulint flst_get_len( /*=========*/ - /* out: length */ - flst_base_node_t* base, /* in: pointer to base node */ - mtr_t* mtr) /* in: mini-transaction handle */ + const flst_base_node_t* base, /*!< in: pointer to base node */ + mtr_t* mtr) /*!< in: mini-transaction handle */ { return(mtr_read_ulint(base + FLST_LEN, MLOG_4BYTES, mtr)); } -/************************************************************************ -Gets list first node address. */ +/********************************************************************//** +Gets list first node address. +@return file address */ UNIV_INLINE fil_addr_t flst_get_first( /*===========*/ - /* out: file address */ - flst_base_node_t* base, /* in: pointer to base node */ - mtr_t* mtr) /* in: mini-transaction handle */ + const flst_base_node_t* base, /*!< in: pointer to base node */ + mtr_t* mtr) /*!< in: mini-transaction handle */ { return(flst_read_addr(base + FLST_FIRST, mtr)); } -/************************************************************************ -Gets list last node address. */ +/********************************************************************//** +Gets list last node address. +@return file address */ UNIV_INLINE fil_addr_t flst_get_last( /*==========*/ - /* out: file address */ - flst_base_node_t* base, /* in: pointer to base node */ - mtr_t* mtr) /* in: mini-transaction handle */ + const flst_base_node_t* base, /*!< in: pointer to base node */ + mtr_t* mtr) /*!< in: mini-transaction handle */ { return(flst_read_addr(base + FLST_LAST, mtr)); } -/************************************************************************ -Gets list next node address. */ +/********************************************************************//** +Gets list next node address. +@return file address */ UNIV_INLINE fil_addr_t flst_get_next_addr( /*===============*/ - /* out: file address */ - flst_node_t* node, /* in: pointer to node */ - mtr_t* mtr) /* in: mini-transaction handle */ + const flst_node_t* node, /*!< in: pointer to node */ + mtr_t* mtr) /*!< in: mini-transaction handle */ { return(flst_read_addr(node + FLST_NEXT, mtr)); } -/************************************************************************ -Gets list prev node address. */ +/********************************************************************//** +Gets list prev node address. +@return file address */ UNIV_INLINE fil_addr_t flst_get_prev_addr( /*===============*/ - /* out: file address */ - flst_node_t* node, /* in: pointer to node */ - mtr_t* mtr) /* in: mini-transaction handle */ + const flst_node_t* node, /*!< in: pointer to node */ + mtr_t* mtr) /*!< in: mini-transaction handle */ { return(flst_read_addr(node + FLST_PREV, mtr)); } |