本文整理汇总了C++中LF_ISSET函数的典型用法代码示例。如果您正苦于以下问题:C++ LF_ISSET函数的具体用法?C++ LF_ISSET怎么用?C++ LF_ISSET使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了LF_ISSET函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: __wt_conn_btree_get
/*
* __wt_conn_btree_get --
* Get an open btree file handle, otherwise open a new one.
*/
int
__wt_conn_btree_get(WT_SESSION_IMPL *session,
const char *name, const char *ckpt, const char *cfg[], uint32_t flags)
{
WT_DATA_HANDLE *dhandle;
WT_DECL_RET;
if (LF_ISSET(WT_DHANDLE_HAVE_REF))
WT_RET(
__conn_dhandle_open_lock(session, session->dhandle, flags));
else {
WT_WITH_DHANDLE_LOCK(session,
ret = __conn_dhandle_get(session, name, ckpt, flags));
WT_RET(ret);
}
dhandle = session->dhandle;
if (!LF_ISSET(WT_DHANDLE_LOCK_ONLY) &&
(!F_ISSET(dhandle, WT_DHANDLE_OPEN) ||
LF_ISSET(WT_BTREE_SPECIAL_FLAGS)))
if ((ret = __conn_btree_open(session, cfg, flags)) != 0) {
F_CLR(dhandle, WT_DHANDLE_EXCLUSIVE);
WT_TRET(__wt_writeunlock(session, dhandle->rwlock));
}
WT_ASSERT(session, ret != 0 ||
LF_ISSET(WT_DHANDLE_EXCLUSIVE) ==
F_ISSET(dhandle, WT_DHANDLE_EXCLUSIVE));
return (ret);
}
示例2: __txn_log_file_sync
/*
* __txn_log_file_sync --
* Write a log record for a file sync.
*/
static int
__txn_log_file_sync(WT_SESSION_IMPL *session, uint32_t flags, WT_LSN *lsnp)
{
WT_BTREE *btree;
WT_DECL_ITEM(logrec);
WT_DECL_RET;
size_t header_size;
uint32_t rectype = WT_LOGREC_FILE_SYNC;
int start;
bool need_sync;
const char *fmt = WT_UNCHECKED_STRING(III);
btree = S2BT(session);
start = LF_ISSET(WT_TXN_LOG_CKPT_START);
need_sync = LF_ISSET(WT_TXN_LOG_CKPT_SYNC);
WT_RET(__wt_struct_size(
session, &header_size, fmt, rectype, btree->id, start));
WT_RET(__wt_logrec_alloc(session, header_size, &logrec));
WT_ERR(__wt_struct_pack(session,
(uint8_t *)logrec->data + logrec->size, header_size,
fmt, rectype, btree->id, start));
logrec->size += (uint32_t)header_size;
WT_ERR(__wt_log_write(
session, logrec, lsnp, need_sync ? WT_LOG_FSYNC : 0));
err: __wt_logrec_free(session, &logrec);
return (ret);
}
示例3: o_set
/*
* o_set --
* Set an option's value.
*
* PUBLIC: int o_set __P((SCR *, int, u_int, const char *, u_long));
*/
int
o_set(SCR *sp, int opt, u_int flags, const char *str, u_long val)
{
OPTION *op;
/* Set a pointer to the options area. */
op = F_ISSET(&sp->opts[opt], OPT_GLOBAL) ?
&sp->gp->opts[sp->opts[opt].o_cur.val] : &sp->opts[opt];
/* Copy the string, if requested. */
if (LF_ISSET(OS_STRDUP) && (str = strdup(str)) == NULL) {
msgq(sp, M_SYSERR, NULL);
return (1);
}
/* Free the previous string, if requested, and set the value. */
if LF_ISSET(OS_DEF)
if (LF_ISSET(OS_STR | OS_STRDUP)) {
if (!LF_ISSET(OS_NOFREE) && op->o_def.str != NULL)
free(__UNCONST(op->o_def.str));
op->o_def.str = str;
} else
op->o_def.val = val;
else
if (LF_ISSET(OS_STR | OS_STRDUP)) {
示例4: ex_ldisplay
/*
* ex_ldisplay --
* Display a line without any preceding number.
*
* PUBLIC: int ex_ldisplay(SCR *, const CHAR_T *, size_t, size_t, u_int);
*/
int
ex_ldisplay(SCR *sp, const CHAR_T *p, size_t len, size_t col, u_int flags)
{
if (len > 0 && ex_prchars(sp, p, &col, len, LF_ISSET(E_C_LIST), 0))
return (1);
if (!INTERRUPTED(sp) && LF_ISSET(E_C_LIST)) {
p = L("$");
if (ex_prchars(sp, p, &col, 1, LF_ISSET(E_C_LIST), 0))
return (1);
}
if (!INTERRUPTED(sp))
(void)ex_puts(sp, "\n");
return (0);
}
示例5: ex_print
/*
* ex_print --
* Print the selected lines.
*
* PUBLIC: int ex_print(SCR *, EXCMD *, MARK *, MARK *, u_int32_t);
*/
int
ex_print(SCR *sp, EXCMD *cmdp, MARK *fp, MARK *tp, u_int32_t flags)
{
GS *gp;
recno_t from, to;
size_t col, len;
CHAR_T *p;
CHAR_T buf[10];
NEEDFILE(sp, cmdp);
gp = sp->gp;
for (from = fp->lno, to = tp->lno; from <= to; ++from) {
col = 0;
/*
* Display the line number. The %6 format is specified
* by POSIX 1003.2, and is almost certainly large enough.
* Check, though, just in case.
*/
if (LF_ISSET(E_C_HASH)) {
if (from <= 999999) {
SPRINTF(buf, SIZE(buf), L("%6u "), from);
p = buf;
} else
p = L("TOOBIG ");
if (ex_prchars(sp, p, &col, 8, 0, 0))
return (1);
}
/*
* Display the line. The format for E_C_PRINT isn't very good,
* especially in handling end-of-line tabs, but they're almost
* backward compatible.
*/
if (db_get(sp, from, DBG_FATAL, &p, &len))
return (1);
if (len == 0 && !LF_ISSET(E_C_LIST))
(void)ex_puts(sp, "\n");
else if (ex_ldisplay(sp, p, len, col, flags))
return (1);
if (INTERRUPTED(sp))
break;
}
return (0);
}
示例6: __posix_fs_remove
/*
* __posix_fs_remove --
* Remove a file.
*/
static int
__posix_fs_remove(WT_FILE_SYSTEM *file_system,
WT_SESSION *wt_session, const char *name, uint32_t flags)
{
WT_DECL_RET;
WT_SESSION_IMPL *session;
WT_UNUSED(file_system);
session = (WT_SESSION_IMPL *)wt_session;
/*
* ISO C doesn't require remove return -1 on failure or set errno (note
* POSIX 1003.1 extends C with those requirements). Regardless, use the
* unlink system call, instead of remove, to simplify error handling;
* where we're not doing any special checking for standards compliance,
* using unlink may be marginally safer.
*/
WT_SYSCALL(unlink(name), ret);
if (ret != 0)
WT_RET_MSG(session, ret, "%s: file-remove: unlink", name);
if (!LF_ISSET(WT_FS_DURABLE))
return (0);
#ifdef __linux__
/* Flush the backing directory to guarantee the remove. */
WT_RET (__posix_directory_sync(session, name));
#endif
return (0);
}
示例7: __wt_btree_stat_init
/*
* __wt_btree_stat_init --
* Initialize the Btree statistics.
*/
int
__wt_btree_stat_init(WT_SESSION_IMPL *session, uint32_t flags)
{
WT_BM *bm;
WT_BTREE *btree;
WT_DECL_RET;
WT_DSRC_STATS *stats;
WT_PAGE *page;
btree = S2BT(session);
bm = btree->bm;
stats = &btree->dhandle->stats;
WT_RET(bm->stat(bm, session, stats));
WT_STAT_SET(stats, btree_fixed_len, btree->bitcnt);
WT_STAT_SET(stats, btree_maximum_depth, btree->maximum_depth);
WT_STAT_SET(stats, btree_maxintlitem, btree->maxintlitem);
WT_STAT_SET(stats, btree_maxintlpage, btree->maxintlpage);
WT_STAT_SET(stats, btree_maxleafitem, btree->maxleafitem);
WT_STAT_SET(stats, btree_maxleafpage, btree->maxleafpage);
page = NULL;
if (LF_ISSET(WT_STATISTICS_FAST))
return (0);
while ((ret = __wt_tree_walk(session, &page, 0)) == 0 && page != NULL)
WT_RET(__stat_page(session, page, stats));
return (ret == WT_NOTFOUND ? 0 : ret);
}
示例8: __wt_conn_dhandle_find
/*
* __wt_conn_dhandle_find --
* Find a previously opened data handle.
*/
int
__wt_conn_dhandle_find(WT_SESSION_IMPL *session,
const char *name, const char *ckpt, uint32_t flags)
{
WT_CONNECTION_IMPL *conn;
WT_DATA_HANDLE *dhandle;
uint64_t bucket;
WT_UNUSED(flags); /* Only used in diagnostic builds */
conn = S2C(session);
/* We must be holding the handle list lock at a higher level. */
WT_ASSERT(session, F_ISSET(session, WT_SESSION_HANDLE_LIST_LOCKED) &&
!LF_ISSET(WT_DHANDLE_HAVE_REF));
/* Increment the reference count if we already have the btree open. */
bucket = __wt_hash_city64(name, strlen(name)) % WT_HASH_ARRAY_SIZE;
SLIST_FOREACH(dhandle, &conn->dhhash[bucket], hashl)
if (strcmp(name, dhandle->name) == 0 &&
((ckpt == NULL && dhandle->checkpoint == NULL) ||
(ckpt != NULL && dhandle->checkpoint != NULL &&
strcmp(ckpt, dhandle->checkpoint) == 0))) {
session->dhandle = dhandle;
return (0);
}
return (WT_NOTFOUND);
}
示例9: __evict_force_check
/*
* __evict_force_check --
* Check if a page matches the criteria for forced eviction.
*/
static int
__evict_force_check(WT_SESSION_IMPL *session, WT_PAGE *page, uint32_t flags)
{
WT_BTREE *btree;
btree = S2BT(session);
/* Pages are usually small enough, check that first. */
if (page->memory_footprint < btree->maxmempage)
return (0);
/* Leaf pages only. */
if (WT_PAGE_IS_INTERNAL(page))
return (0);
/* Eviction may be turned off. */
if (LF_ISSET(WT_READ_NO_EVICT) || F_ISSET(btree, WT_BTREE_NO_EVICTION))
return (0);
/*
* It's hard to imagine a page with a huge memory footprint that has
* never been modified, but check to be sure.
*/
if (page->modify == NULL)
return (0);
/* Trigger eviction on the next page release. */
__wt_page_evict_soon(page);
/* If eviction cannot succeed, don't try. */
return (__wt_page_can_evict(session, page, 1));
}
示例10: file_m1
/*
* file_m1 --
* First modification check routine. The :next, :prev, :rewind, :tag,
* :tagpush, :tagpop, ^^ modifications check.
*
* PUBLIC: int file_m1 __P((SCR *, int, int));
*/
int
file_m1(SCR *sp, int force, int flags)
{
EXF *ep;
ep = sp->ep;
/* If no file loaded, return no modifications. */
if (ep == NULL)
return (0);
/*
* If the file has been modified, we'll want to write it back or
* fail. If autowrite is set, we'll write it back automatically,
* unless force is also set. Otherwise, we fail unless forced or
* there's another open screen on this file.
*/
if (F_ISSET(ep, F_MODIFIED)) {
if (O_ISSET(sp, O_AUTOWRITE)) {
if (!force && file_aw(sp, flags))
return (1);
} else if (ep->refcnt <= 1 && !force) {
msgq(sp, M_ERR, LF_ISSET(FS_POSSIBLE) ?
"262|File modified since last complete write; write or use ! to override" :
"263|File modified since last complete write; write or use :edit! to override");
return (1);
}
}
return (file_m3(sp, force));
}
示例11: txt_prompt
/*
* txt_prompt --
* Display the ex prompt, line number, ai characters. Characters had
* better be printable by the terminal driver, but that's its problem,
* not ours.
*/
static void
txt_prompt(SCR *sp, TEXT *tp, ARG_CHAR_T prompt, u_int32_t flags)
{
/* Display the prompt. */
if (LF_ISSET(TXT_PROMPT))
(void)ex_printf(sp, "%c", prompt);
/* Display the line number. */
if (LF_ISSET(TXT_NUMBER) && O_ISSET(sp, O_NUMBER))
(void)ex_printf(sp, "%6lu ", (u_long)tp->lno);
/* Print out autoindent string. */
if (LF_ISSET(TXT_AUTOINDENT))
(void)ex_printf(sp, WVS, (int)tp->ai, tp->lb);
(void)ex_fflush(sp);
}
示例12: __wt_page_out
/*
* __wt_page_out --
* Discard an in-memory page, freeing all memory associated with it.
*/
void
__wt_page_out(WT_SESSION_IMPL *session, WT_PAGE *page, uint32_t flags)
{
/*
* When a page is discarded, it's been disconnected from its parent and
* parent's WT_REF structure may now point to a different page. Make
* sure we don't use any of that information by accident.
*/
page->parent = NULL;
page->ref = NULL;
WT_ASSERT(session, !F_ISSET(page, WT_PAGE_EVICT_LRU));
/* If not a split merged into its parent, the page must be clean. */
WT_ASSERT(session,
!__wt_page_is_modified(page) ||
F_ISSET(page, WT_PAGE_REC_SPLIT_MERGE));
#ifdef HAVE_DIAGNOSTIC
__wt_hazard_validate(session, page);
#endif
/*
* If this page has a memory footprint associated with it, update
* the cache information.
*/
if (page->memory_footprint != 0)
__wt_cache_page_evict(session, page);
switch (page->type) {
case WT_PAGE_COL_FIX:
__free_page_col_fix(session, page);
break;
case WT_PAGE_COL_INT:
__free_page_col_int(session, page);
break;
case WT_PAGE_COL_VAR:
__free_page_col_var(session, page);
break;
case WT_PAGE_ROW_INT:
__free_page_row_int(session, page);
break;
case WT_PAGE_ROW_LEAF:
__free_page_row_leaf(session, page);
break;
}
if (!LF_ISSET(WT_PAGE_FREE_IGNORE_DISK)) /* Disk image */
__wt_free(session, page->dsk);
if (page->modify != NULL) { /* WT_PAGE_MODIFY */
__wt_free(session, page->modify->track);
__wt_free(session, page->modify);
}
#ifdef HAVE_DIAGNOSTIC
memset(page, WT_DEBUG_BYTE, sizeof(WT_PAGE));
#endif
__wt_free(session, page);
}
示例13: __log_direct_write
/*
* __log_direct_write --
* Write a log record without using the consolidation arrays.
*/
static int
__log_direct_write(WT_SESSION_IMPL *session, WT_ITEM *record, WT_LSN *lsnp,
uint32_t flags)
{
WT_DECL_RET;
WT_LOG *log;
WT_LOGSLOT tmp;
WT_MYSLOT myslot;
int locked;
WT_DECL_SPINLOCK_ID(id); /* Must appear last */
log = S2C(session)->log;
myslot.slot = &tmp;
myslot.offset = 0;
WT_CLEAR(tmp);
/* Fast path the contended case. */
if (__wt_spin_trylock(session, &log->log_slot_lock, &id) != 0)
return (EAGAIN);
locked = 1;
if (LF_ISSET(WT_LOG_FSYNC))
F_SET(&tmp, SLOT_SYNC);
WT_ERR(__log_acquire(session, record->size, &tmp));
__wt_spin_unlock(session, &log->log_slot_lock);
locked = 0;
WT_ERR(__log_fill(session, &myslot, 1, record, lsnp));
WT_ERR(__log_release(session, &tmp));
err: if (locked)
__wt_spin_unlock(session, &log->log_slot_lock);
return (ret);
}
示例14: __posix_fs_rename
/*
* __posix_fs_rename --
* Rename a file.
*/
static int
__posix_fs_rename(WT_FILE_SYSTEM *file_system,
WT_SESSION *wt_session, const char *from, const char *to, uint32_t flags)
{
WT_DECL_RET;
WT_SESSION_IMPL *session;
WT_UNUSED(file_system);
session = (WT_SESSION_IMPL *)wt_session;
/*
* ISO C doesn't require rename return -1 on failure or set errno (note
* POSIX 1003.1 extends C with those requirements). Be cautious, force
* any non-zero return to -1 so we'll check errno. We can still end up
* with the wrong errno (if errno is garbage), or the generic WT_ERROR
* return (if errno is 0), but we've done the best we can.
*/
WT_SYSCALL(rename(from, to) != 0 ? -1 : 0, ret);
if (ret != 0)
WT_RET_MSG(
session, ret, "%s to %s: file-rename: rename", from, to);
if (!LF_ISSET(WT_FS_DURABLE))
return (0);
#ifdef __linux__
/*
* Flush the backing directory to guarantee the rename. My reading of
* POSIX 1003.1 is there's no guarantee flushing only one of the from
* or to directories, or flushing a common parent, is sufficient, and
* even if POSIX were to make that guarantee, existing filesystems are
* known to not provide the guarantee or only provide the guarantee
* with specific mount options. Flush both of the from/to directories
* until it's a performance problem.
*/
WT_RET(__posix_directory_sync(session, from));
/*
* In almost all cases, we're going to be renaming files in the same
* directory, we can at least fast-path that.
*/
{
bool same_directory;
const char *fp, *tp;
fp = strrchr(from, '/');
tp = strrchr(to, '/');
same_directory = (fp == NULL && tp == NULL) ||
(fp != NULL && tp != NULL &&
fp - from == tp - to && memcmp(from, to, (size_t)(fp - from)) == 0);
if (!same_directory)
WT_RET(__posix_directory_sync(session, to));
}
#endif
return (0);
}
示例15: ex_prchars
/*
* ex_prchars --
* Local routine to dump characters to the screen.
*/
static int
ex_prchars(SCR *sp, const CHAR_T *p, size_t *colp, size_t len,
u_int flags, int repeatc)
{
CHAR_T ch;
char *kp;
GS *gp;
size_t col, tlen, ts;
if (O_ISSET(sp, O_LIST))
LF_SET(E_C_LIST);
gp = sp->gp;
ts = O_VAL(sp, O_TABSTOP);
for (col = *colp; len--;)
if ((ch = *p++) == L('\t') && !LF_ISSET(E_C_LIST))
for (tlen = ts - col % ts;
col < sp->cols && tlen--; ++col) {
(void)ex_printf(sp,
"%c", repeatc ? repeatc : ' ');
if (INTERRUPTED(sp))
goto intr;
}
else {
kp = KEY_NAME(sp, ch);
tlen = KEY_COL(sp, ch);
/*
* Start a new line if the last character does not fit
* into the current line. The implicit new lines are
* not interruptible.
*/
if (col + tlen > sp->cols) {
col = 0;
(void)ex_puts(sp, "\n");
}
col += tlen;
if (!repeatc) {
(void)ex_puts(sp, kp);
if (INTERRUPTED(sp))
goto intr;
} else while (tlen--) {
(void)ex_printf(sp, "%c", repeatc);
if (INTERRUPTED(sp))
goto intr;
}
if (col == sp->cols) {
col = 0;
(void)ex_puts(sp, "\n");
}
}
intr: *colp = col;
return (0);
}