本文整理汇总了C++中JUNLIKELY函数的典型用法代码示例。如果您正苦于以下问题:C++ JUNLIKELY函数的具体用法?C++ JUNLIKELY怎么用?C++ JUNLIKELY使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了JUNLIKELY函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ParseInclude
/** Parse an include. */
void ParseInclude(const TokenNode *tp, int depth) {
char *temp;
Assert(tp);
if(JUNLIKELY(!tp->value)) {
ParseError(tp, "no include file specified");
} else {
temp = CopyString(tp->value);
ExpandPath(&temp);
if(JUNLIKELY(!ParseFile(temp, depth))) {
ParseError(tp, "could not open included file %s", temp);
}
Release(temp);
}
}
示例2: Allocate
/** Read a file. */
char *ReadFile(FILE *fd)
{
const int BLOCK_SIZE = 1024; // Start at 1k.
char *buffer;
int len, max;
len = 0;
max = BLOCK_SIZE;
buffer = Allocate(max + 1);
for(;;) {
const size_t count = fread(&buffer[len], 1, max - len, fd);
len += count;
if(len < max) {
break;
}
max *= 2;
if(JUNLIKELY(max < 0)) {
/* File is too big. */
break;
}
buffer = Reallocate(buffer, max + 1);
if(JUNLIKELY(buffer == NULL)) {
FatalError(_("out of memory"));
}
}
buffer[len] = 0;
return buffer;
}
示例3: Allocate
/** Read a file. */
char *ReadFile(FILE *fd)
{
const int BLOCK_SIZE = 1 << 14; // Start at 16k.
char *buffer;
int len, max;
int ch;
len = 0;
max = BLOCK_SIZE;
buffer = Allocate(max + 1);
for(;;) {
ch = fgetc(fd);
if(JUNLIKELY(ch == EOF || ch == 0)) {
break;
}
buffer[len++] = ch;
if(JUNLIKELY(len >= max)) {
max *= 2;
if(JUNLIKELY(max < 0)) {
/* File is too big. */
break;
}
buffer = Reallocate(buffer, max + 1);
}
}
buffer[len] = 0;
return buffer;
}
示例4: StartupFonts
/** Startup font support. */
void StartupFonts(void)
{
unsigned int x;
/* Inherit unset fonts from the tray for tray items. */
if(!fontNames[FONT_TASK]) {
fontNames[FONT_TASK] = CopyString(fontNames[FONT_TRAY]);
}
if(!fontNames[FONT_TRAYBUTTON]) {
fontNames[FONT_TRAYBUTTON] = CopyString(fontNames[FONT_TRAY]);
}
if(!fontNames[FONT_CLOCK]) {
fontNames[FONT_CLOCK] = CopyString(fontNames[FONT_TRAY]);
}
if(!fontNames[FONT_PAGER]) {
fontNames[FONT_PAGER] = CopyString(fontNames[FONT_TRAY]);
}
#ifdef USE_XFT
for(x = 0; x < FONT_COUNT; x++) {
if(fontNames[x]) {
fonts[x] = JXftFontOpenName(display, rootScreen, fontNames[x]);
if(!fonts[x]) {
fonts[x] = JXftFontOpenXlfd(display, rootScreen, fontNames[x]);
}
if(JUNLIKELY(!fonts[x])) {
Warning(_("could not load font: %s"), fontNames[x]);
}
}
if(!fonts[x]) {
fonts[x] = JXftFontOpenName(display, rootScreen, DEFAULT_FONT);
}
if(JUNLIKELY(!fonts[x])) {
FatalError(_("could not load the default font: %s"), DEFAULT_FONT);
}
}
#else /* USE_XFT */
for(x = 0; x < FONT_COUNT; x++) {
if(fontNames[x]) {
fonts[x] = JXLoadQueryFont(display, fontNames[x]);
if(JUNLIKELY(!fonts[x] && fontNames[x])) {
Warning(_("could not load font: %s"), fontNames[x]);
}
}
if(!fonts[x]) {
fonts[x] = JXLoadQueryFont(display, DEFAULT_FONT);
}
if(JUNLIKELY(!fonts[x])) {
FatalError(_("could not load the default font: %s"), DEFAULT_FONT);
}
}
#endif /* USE_XFT */
}
示例5: strlen
/** Create a button tray component. */
TrayComponentType *CreateTrayButton(const char *iconName,
const char *label, const char *action,
const char *popup, int width, int height) {
TrayButtonType *bp;
TrayComponentType *cp;
if(JUNLIKELY((label == NULL || strlen(label) == 0)
&& (iconName == NULL || strlen(iconName) == 0))) {
Warning(_("no icon or label for TrayButton"));
return NULL;
}
if(JUNLIKELY(width < 0)) {
Warning(_("invalid TrayButton width: %d"), width);
width = 0;
}
if(JUNLIKELY(height < 0)) {
Warning(_("invalid TrayButton height: %d"), height);
height = 0;
}
bp = Allocate(sizeof(TrayButtonType));
bp->next = buttons;
buttons = bp;
bp->icon = NULL;
bp->iconName = CopyString(iconName);
bp->label = CopyString(label);
bp->action = CopyString(action);
bp->popup = CopyString(popup);
cp = CreateTrayComponent();
cp->object = bp;
bp->cp = cp;
cp->requestedWidth = width;
cp->requestedHeight = height;
bp->mousex = -POPUP_DELTA;
bp->mousey = -POPUP_DELTA;
cp->Create = Create;
cp->Destroy = Destroy;
cp->SetSize = SetSize;
cp->Resize = Resize;
cp->ProcessButtonPress = ProcessButtonPress;
cp->ProcessButtonRelease = ProcessButtonRelease;
if(popup || label) {
cp->ProcessMotionEvent = ProcessMotionEvent;
}
return cp;
}
示例6: StartupFonts
/** Startup font support. */
void StartupFonts(void)
{
unsigned int x;
/* Inherit unset fonts from the tray for tray items. */
for(x = 0; x < ARRAY_LENGTH(INHERITED_FONTS); x++) {
const FontType dest = INHERITED_FONTS[x].dest;
if(!fontNames[dest]) {
const FontType src = INHERITED_FONTS[x].src;
fontNames[dest] = CopyString(fontNames[src]);
}
}
#ifdef USE_XFT
for(x = 0; x < FONT_COUNT; x++) {
if(fontNames[x]) {
fonts[x] = JXftFontOpenName(display, rootScreen, fontNames[x]);
if(!fonts[x]) {
fonts[x] = JXftFontOpenXlfd(display, rootScreen, fontNames[x]);
}
if(JUNLIKELY(!fonts[x])) {
Warning(_("could not load font: %s"), fontNames[x]);
}
}
if(!fonts[x]) {
fonts[x] = JXftFontOpenName(display, rootScreen, DEFAULT_FONT);
}
if(JUNLIKELY(!fonts[x])) {
FatalError(_("could not load the default font: %s"), DEFAULT_FONT);
}
}
#else /* USE_XFT */
for(x = 0; x < FONT_COUNT; x++) {
if(fontNames[x]) {
fonts[x] = JXLoadQueryFont(display, fontNames[x]);
if(JUNLIKELY(!fonts[x] && fontNames[x])) {
Warning(_("could not load font: %s"), fontNames[x]);
}
}
if(!fonts[x]) {
fonts[x] = JXLoadQueryFont(display, DEFAULT_FONT);
}
if(JUNLIKELY(!fonts[x])) {
FatalError(_("could not load the default font: %s"), DEFAULT_FONT);
}
}
#endif /* USE_XFT */
}
示例7: ParseKey
/** Parse a key binding. */
void ParseKey(const TokenNode *tp) {
const char *key;
const char *code;
const char *mask;
const char *action;
const char *command;
KeyType k;
int x;
Assert(tp);
mask = FindAttribute(tp->attributes, "mask");
key = FindAttribute(tp->attributes, "key");
code = FindAttribute(tp->attributes, "keycode");
action = tp->value;
if(JUNLIKELY(action == NULL)) {
ParseError(tp, "no action specified for Key");
return;
}
command = NULL;
k = KEY_NONE;
if(!strncmp(action, "exec:", 5)) {
k = KEY_EXEC;
command = action + 5;
} else if(!strncmp(action, "root:", 5)) {
k = KEY_ROOT;
command = action + 5;
} else {
for(x = 0; KEY_MAP[x].name; x++) {
if(!strcmp(action, KEY_MAP[x].name)) {
k = KEY_MAP[x].key;
break;
}
}
}
/* Insert the binding if it's valid. */
if(JUNLIKELY(k == KEY_NONE)) {
ParseError(tp, "invalid Key action: \"%s\"", action);
} else {
InsertBinding(k, mask, key, code, command);
}
}
示例8: Warning
/** Create a swallowed application tray component. */
TrayComponentType *CreateSwallow(const char *name, const char *command,
int width, int height) {
TrayComponentType *cp;
SwallowNode *np;
if(JUNLIKELY(!name)) {
Warning(_("cannot swallow a client with no name"));
return NULL;
}
/* Make sure this name isn't already used. */
for(np = swallowNodes; np; np = np->next) {
if(JUNLIKELY(!strcmp(np->name, name))) {
Warning(_("cannot swallow the same client multiple times"));
return NULL;
}
}
np = Allocate(sizeof(SwallowNode));
np->name = CopyString(name);
np->command = CopyString(command);
np->next = swallowNodes;
swallowNodes = np;
cp = CreateTrayComponent();
np->cp = cp;
cp->object = np;
cp->Destroy = Destroy;
cp->Resize = Resize;
if(width) {
cp->requestedWidth = width;
np->userWidth = 1;
} else {
cp->requestedWidth = 1;
np->userWidth = 0;
}
if(height) {
cp->requestedHeight = height;
np->userHeight = 1;
} else {
cp->requestedHeight = 1;
np->userHeight = 0;
}
return cp;
}
示例9: ParseKey
/** Parse a key binding. */
void ParseKey(const TokenNode *tp) {
const char *key;
const char *code;
const char *mask;
const char *action;
const char *command;
KeyType k;
Assert(tp);
mask = FindAttribute(tp->attributes, "mask");
key = FindAttribute(tp->attributes, "key");
code = FindAttribute(tp->attributes, "keycode");
action = tp->value;
if(JUNLIKELY(action == NULL)) {
ParseError(tp, "no action specified for Key");
return;
}
command = NULL;
k = KEY_NONE;
if(!strncmp(action, "exec:", 5)) {
k = KEY_EXEC;
command = action + 5;
} else if(!strncmp(action, "root:", 5)) {
k = KEY_ROOT;
command = action + 5;
} else {
/* Look up the option in the key map using binary search. */
const int x = FindValue(KEY_MAP, KEY_MAP_COUNT, action);
if(x >= 0) {
k = (KeyType)x;
}
}
/* Insert the binding if it's valid. */
if(JUNLIKELY(k == KEY_NONE)) {
ParseError(tp, "invalid Key action: \"%s\"", action);
} else {
InsertBinding(k, mask, key, code, command);
}
}
示例10: OpenConnection
/** Open a connection to the X server. */
void OpenConnection(void)
{
display = JXOpenDisplay(displayString);
if(JUNLIKELY(!display)) {
if(displayString) {
printf("error: could not open display %s\n", displayString);
} else {
printf("error: could not open display\n");
}
DoExit(1);
}
rootScreen = DefaultScreen(display);
rootWindow = RootWindow(display, rootScreen);
rootWidth = DisplayWidth(display, rootScreen);
rootHeight = DisplayHeight(display, rootScreen);
rootDepth = DefaultDepth(display, rootScreen);
rootVisual = DefaultVisual(display, rootScreen);
rootColormap = DefaultColormap(display, rootScreen);
rootGC = DefaultGC(display, rootScreen);
colormapCount = MaxCmapsOfScreen(ScreenOfDisplay(display, rootScreen));
XSetGraphicsExposures(display, rootGC, False);
}
示例11: UpdateTaskBar
/** Update all task bars. */
void UpdateTaskBar(void)
{
TaskBarType *bp;
int lastHeight = -1;
if(JUNLIKELY(shouldExit)) {
return;
}
for(bp = bars; bp; bp = bp->next) {
if(bp->layout == LAYOUT_VERTICAL) {
TaskEntry *tp;
lastHeight = bp->cp->requestedHeight;
if(bp->userHeight > 0) {
bp->itemHeight = bp->userHeight;
} else {
bp->itemHeight = GetStringHeight(FONT_TASKLIST) + 12;
}
bp->cp->requestedHeight = 0;
for(tp = taskEntries; tp; tp = tp->next) {
if(ShouldShowEntry(tp)) {
bp->cp->requestedHeight += bp->itemHeight;
}
}
bp->cp->requestedHeight = Max(1, bp->cp->requestedHeight);
if(lastHeight != bp->cp->requestedHeight) {
ResizeTray(bp->cp->tray);
}
}
ComputeItemSize(bp);
Render(bp);
}
}
示例12: ParseModifierString
/** Parse a modifier mask string. */
unsigned int ParseModifierString(const char *str)
{
unsigned int mask;
unsigned int x, y;
char found;
if(!str) {
return MASK_NONE;
}
mask = MASK_NONE;
for(x = 0; str[x]; x++) {
found = 0;
for(y = 0; modifiers[y].name; y++) {
if(modifiers[y].name == str[x]) {
mask |= modifiers[y].mask;
found = 1;
break;
}
}
if(JUNLIKELY(!found)) {
Warning(_("invalid modifier: \"%c\""), str[x]);
}
}
return mask;
}
示例13: SetClientDesktop
/** Set a client's desktop. This will update transients. */
void SetClientDesktop(ClientNode *np, unsigned int desktop)
{
ClientNode *tp;
Assert(np);
if(JUNLIKELY(desktop >= settings.desktopCount)) {
return;
}
if(!(np->state.status & STAT_STICKY)) {
int x;
for(x = 0; x < LAYER_COUNT; x++) {
for(tp = nodes[x]; tp; tp = tp->next) {
if(tp == np || tp->owner == np->window) {
tp->state.desktop = desktop;
if(desktop == currentDesktop) {
ShowClient(tp);
} else {
HideClient(tp);
}
SetCardinalAtom(tp->window, ATOM_NET_WM_DESKTOP,
tp->state.desktop);
}
}
}
RequirePagerUpdate();
RequireTaskUpdate();
}
}
示例14: Warning
/** Create a dock component. */
TrayComponentType *CreateDock(int width)
{
TrayComponentType *cp;
if(JUNLIKELY(dock != NULL && dock->cp != NULL)) {
Warning(_("only one Dock allowed"));
return NULL;
} else if(dock == NULL) {
dock = Allocate(sizeof(DockType));
dock->nodes = NULL;
dock->window = None;
}
cp = CreateTrayComponent();
cp->object = dock;
cp->requestedWidth = 1;
cp->requestedHeight = 1;
dock->cp = cp;
dock->itemSize = width;
cp->SetSize = SetSize;
cp->Create = Create;
cp->Resize = Resize;
return cp;
}
示例15: RunCommand
/** Execute an external program. */
void RunCommand(const char *command) {
const char *displayString;
char *str;
if(JUNLIKELY(!command)) {
return;
}
displayString = DisplayString(display);
if(!fork()) {
close(ConnectionNumber(display));
if(displayString && displayString[0]) {
str = malloc(strlen(displayString) + 9);
sprintf(str, "DISPLAY=%s", displayString);
putenv(str);
}
setsid();
execl(SHELL_NAME, SHELL_NAME, "-c", command, NULL);
Warning(_("exec failed: (%s) %s"), SHELL_NAME, command);
exit(EXIT_SUCCESS);
}
}