📄 qam.h
字号:
/*- * See the file LICENSE for redistribution information. * * Copyright (c) 1999-2002 * Sleepycat Software. All rights reserved. * * $Id: qam.h,v 11.38 2002/08/06 06:11:21 bostic Exp $ */#ifndef _DB_QAM_H_#define _DB_QAM_H_/* * QAM data elements: a status field and the data. */typedef struct _qamdata { u_int8_t flags; /* 00: delete bit. */#define QAM_VALID 0x01#define QAM_SET 0x02 u_int8_t data[1]; /* Record. */} QAMDATA;struct __queue; typedef struct __queue QUEUE;struct __qcursor; typedef struct __qcursor QUEUE_CURSOR;struct __qcursor { /* struct __dbc_internal */ __DBC_INTERNAL /* Queue private part */ /* Per-thread information: queue private. */ db_recno_t recno; /* Current record number. */ u_int32_t flags;};typedef struct __mpfarray { u_int32_t n_extent; /* Number of extents in table. */ u_int32_t low_extent; /* First extent open. */ u_int32_t hi_extent; /* Last extent open. */ struct __qmpf { int pinref; DB_MPOOLFILE *mpf; } *mpfarray; /* Array of open extents. */} MPFARRAY;/* * The in-memory, per-tree queue data structure. */struct __queue { db_pgno_t q_meta; /* Database meta-data page. */ db_pgno_t q_root; /* Database root page. */ int re_pad; /* Fixed-length padding byte. */ u_int32_t re_len; /* Length for fixed-length records. */ u_int32_t rec_page; /* records per page */ u_int32_t page_ext; /* Pages per extent */ MPFARRAY array1, array2; /* File arrays. */ /* Extent file configuration: */ DBT pgcookie; /* Initialized pgcookie. */ DB_PGINFO pginfo; /* Initialized pginfo struct. */ char *path; /* Space allocated to file pathname. */ char *name; /* The name of the file. */ char *dir; /* The dir of the file. */ int mode; /* Mode to open extents. */};/* Format for queue extent names. */#define QUEUE_EXTENT "%s%c__dbq.%s.%d"typedef struct __qam_filelist { DB_MPOOLFILE *mpf; u_int32_t id;} QUEUE_FILELIST;/* * Caculate the page number of a recno * * Number of records per page = * Divide the available space on the page by the record len + header. * * Page number for record = * divide the physical record number by the records per page * add the root page number * For now the root page will always be 1, but we might want to change * in the future (e.g. multiple fixed len queues per file). * * Index of record on page = * physical record number, less the logical pno times records/page */#define CALC_QAM_RECNO_PER_PAGE(dbp) \ (((dbp)->pgsize - QPAGE_SZ(dbp)) / \ ALIGN(((QUEUE *)(dbp)->q_internal)->re_len + \ sizeof(QAMDATA) - SSZA(QAMDATA, data), sizeof(u_int32_t)))#define QAM_RECNO_PER_PAGE(dbp) (((QUEUE*)(dbp)->q_internal)->rec_page)#define QAM_RECNO_PAGE(dbp, recno) \ (((QUEUE *)(dbp)->q_internal)->q_root \ + (((recno) - 1) / QAM_RECNO_PER_PAGE(dbp)))#define QAM_RECNO_INDEX(dbp, pgno, recno) \ (((recno) - 1) - (QAM_RECNO_PER_PAGE(dbp) \ * (pgno - ((QUEUE *)(dbp)->q_internal)->q_root)))#define QAM_GET_RECORD(dbp, page, index) \ ((QAMDATA *)((u_int8_t *)(page) + \ QPAGE_SZ(dbp) + (ALIGN(sizeof(QAMDATA) - SSZA(QAMDATA, data) + \ ((QUEUE *)(dbp)->q_internal)->re_len, sizeof(u_int32_t)) * index)))#define QAM_AFTER_CURRENT(meta, recno) \ ((recno) > (meta)->cur_recno && \ ((meta)->first_recno <= (meta)->cur_recno || (recno) < (meta)->first_recno))#define QAM_BEFORE_FIRST(meta, recno) \ ((recno) < (meta)->first_recno && \ ((meta->first_recno <= (meta)->cur_recno || (recno) > (meta)->cur_recno)))#define QAM_NOT_VALID(meta, recno) \ (recno == RECNO_OOB || \ QAM_BEFORE_FIRST(meta, recno) || QAM_AFTER_CURRENT(meta, recno))/* * Log opcodes for the mvptr routine. */#define QAM_SETFIRST 0x01#define QAM_SETCUR 0x02#define QAM_TRUNCATE 0x04/* * Parameter to __qam_position. */typedef enum { QAM_READ, QAM_WRITE, QAM_CONSUME} qam_position_mode;typedef enum { QAM_PROBE_GET, QAM_PROBE_PUT, QAM_PROBE_MPF} qam_probe_mode;#define __qam_fget(dbp, pgnoaddr, flags, addrp) \ __qam_fprobe(dbp, *pgnoaddr, addrp, QAM_PROBE_GET, flags)#define __qam_fput(dbp, pageno, addrp, flags) \ __qam_fprobe(dbp, pageno, addrp, QAM_PROBE_PUT, flags)#include "dbinc_auto/qam_auto.h"#include "dbinc_auto/qam_ext.h"#endif /* !_DB_QAM_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -