Removed IfMagickTrue
diff --git a/MagickCore/color.c b/MagickCore/color.c
index aa221bf..1a68716 100644
--- a/MagickCore/color.c
+++ b/MagickCore/color.c
@@ -1542,7 +1542,7 @@
assert(tuple != (char *) NULL);
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",tuple);
*tuple='\0';
- if (IfMagickTrue(hex))
+ if (hex != MagickFalse)
{
/*
Convert pixel to hex color.
@@ -1912,7 +1912,7 @@
path=(const char *) NULL;
for (i=0; i < (ssize_t) number_colors; i++)
{
- if (IfMagickTrue(color_info[i]->stealth))
+ if (color_info[i]->stealth != MagickFalse)
continue;
if ((path == (const char *) NULL) ||
(LocaleCompare(path,color_info[i]->path) != 0))
@@ -2119,11 +2119,11 @@
compliance;
compliance=color_info->compliance;
- if (IfMagickTrue(GlobExpression(token,"*SVG*",MagickTrue)))
+ if (GlobExpression(token,"*SVG*",MagickTrue) != MagickFalse)
compliance|=SVGCompliance;
- if (IfMagickTrue(GlobExpression(token,"*X11*",MagickTrue)))
+ if (GlobExpression(token,"*X11*",MagickTrue) != MagickFalse)
compliance|=X11Compliance;
- if (IfMagickTrue(GlobExpression(token,"*XPM*",MagickTrue)))
+ if (GlobExpression(token,"*XPM*",MagickTrue) != MagickFalse)
compliance|=XPMCompliance;
color_info->compliance=(ComplianceType) compliance;
break;
diff --git a/MagickCore/constitute.c b/MagickCore/constitute.c
index 64e28eb..15422de 100644
--- a/MagickCore/constitute.c
+++ b/MagickCore/constitute.c
@@ -1030,7 +1030,7 @@
(void) SyncImageProfiles(image);
DisassociateImageStream(image);
option=GetImageOption(image_info,"delegate:bimodal");
- if ((IfMagickTrue(IsStringTrue(option))) &&
+ if ((IsStringTrue(option) != MagickFalse) &&
(write_info->page == (char *) NULL) &&
(GetPreviousImageInList(image) == (Image *) NULL) &&
(GetNextImageInList(image) == (Image *) NULL) &&
diff --git a/MagickCore/delegate.c b/MagickCore/delegate.c
index c8afe58..d07f968 100644
--- a/MagickCore/delegate.c
+++ b/MagickCore/delegate.c
@@ -202,7 +202,7 @@
options=DestroyConfigureOptions(options);
}
#endif
- if (IfMagickTrue(IsLinkedListEmpty(delegate_cache)))
+ if (IsLinkedListEmpty(delegate_cache) != MagickFalse)
status&=LoadDelegateCache(delegate_cache,DelegateMap,"built-in",0,
exception);
return(delegate_cache);
@@ -789,8 +789,8 @@
for (i=0; p != (const DelegateInfo *) NULL; )
{
if( IfMagickFalse(p->stealth) &&
- ( IfMagickTrue(GlobExpression(p->decode,pattern,MagickFalse)) ||
- IfMagickTrue(GlobExpression(p->encode,pattern,MagickFalse))) )
+ ( GlobExpression(p->decode,pattern,MagickFalse) != MagickFalse ||
+ GlobExpression(p->encode,pattern,MagickFalse) != MagickFalse) )
delegates[i++]=p;
p=(const DelegateInfo *) GetNextValueInLinkedList(delegate_cache);
}
@@ -883,10 +883,10 @@
for (i=0; p != (const DelegateInfo *) NULL; )
{
if( IfMagickFalse(p->stealth) &&
- IfMagickTrue(GlobExpression(p->decode,pattern,MagickFalse)) )
+ GlobExpression(p->decode,pattern,MagickFalse) != MagickFalse )
delegates[i++]=ConstantString(p->decode);
if( IfMagickFalse(p->stealth) &&
- IfMagickTrue(GlobExpression(p->encode,pattern,MagickFalse)) )
+ GlobExpression(p->encode,pattern,MagickFalse) != MagickFalse )
delegates[i++]=ConstantString(p->encode);
p=(const DelegateInfo *) GetNextValueInLinkedList(delegate_cache);
}
@@ -1264,7 +1264,7 @@
commands=StringToList(delegate_info->commands);
if (commands == (char **) NULL)
{
- if( IfMagickTrue(temporary) )
+ if (temporary != MagickFalse)
(void) RelinquishUniqueFileResource(image->filename);
(void) ThrowMagickException(exception,GetMagickModule(),
ResourceLimitError,"MemoryAllocationFailed","`%s'",
@@ -1414,7 +1414,7 @@
path=(const char *) NULL;
for (i=0; i < (ssize_t) number_delegates; i++)
{
- if( IfMagickTrue(delegate_info[i]->stealth) )
+ if (delegate_info[i]->stealth != MagickFalse)
continue;
if ((path == (const char *) NULL) ||
(LocaleCompare(path,delegate_info[i]->path) != 0))
diff --git a/MagickCore/display.c b/MagickCore/display.c
index 25b1434..a9e921d 100644
--- a/MagickCore/display.c
+++ b/MagickCore/display.c
@@ -1676,7 +1676,7 @@
assert(image_info->signature == MagickCoreSignature);
assert(images != (Image *) NULL);
assert(images->signature == MagickCoreSignature);
- if (IfMagickTrue(images->debug) )
+ if (images->debug != MagickFalse )
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",images->filename);
display=XOpenDisplay(image_info->server_name);
if (display == (Display *) NULL)
@@ -1921,7 +1921,7 @@
state=DefaultState;
do
{
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
/*
Display pointer position.
@@ -2014,7 +2014,7 @@
break;
transparent_pen=pen_number == (MaxNumberPens-2) ? MagickTrue :
MagickFalse;
- if (IfMagickTrue(transparent_pen) )
+ if (transparent_pen != MagickFalse )
break;
if (pen_number == (MaxNumberPens-1))
{
@@ -2059,7 +2059,7 @@
break;
transparent_box=pen_number == (MaxNumberPens-2) ? MagickTrue :
MagickFalse;
- if (IfMagickTrue(transparent_box) )
+ if (transparent_box != MagickFalse )
break;
if (pen_number == (MaxNumberPens-1))
{
@@ -2210,7 +2210,7 @@
*/
x=event.xmotion.x;
y=event.xmotion.y;
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
if ((x < (int) (windows->info.x+windows->info.width)) &&
(y < (int) (windows->info.y+windows->info.height)))
@@ -2813,7 +2813,7 @@
background_resources.backdrop=status != 0 ? MagickTrue : MagickFalse;
status=XDisplayBackgroundImage(display,&background_resources,*image,
exception);
- if (IfMagickTrue(status))
+ if (status != MagickFalse)
XClientMessage(display,windows->image.id,windows->im_protocols,
windows->im_retain_colors,CurrentTime);
XSetCursorState(display,windows,MagickFalse);
@@ -2933,7 +2933,7 @@
(void) ResetMagickMemory(&segment_info,0,sizeof(segment_info));
do
{
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
/*
Display pointer position.
@@ -3072,7 +3072,7 @@
*/
x=event.xmotion.x;
y=event.xmotion.y;
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
if ((x < (int) (windows->info.x+windows->info.width)) &&
(y < (int) (windows->info.y+windows->info.height)))
@@ -3118,7 +3118,7 @@
windows->image.highlight_context,&segment_info);
}
else
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->info.id,windows->info.screen);
/*
Wait for next event.
@@ -3375,7 +3375,7 @@
state=DefaultState;
do
{
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
/*
Display pointer position.
@@ -3667,7 +3667,7 @@
*/
x=event.xmotion.x;
y=event.xmotion.y;
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
if ((x < (int) (windows->info.x+windows->info.width)) &&
(y < (int) (windows->info.y+windows->info.height)))
@@ -4010,7 +4010,7 @@
state=DefaultState;
do
{
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
/*
Display pointer position.
@@ -4124,7 +4124,7 @@
{
case ButtonPress:
{
- if (IfMagickTrue(image->debug) )
+ if (image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Button Press: 0x%lx %u +%d+%d",event.xbutton.window,
event.xbutton.button,event.xbutton.x,event.xbutton.y);
@@ -4144,7 +4144,7 @@
}
case ButtonRelease:
{
- if (IfMagickTrue(image->debug) )
+ if (image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Button Release: 0x%lx %u +%d+%d",event.xbutton.window,
event.xbutton.button,event.xbutton.x,event.xbutton.y);
@@ -4184,7 +4184,7 @@
length=XLookupString((XKeyEvent *) &event.xkey,command,(int)
sizeof(command),&key_symbol,(XComposeStatus *) NULL);
*(command+length)='\0';
- if (IfMagickTrue(image->debug) )
+ if (image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Key press: 0x%lx (%s)",(unsigned long) key_symbol,command);
switch ((int) key_symbol)
@@ -4226,7 +4226,7 @@
*/
x=event.xmotion.x;
y=event.xmotion.y;
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
if ((x < (int) (windows->info.x+windows->info.width)) &&
(y < (int) (windows->info.y+windows->info.height)))
@@ -4243,7 +4243,7 @@
}
default:
{
- if (IfMagickTrue(image->debug) )
+ if (image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),"Event type: %d",
event.type);
break;
@@ -4422,7 +4422,7 @@
*/
width=(unsigned int) windows->image.window_changes.width;
height=(unsigned int) windows->image.window_changes.height;
- if (IfMagickTrue(image->debug) )
+ if (image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Configure Image: %dx%d=>%.20gx%.20g",windows->image.ximage->width,
windows->image.ximage->height,(double) width,(double) height);
@@ -4483,7 +4483,7 @@
/*
Update Magnify window configuration.
*/
- if (IfMagickTrue(windows->magnify.mapped) )
+ if (windows->magnify.mapped != MagickFalse )
XMakeMagnifyImage(display,windows,exception);
windows->pan.crop_geometry=windows->image.crop_geometry;
XBestIconSize(display,&windows->pan,image);
@@ -4681,7 +4681,7 @@
state=DefaultState;
do
{
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
/*
Display pointer position.
@@ -4828,7 +4828,7 @@
*/
x=event.xmotion.x;
y=event.xmotion.y;
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
if ((x < (int) (windows->info.x+windows->info.width)) &&
(y < (int) (windows->info.y+windows->info.height)))
@@ -4889,7 +4889,7 @@
windows->image.highlight_context,&highlight_info);
}
else
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->info.id,windows->info.screen);
/*
Wait for next event.
@@ -4969,7 +4969,7 @@
(void) XMapWindow(display,windows->info.id);
do
{
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
/*
Display pointer position.
@@ -5234,7 +5234,7 @@
*/
x=event.xmotion.x;
y=event.xmotion.y;
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
if ((x < (int) (windows->info.x+windows->info.width)) &&
(y < (int) (windows->info.y+windows->info.height)))
@@ -5529,7 +5529,7 @@
state=DefaultState;
do
{
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
/*
Display pointer position.
@@ -5608,7 +5608,7 @@
break;
transparent=pen_number == (MaxNumberPens-2) ? MagickTrue :
MagickFalse;
- if (IfMagickTrue(transparent) )
+ if (transparent != MagickFalse )
{
draw_info.stencil=TransparentStencil;
break;
@@ -5889,7 +5889,7 @@
*/
x=event.xmotion.x;
y=event.xmotion.y;
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
if ((x < (int) (windows->info.x+windows->info.width)) &&
(y < (int) (windows->info.y+windows->info.height)))
@@ -5962,7 +5962,7 @@
windows->image.highlight_context,&line_info);
}
else
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->info.id,
windows->info.screen);
break;
@@ -5984,7 +5984,7 @@
windows->image.highlight_context,&rectangle_info);
}
else
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->info.id,
windows->info.screen);
break;
@@ -6008,7 +6008,7 @@
windows->image.highlight_context,&rectangle_info);
}
else
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->info.id,
windows->info.screen);
break;
@@ -6034,7 +6034,7 @@
windows->image.highlight_context,&line_info);
}
else
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->info.id,
windows->info.screen);
break;
@@ -6481,7 +6481,7 @@
redo_image=(*image);
*image=cache_image->list;
cache_image=DestroyImage(cache_image);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
return;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -6647,7 +6647,7 @@
*image=DestroyImage(*image);
*image=redo_image;
redo_image=NewImageList();
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
return;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -7251,7 +7251,7 @@
if (*filename == '\0')
break;
status=ShredFile(filename);
- if (IfMagickTrue(status) )
+ if (status != MagickFalse )
XNoticeWidget(display,windows,"Unable to delete image file:",filename);
break;
}
@@ -7532,7 +7532,7 @@
(void) FormatLocaleString(windows->image.crop_geometry,MagickPathExtent,
"%ux%u%+d%+d",width,height,(int) (*image)->columns-(int) width-x,y);
}
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
(void) XConfigureImage(display,resource_info,windows,*image,exception);
break;
@@ -7567,7 +7567,7 @@
(void) FormatLocaleString(windows->image.crop_geometry,MagickPathExtent,
"%ux%u%+d%+d",width,height,x,(int) (*image)->rows-(int) height-y);
}
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
(void) XConfigureImage(display,resource_info,windows,*image,exception);
break;
@@ -7653,7 +7653,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
windows->image.window_changes.width=(int) (*image)->columns;
windows->image.window_changes.height=(int) (*image)->rows;
@@ -7694,7 +7694,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
windows->image.window_changes.width=(int) (*image)->columns;
windows->image.window_changes.height=(int) (*image)->rows;
@@ -7750,7 +7750,7 @@
MagickPathExtent);
(void) ModulateImage(*image,modulate_factors,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -7778,7 +7778,7 @@
MagickPathExtent);
(void) ModulateImage(*image,modulate_factors,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -7805,7 +7805,7 @@
MagickPathExtent);
(void) ModulateImage(*image,modulate_factors,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -7830,7 +7830,7 @@
XCheckRefreshWindows(display,windows);
(void) GammaImage(*image,strtod(factor,(char **) NULL),exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -7845,7 +7845,7 @@
XCheckRefreshWindows(display,windows);
(void) ContrastImage(*image,MagickTrue,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -7860,7 +7860,7 @@
XCheckRefreshWindows(display,windows);
(void) ContrastImage(*image,MagickFalse,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -7899,7 +7899,7 @@
(void) ContrastStretchImage(*image,black_point,white_point,
exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -7936,7 +7936,7 @@
(void) SigmoidalContrastImage(*image,MagickTrue,geometry_info.rho,
geometry_info.sigma,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -7951,7 +7951,7 @@
XCheckRefreshWindows(display,windows);
(void) NormalizeImage(*image,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -7966,7 +7966,7 @@
XCheckRefreshWindows(display,windows);
(void) EqualizeImage(*image,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -7981,7 +7981,7 @@
XCheckRefreshWindows(display,windows);
(void) NegateImage(*image,MagickFalse,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -7997,7 +7997,7 @@
(void) SetImageType(*image,(*image)->alpha_trait == UndefinedPixelTrait ?
GrayscaleType : GrayscaleAlphaType,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8031,7 +8031,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8062,7 +8062,7 @@
NoDitherMethod;
(void) QuantizeImage(&quantize_info,*image,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8086,7 +8086,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8124,7 +8124,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8160,7 +8160,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8200,7 +8200,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8236,7 +8236,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8272,7 +8272,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8301,7 +8301,7 @@
threshold=StringToDoubleInterval(factor,(double) QuantumRange+1.0);
(void) BilevelImage(*image,threshold,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8336,7 +8336,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8371,7 +8371,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8412,7 +8412,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8440,7 +8440,7 @@
exception);
(void) RaiseImage(*image,&page_geometry,MagickTrue,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8469,7 +8469,7 @@
(void) SegmentImage(*image,sRGBColorspace,MagickFalse,geometry_info.rho,
geometry_info.sigma,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8507,7 +8507,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8536,7 +8536,7 @@
threshold=StringToDoubleInterval(factor,(double) QuantumRange+1.0);
(void) SolarizeImage(*image,threshold,exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8572,7 +8572,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8608,7 +8608,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8651,7 +8651,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8689,7 +8689,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8725,7 +8725,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8765,7 +8765,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
XConfigureImageColormap(display,resource_info,windows,*image,exception);
(void) XConfigureImage(display,resource_info,windows,*image,exception);
@@ -8880,7 +8880,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
windows->image.window_changes.width=(int) (*image)->columns;
windows->image.window_changes.height=(int) (*image)->rows;
@@ -8936,7 +8936,7 @@
}
CatchException(exception);
XSetCursorState(display,windows,MagickFalse);
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
break;
windows->image.window_changes.width=(int) (*image)->columns;
windows->image.window_changes.height=(int) (*image)->rows;
@@ -9045,7 +9045,7 @@
/*
Zoom image.
*/
- if (IfMagickTrue(windows->magnify.mapped) )
+ if (windows->magnify.mapped != MagickFalse )
(void) XRaiseWindow(display,windows->magnify.id);
else
{
@@ -9359,7 +9359,7 @@
/*
Map and unmap Info widget as text cursor crosses its boundaries.
*/
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
if ((x < (int) (windows->info.x+windows->info.width)) &&
(y < (int) (windows->info.y+windows->info.height)))
@@ -9369,7 +9369,7 @@
if ((x > (int) (windows->info.x+windows->info.width)) ||
(y > (int) (windows->info.y+windows->info.height)))
(void) XMapWindow(display,windows->info.id);
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
/*
Display pointer position.
@@ -9737,7 +9737,7 @@
state=DefaultState;
do
{
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
/*
Display pointer position.
@@ -10025,7 +10025,7 @@
*/
x=event.xmotion.x;
y=event.xmotion.y;
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
if ((x < (int) (windows->info.x+windows->info.width)) &&
(y < (int) (windows->info.y+windows->info.height)))
@@ -10681,7 +10681,7 @@
state=DefaultState;
do
{
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
/*
Display pointer position.
@@ -10755,7 +10755,7 @@
{
case ButtonPress:
{
- if (IfMagickTrue(image->debug) )
+ if (image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Button Press: 0x%lx %u +%d+%d",event.xbutton.window,
event.xbutton.button,event.xbutton.x,event.xbutton.y);
@@ -10784,7 +10784,7 @@
}
case ButtonRelease:
{
- if (IfMagickTrue(image->debug) )
+ if (image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Button Release: 0x%lx %u +%d+%d",event.xbutton.window,
event.xbutton.button,event.xbutton.x,event.xbutton.y);
@@ -10824,7 +10824,7 @@
length=XLookupString((XKeyEvent *) &event.xkey,command,(int)
sizeof(command),&key_symbol,(XComposeStatus *) NULL);
*(command+length)='\0';
- if (IfMagickTrue(image->debug) )
+ if (image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Key press: 0x%lx (%s)",(long) key_symbol,command);
switch ((int) key_symbol)
@@ -10866,7 +10866,7 @@
*/
x=event.xmotion.x;
y=event.xmotion.y;
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
if ((x < (int) (windows->info.x+windows->info.width)) &&
(y < (int) (windows->info.y+windows->info.height)))
@@ -10883,7 +10883,7 @@
}
default:
{
- if (IfMagickTrue(image->debug) )
+ if (image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),"Event type: %d",
event.type);
break;
@@ -11327,7 +11327,7 @@
state=DefaultState;
do
{
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
/*
Display pointer position.
@@ -11437,7 +11437,7 @@
*/
x=event.xmotion.x;
y=event.xmotion.y;
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
if ((x < (int) (windows->info.x+windows->info.width)) &&
(y < (int) (windows->info.y+windows->info.height)))
@@ -11498,7 +11498,7 @@
windows->image.highlight_context,&highlight_info);
}
else
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->info.id,windows->info.screen);
/*
Wait for next event.
@@ -11583,7 +11583,7 @@
(void) XMapWindow(display,windows->info.id);
do
{
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
/*
Display pointer position.
@@ -11905,7 +11905,7 @@
*/
x=event.xmotion.x;
y=event.xmotion.y;
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
if ((x < (int) (windows->info.x+windows->info.width)) &&
(y < (int) (windows->info.y+windows->info.height)))
@@ -12314,7 +12314,7 @@
windows->image.highlight_context,&rotate_info);
}
else
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->info.id,
windows->info.screen);
/*
@@ -12449,7 +12449,7 @@
}
}
}
- if (IfMagickTrue(windows->image.orphan) )
+ if (windows->image.orphan != MagickFalse )
return(MagickTrue);
if (normalized_degrees != 0.0)
{
@@ -12560,7 +12560,7 @@
XFileBrowserWidget(display,windows,"Save",filename);
if (*filename == '\0')
return(MagickTrue);
- if (IfMagickTrue(IsPathAccessible(filename)) )
+ if (IsPathAccessible(filename != MagickFalse) )
{
int
status;
@@ -12634,7 +12634,7 @@
*/
(void) CopyMagickString(save_image->filename,filename,MagickPathExtent);
status=WriteImage(image_info,save_image,exception);
- if (IfMagickTrue(status) )
+ if (status != MagickFalse )
image->taint=MagickFalse;
save_image=DestroyImage(save_image);
image_info=DestroyImageInfo(image_info);
@@ -12873,7 +12873,7 @@
{
while (XCheckMaskEvent(display,ButtonMotionMask,event)) ;
if (event->xmotion.window == windows->image.id)
- if (IfMagickTrue(windows->magnify.mapped) )
+ if (windows->magnify.mapped != MagickFalse )
{
/*
Update magnified image.
@@ -12964,7 +12964,7 @@
height,
width;
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
{
/*
Display info on cropping rectangle.
@@ -13211,7 +13211,7 @@
if (status <= 0)
break;
status=ShredFile(filename);
- if (IfMagickTrue(status) )
+ if (status != MagickFalse )
{
XNoticeWidget(display,windows,"Unable to delete image file:",
filename);
@@ -13248,7 +13248,7 @@
q++;
(void) CopyMagickString(filename,p,(size_t) (q-p+1));
p=q;
- if (IfMagickTrue(IsPathAccessible(filename)) )
+ if (IsPathAccessible(filename != MagickFalse) )
{
tile++;
continue;
@@ -13818,7 +13818,7 @@
*/
assert(image != (Image *) NULL);
assert(image->signature == MagickCoreSignature);
- if (IfMagickTrue(image->debug) )
+ if (image->debug != MagickFalse )
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
resources=(*resource_info);
window_info.id=(Window) NULL;
@@ -13933,7 +13933,7 @@
image->filename);
window_info.x=0;
window_info.y=0;
- if (IfMagickTrue(image->debug) )
+ if (image->debug != MagickFalse )
{
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Image: %s[%.20g] %.20gx%.20g ",image->filename,(double) image->scene,
@@ -13948,7 +13948,7 @@
*/
width=(int) window_info.width;
height=(int) window_info.height;
- if (IfMagickTrue(resources.backdrop) )
+ if (resources.backdrop != MagickFalse )
{
/*
Center image on window.
@@ -14513,7 +14513,7 @@
assert(image != (Image **) NULL);
assert((*image)->signature == MagickCoreSignature);
- if (IfMagickTrue((*image)->debug) )
+ if ((*image != MagickFalse->debug) )
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",(*image)->filename);
display_image=(*image);
warning_handler=(WarningHandler) NULL;
@@ -14586,7 +14586,7 @@
manager_hints=windows->manager_hints;
root_window=XRootWindow(display,visual_info->screen);
nexus=NewImageList();
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
{
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Image: %s[%.20g] %.20gx%.20g ",display_image->filename,
@@ -14615,7 +14615,7 @@
manager_hints->initial_state=WithdrawnState;
XMakeWindow(display,root_window,argv,argc,class_hints,manager_hints,
&windows->context);
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Window id: 0x%lx (context)",windows->context.id);
context_values.background=pixel->background_color.pixel;
@@ -14666,7 +14666,7 @@
manager_hints->initial_state=IconicState;
XMakeWindow(display,root_window,argv,argc,class_hints,manager_hints,
&windows->icon);
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),"Window id: 0x%lx (icon)",
windows->icon.id);
/*
@@ -14767,7 +14767,7 @@
NormalState;
XMakeWindow(display,root_window,argv,argc,class_hints,manager_hints,
&windows->backdrop);
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Window id: 0x%lx (backdrop)",windows->backdrop.id);
(void) XMapWindow(display,windows->backdrop.id);
@@ -14799,7 +14799,7 @@
manager_hints->flags|=WindowGroupHint;
manager_hints->window_group=windows->group_leader.id;
(void) XSelectInput(display,windows->group_leader.id,StructureNotifyMask);
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Window id: 0x%lx (group leader)",windows->group_leader.id);
}
@@ -14811,7 +14811,7 @@
if (windows->group_leader.id != (Window) NULL)
(void) XSetTransientForHint(display,windows->image.id,
windows->group_leader.id);
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),"Window id: 0x%lx (image)",
windows->image.id);
/*
@@ -14839,9 +14839,9 @@
windows->info.shadow_stipple=XCreateBitmapFromData(display,
windows->info.id,(char *) ShadowBitmap,ShadowWidth,ShadowHeight);
(void) XSetTransientForHint(display,windows->info.id,windows->image.id);
- if (IfMagickTrue(windows->image.mapped) )
+ if (windows->image.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->info.id,windows->info.screen);
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),"Window id: 0x%lx (info)",
windows->info.id);
/*
@@ -14873,9 +14873,9 @@
windows->command.shadow_stipple=XCreateBitmapFromData(display,
windows->command.id,(char *) ShadowBitmap,ShadowWidth,ShadowHeight);
(void) XSetTransientForHint(display,windows->command.id,windows->image.id);
- if (IfMagickTrue(windows->command.mapped) )
+ if (windows->command.mapped != MagickFalse )
(void) XMapRaised(display,windows->command.id);
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Window id: 0x%lx (command)",windows->command.id);
/*
@@ -14904,7 +14904,7 @@
windows->widget.shadow_stipple=XCreateBitmapFromData(display,
windows->widget.id,(char *) ShadowBitmap,ShadowWidth,ShadowHeight);
(void) XSetTransientForHint(display,windows->widget.id,windows->image.id);
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Window id: 0x%lx (widget)",windows->widget.id);
/*
@@ -14928,7 +14928,7 @@
windows->popup.shadow_stipple=XCreateBitmapFromData(display,
windows->popup.id,(char *) ShadowBitmap,ShadowWidth,ShadowHeight);
(void) XSetTransientForHint(display,windows->popup.id,windows->image.id);
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Window id: 0x%lx (pop up)",windows->popup.id);
/*
@@ -14970,7 +14970,7 @@
manager_hints->window_group=windows->image.id;
XMakeWindow(display,root_window,argv,argc,class_hints,manager_hints,
&windows->magnify);
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Window id: 0x%lx (magnify)",windows->magnify.id);
(void) XSetTransientForHint(display,windows->magnify.id,windows->image.id);
@@ -14999,11 +14999,11 @@
manager_hints->window_group=windows->image.id;
XMakeWindow(display,root_window,argv,argc,class_hints,manager_hints,
&windows->pan);
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),"Window id: 0x%lx (pan)",
windows->pan.id);
(void) XSetTransientForHint(display,windows->pan.id,windows->image.id);
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->info.id,windows->info.screen);
if (IfMagickFalse(windows->image.mapped) ||
(windows->backdrop.id != (Window) NULL))
@@ -15039,9 +15039,9 @@
if (IfMagickFalse(status))
ThrowXWindowFatalException(XServerFatalError,"UnableToCreateXImage",
display_image->filename);
- if (IfMagickTrue(windows->magnify.mapped) )
+ if (windows->magnify.mapped != MagickFalse )
(void) XMapRaised(display,windows->magnify.id);
- if (IfMagickTrue(windows->pan.mapped) )
+ if (windows->pan.mapped != MagickFalse )
(void) XMapRaised(display,windows->pan.id);
windows->image.window_changes.width=(int) display_image->columns;
windows->image.window_changes.height=(int) display_image->rows;
@@ -15054,7 +15054,7 @@
delay=display_image->delay/MagickMax(display_image->ticks_per_second,1L);
timer=time((time_t *) NULL)+(delay == 0 ? 1 : delay)+1;
update_time=0;
- if (IfMagickTrue(resource_info->update) )
+ if (resource_info->update != MagickFalse )
{
MagickBooleanType
status;
@@ -15063,7 +15063,7 @@
Determine when file data was last modified.
*/
status=GetPathAttributes(display_image->filename,&attributes);
- if (IfMagickTrue(status) )
+ if (status != MagickFalse )
update_time=attributes.st_mtime;
}
*state&=(~FormerImageState);
@@ -15074,7 +15074,7 @@
/*
Handle a window event.
*/
- if (IfMagickTrue(windows->image.mapped) )
+ if (windows->image.mapped != MagickFalse )
if ((display_image->delay != 0) || (resource_info->update != 0))
{
if (timer < time((time_t *) NULL))
@@ -15090,7 +15090,7 @@
Determine if image file was modified.
*/
status=GetPathAttributes(display_image->filename,&attributes);
- if (IfMagickTrue(status) )
+ if (status != MagickFalse )
if (update_time != attributes.st_mtime)
{
/*
@@ -15160,7 +15160,7 @@
{
case ButtonPress:
{
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Button Press: 0x%lx %u +%d+%d",event.xbutton.window,
event.xbutton.button,event.xbutton.x,event.xbutton.y);
@@ -15200,7 +15200,7 @@
/*
Map/unmap Command widget.
*/
- if (IfMagickTrue(windows->command.mapped) )
+ if (windows->command.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->command.id,
windows->command.screen);
else
@@ -15355,7 +15355,7 @@
}
case ButtonRelease:
{
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Button Release: 0x%lx %u +%d+%d",event.xbutton.window,
event.xbutton.button,event.xbutton.x,event.xbutton.y);
@@ -15363,7 +15363,7 @@
}
case ClientMessage:
{
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Client Message: 0x%lx 0x%lx %d 0x%lx",event.xclient.window,
event.xclient.message_type,event.xclient.format,(unsigned long)
@@ -15409,7 +15409,7 @@
(unsigned long) magick_windows[i]->mask,
&magick_windows[i]->attributes);
}
- if (IfMagickTrue(windows->pan.mapped) )
+ if (windows->pan.mapped != MagickFalse )
{
(void) XSetWindowBackgroundPixmap(display,windows->pan.id,
windows->pan.pixmap);
@@ -15526,7 +15526,7 @@
}
case ConfigureNotify:
{
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Configure Notify: 0x%lx %dx%d+%d+%d %d",event.xconfigure.window,
event.xconfigure.width,event.xconfigure.height,event.xconfigure.x,
@@ -15611,8 +15611,8 @@
windows->image.x=vid_info.x;
windows->image.y=vid_info.y;
}
- if (IfMagickTrue(windows->image.mapped) &&
- IfMagickTrue(windows->image.stasis) )
+ if (windows->image.mapped != MagickFalse &&
+ windows->image.stasis != MagickFalse )
{
/*
Update image window configuration.
@@ -15632,7 +15632,7 @@
XDrawPanRectangle(display,windows);
}
else
- if (IfMagickTrue(windows->pan.mapped) )
+ if (windows->pan.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->pan.id,
windows->pan.screen);
break;
@@ -15665,8 +15665,8 @@
&window_changes);
break;
}
- if (IfMagickTrue(windows->magnify.mapped) &&
- IfMagickTrue(windows->magnify.stasis) )
+ if (windows->magnify.mapped != MagickFalse &&
+ windows->magnify.stasis != MagickFalse )
{
status=XMakeImage(display,resource_info,&windows->magnify,
display_image,windows->magnify.width,windows->magnify.height,
@@ -15675,7 +15675,7 @@
}
break;
}
- if (IfMagickTrue(windows->magnify.mapped) &&
+ if (windows->magnify.mapped != MagickFalse &&
(event.xconfigure.window == windows->pan.id))
{
/*
@@ -15706,7 +15706,7 @@
/*
Group leader has exited.
*/
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Destroy Notify: 0x%lx",event.xdestroywindow.window);
if (event.xdestroywindow.window == windows->group_leader.id)
@@ -15728,7 +15728,7 @@
}
case Expose:
{
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Expose: 0x%lx %dx%d+%d+%d",event.xexpose.window,
event.xexpose.width,event.xexpose.height,event.xexpose.x,
@@ -15737,7 +15737,7 @@
Refresh windows that are now exposed.
*/
if ((event.xexpose.window == windows->image.id) &&
- IfMagickTrue(windows->image.mapped) )
+ windows->image.mapped != MagickFalse )
{
XRefreshWindow(display,&windows->image,&event);
delay=display_image->delay/MagickMax(
@@ -15746,7 +15746,7 @@
break;
}
if ((event.xexpose.window == windows->magnify.id) &&
- IfMagickTrue(windows->magnify.mapped))
+ windows->magnify.mapped != MagickFalse)
{
XMakeMagnifyImage(display,windows,exception);
break;
@@ -15774,7 +15774,7 @@
length=XLookupString((XKeyEvent *) &event.xkey,command,(int)
sizeof(command),&key_symbol,(XComposeStatus *) NULL);
*(command+length)='\0';
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Key press: %d 0x%lx (%s)",event.xkey.state,(unsigned long)
key_symbol,command);
@@ -15813,7 +15813,7 @@
*/
(void) XLookupString((XKeyEvent *) &event.xkey,command,(int)
sizeof(command),&key_symbol,(XComposeStatus *) NULL);
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Key release: 0x%lx (%c)",(unsigned long) key_symbol,*command);
break;
@@ -15830,7 +15830,7 @@
}
case MapNotify:
{
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),"Map Notify: 0x%lx",
event.xmap.window);
if (event.xmap.window == windows->backdrop.id)
@@ -15938,7 +15938,7 @@
after,
length;
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Property Notify: 0x%lx 0x%lx %d",event.xproperty.window,
event.xproperty.atom,event.xproperty.state);
@@ -15970,7 +15970,7 @@
}
case ReparentNotify:
{
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Reparent Notify: 0x%lx=>0x%lx",event.xreparent.parent,
event.xreparent.window);
@@ -15978,7 +15978,7 @@
}
case UnmapNotify:
{
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),
"Unmap Notify: 0x%lx",event.xunmap.window);
if (event.xunmap.window == windows->backdrop.id)
@@ -16041,7 +16041,7 @@
}
default:
{
- if (IfMagickTrue(display_image->debug) )
+ if (display_image->debug != MagickFalse )
(void) LogMagickEvent(X11Event,GetMagickModule(),"Event type: %d",
event.type);
break;
@@ -16052,13 +16052,13 @@
(void) XMagickCommand(display,resource_info,windows,FreeBuffersCommand,
&display_image,exception);
else
- if (IfMagickTrue(resource_info->confirm_edit) )
+ if (resource_info->confirm_edit != MagickFalse )
{
/*
Query user if image has changed.
*/
if (IfMagickFalse(resource_info->immutable) &&
- IfMagickTrue(display_image->taint))
+ display_image->taint != MagickFalse)
{
int
status;
@@ -16080,16 +16080,16 @@
/*
Withdraw pan and Magnify window.
*/
- if (IfMagickTrue(windows->info.mapped) )
+ if (windows->info.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->info.id,windows->info.screen);
- if (IfMagickTrue(windows->magnify.mapped) )
+ if (windows->magnify.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->magnify.id,
windows->magnify.screen);
- if (IfMagickTrue(windows->command.mapped) )
+ if (windows->command.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->command.id,
windows->command.screen);
}
- if (IfMagickTrue(windows->pan.mapped) )
+ if (windows->pan.mapped != MagickFalse )
(void) XWithdrawWindow(display,windows->pan.id,windows->pan.screen);
if (IfMagickFalse(resource_info->backdrop) )
if (windows->backdrop.mapped)
@@ -16189,7 +16189,7 @@
assert(image != (Image *) NULL);
assert(image->signature == MagickCoreSignature);
(void) image_info;
- if (IfMagickTrue(image->debug) )
+ if (image->debug != MagickFalse )
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
(void) ThrowMagickException(exception,GetMagickModule(),MissingDelegateError,
"DelegateLibrarySupportNotBuiltIn","'%s' (X11)",image->filename);
diff --git a/MagickCore/enhance.c b/MagickCore/enhance.c
index 9bdd804..461a129 100644
--- a/MagickCore/enhance.c
+++ b/MagickCore/enhance.c
@@ -326,7 +326,7 @@
assert(clut_image->signature == MagickCoreSignature);
if( IfMagickFalse(SetImageStorageClass(image,DirectClass,exception)) )
return(MagickFalse);
- if( IfMagickTrue(IsGrayColorspace(image->colorspace)) &&
+ if( IsGrayColorspace(image->colorspace != MagickFalse) &&
IfMagickFalse(IsGrayColorspace(clut_image->colorspace)))
(void) SetImageColorspace(image,sRGBColorspace,exception);
clut_map=(PixelInfo *) AcquireQuantumMemory(MaxMap+1UL,sizeof(*clut_map));
@@ -888,7 +888,7 @@
assert(image->signature == MagickCoreSignature);
if (image->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- sign=IfMagickTrue(sharpen) ? 1 : -1;
+ sign=sharpen != MagickFalse ? 1 : -1;
if (image->storage_class == PseudoClass)
{
/*
@@ -2679,7 +2679,7 @@
assert(image->signature == MagickCoreSignature);
if (image->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- if( IfMagickTrue(IsGrayColorspace(image->colorspace)) &&
+ if( IsGrayColorspace(image->colorspace != MagickFalse) &&
(IfMagickFalse(IsGrayColorspace(black_color->colorspace)) ||
IfMagickFalse(IsGrayColorspace(white_color->colorspace))))
(void) SetImageColorspace(image,sRGBColorspace,exception);
@@ -3423,7 +3423,7 @@
/*
Negate colormap.
*/
- if( IfMagickTrue(grayscale) )
+ if( grayscale != MagickFalse )
if ((image->colormap[i].red != image->colormap[i].green) ||
(image->colormap[i].green != image->colormap[i].blue))
continue;
@@ -3440,7 +3440,7 @@
status=MagickTrue;
progress=0;
image_view=AcquireAuthenticCacheView(image,exception);
- if( IfMagickTrue(grayscale) )
+ if( grayscale != MagickFalse )
{
for (y=0; y < (ssize_t) image->rows; y++)
{
@@ -3468,7 +3468,7 @@
j;
if ((GetPixelReadMask(image,q) == 0) ||
- IfMagickTrue(IsPixelGray(image,q)))
+ IsPixelGray(image,q != MagickFalse))
{
q+=GetPixelChannels(image);
continue;
@@ -3771,7 +3771,7 @@
register ssize_t
i;
- if( IfMagickTrue(sharpen) )
+ if( sharpen != MagickFalse )
for (i=0; i < (ssize_t) image->colors; i++)
{
if ((GetPixelRedTraits(image) & UpdatePixelTrait) != 0)
@@ -3846,7 +3846,7 @@
PixelTrait traits=GetPixelChannelTraits(image,channel);
if ((traits & UpdatePixelTrait) == 0)
continue;
- if( IfMagickTrue(sharpen) )
+ if( sharpen != MagickFalse )
q[i]=ScaledSig(q[i]);
else
q[i]=InverseScaledSig(q[i]);
diff --git a/MagickCore/hashmap.c b/MagickCore/hashmap.c
index 0a63d45..b793755 100644
--- a/MagickCore/hashmap.c
+++ b/MagickCore/hashmap.c
@@ -1,300 +1,300 @@
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% H H AAA SSSSS H H M M AAA PPPP %
-% H H A A SS H H MM MM A A P P %
-% HHHHH AAAAA SSS HHHHH M M M AAAAA PPPP %
-% H H A A SS H H M M A A P %
-% H H A A SSSSS H H M M A A P %
-% %
-% %
-% MagickCore Hash-map and Linked-list Methods %
-% %
-% Software Design %
-% Cristy %
-% December 2002 %
-% %
-% %
-% Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization %
-% dedicated to making software imaging solutions freely available. %
-% %
-% You may not use this file except in compliance with the License. You may %
-% obtain a copy of the License at %
-% %
-% http://www.imagemagick.org/script/license.php %
-% %
-% Unless required by applicable law or agreed to in writing, software %
-% distributed under the License is distributed on an "AS IS" BASIS, %
-% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
-% See the License for the specific language governing permissions and %
-% limitations under the License. %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% This module implements the standard handy hash and linked-list methods for
-% storing and retrieving large numbers of data elements. It is loosely based
-% on the Java implementation of these algorithms.
-%
-*/
-
-/*
- Include declarations.
-*/
-#include "MagickCore/studio.h"
-#include "MagickCore/exception.h"
-#include "MagickCore/exception-private.h"
-#include "MagickCore/locale_.h"
-#include "MagickCore/hashmap.h"
-#include "MagickCore/memory_.h"
-#include "MagickCore/semaphore.h"
-#include "MagickCore/signature-private.h"
-#include "MagickCore/string_.h"
-
-/*
- Typedef declarations.
-*/
-typedef struct _ElementInfo
-{
- void
- *value;
-
- struct _ElementInfo
- *next;
-} ElementInfo;
-
-typedef struct _EntryInfo
-{
- size_t
- hash;
-
- void
- *key,
- *value;
-} EntryInfo;
-
-struct _LinkedListInfo
-{
- size_t
- capacity,
- elements;
-
- ElementInfo
- *head,
- *tail,
- *next;
-
- SemaphoreInfo
- *semaphore;
-
- size_t
- signature;
-};
-
-struct _HashmapInfo
-{
- size_t
- (*hash)(const void *);
-
- MagickBooleanType
- (*compare)(const void *,const void *);
-
- void
- *(*relinquish_key)(void *),
- *(*relinquish_value)(void *);
-
- size_t
- capacity,
- entries,
- next;
-
- MagickBooleanType
- head_of_list;
-
- LinkedListInfo
- **map;
-
- SemaphoreInfo
- *semaphore;
-
- size_t
- signature;
-};
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% A p p e n d V a l u e T o L i n k e d L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% AppendValueToLinkedList() appends a value to the end of the linked-list.
-%
-% The format of the AppendValueToLinkedList method is:
-%
-% MagickBooleanType AppendValueToLinkedList(LinkedListInfo *list_info,
-% const void *value)
-%
-% A description of each parameter follows:
-%
-% o list_info: the linked-list info.
-%
-% o value: the value.
-%
-*/
-MagickExport MagickBooleanType AppendValueToLinkedList(
- LinkedListInfo *list_info,const void *value)
-{
- register ElementInfo
- *next;
-
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- if (list_info->elements == list_info->capacity)
- return(MagickFalse);
- next=(ElementInfo *) AcquireMagickMemory(sizeof(*next));
- if (next == (ElementInfo *) NULL)
- return(MagickFalse);
- next->value=(void *) value;
- next->next=(ElementInfo *) NULL;
- LockSemaphoreInfo(list_info->semaphore);
- if (list_info->next == (ElementInfo *) NULL)
- list_info->next=next;
- if (list_info->elements == 0)
- list_info->head=next;
- else
- list_info->tail->next=next;
- list_info->tail=next;
- list_info->elements++;
- UnlockSemaphoreInfo(list_info->semaphore);
- return(MagickTrue);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% C l e a r L i n k e d L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ClearLinkedList() clears all the elements from the linked-list.
-%
-% The format of the ClearLinkedList method is:
-%
-% void ClearLinkedList(LinkedListInfo *list_info,
-% void *(*relinquish_value)(void *))
-%
-% A description of each parameter follows:
-%
-% o list_info: the linked-list info.
-%
-% o relinquish_value: the value deallocation method; typically
-% RelinquishMagickMemory().
-%
-*/
-MagickExport void ClearLinkedList(LinkedListInfo *list_info,
- void *(*relinquish_value)(void *))
-{
- ElementInfo
- *element;
-
- register ElementInfo
- *next;
-
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- LockSemaphoreInfo(list_info->semaphore);
- next=list_info->head;
- while (next != (ElementInfo *) NULL)
- {
- if (relinquish_value != (void *(*)(void *)) NULL)
- next->value=relinquish_value(next->value);
- element=next;
- next=next->next;
- element=(ElementInfo *) RelinquishMagickMemory(element);
- }
- list_info->head=(ElementInfo *) NULL;
- list_info->tail=(ElementInfo *) NULL;
- list_info->next=(ElementInfo *) NULL;
- list_info->elements=0;
- UnlockSemaphoreInfo(list_info->semaphore);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% C o m p a r e H a s h m a p S t r i n g %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% CompareHashmapString() finds an entry in a hash-map based on the contents
-% of a string.
-%
-% The format of the CompareHashmapString method is:
-%
-% MagickBooleanType CompareHashmapString(const void *target,
-% const void *source)
-%
-% A description of each parameter follows:
-%
-% o target: the target string.
-%
-% o source: the source string.
-%
-*/
-MagickExport MagickBooleanType CompareHashmapString(const void *target,
- const void *source)
-{
- const char
- *p,
- *q;
-
- p=(const char *) target;
- q=(const char *) source;
- return(LocaleCompare(p,q) == 0 ? MagickTrue : MagickFalse);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% C o m p a r e H a s h m a p S t r i n g I n f o %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% CompareHashmapStringInfo() finds an entry in a hash-map based on the
-% contents of a string.
-%
-% The format of the CompareHashmapStringInfo method is:
-%
-% MagickBooleanType CompareHashmapStringInfo(const void *target,
-% const void *source)
-%
-% A description of each parameter follows:
-%
-% o target: the target string.
-%
-% o source: the source string.
-%
-*/
-MagickExport MagickBooleanType CompareHashmapStringInfo(const void *target,
- const void *source)
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% H H AAA SSSSS H H M M AAA PPPP %
+% H H A A SS H H MM MM A A P P %
+% HHHHH AAAAA SSS HHHHH M M M AAAAA PPPP %
+% H H A A SS H H M M A A P %
+% H H A A SSSSS H H M M A A P %
+% %
+% %
+% MagickCore Hash-map and Linked-list Methods %
+% %
+% Software Design %
+% Cristy %
+% December 2002 %
+% %
+% %
+% Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization %
+% dedicated to making software imaging solutions freely available. %
+% %
+% You may not use this file except in compliance with the License. You may %
+% obtain a copy of the License at %
+% %
+% http://www.imagemagick.org/script/license.php %
+% %
+% Unless required by applicable law or agreed to in writing, software %
+% distributed under the License is distributed on an "AS IS" BASIS, %
+% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %
+% See the License for the specific language governing permissions and %
+% limitations under the License. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This module implements the standard handy hash and linked-list methods for
+% storing and retrieving large numbers of data elements. It is loosely based
+% on the Java implementation of these algorithms.
+%
+*/
+
+/*
+ Include declarations.
+*/
+#include "MagickCore/studio.h"
+#include "MagickCore/exception.h"
+#include "MagickCore/exception-private.h"
+#include "MagickCore/locale_.h"
+#include "MagickCore/hashmap.h"
+#include "MagickCore/memory_.h"
+#include "MagickCore/semaphore.h"
+#include "MagickCore/signature-private.h"
+#include "MagickCore/string_.h"
+
+/*
+ Typedef declarations.
+*/
+typedef struct _ElementInfo
+{
+ void
+ *value;
+
+ struct _ElementInfo
+ *next;
+} ElementInfo;
+
+typedef struct _EntryInfo
+{
+ size_t
+ hash;
+
+ void
+ *key,
+ *value;
+} EntryInfo;
+
+struct _LinkedListInfo
+{
+ size_t
+ capacity,
+ elements;
+
+ ElementInfo
+ *head,
+ *tail,
+ *next;
+
+ SemaphoreInfo
+ *semaphore;
+
+ size_t
+ signature;
+};
+
+struct _HashmapInfo
+{
+ size_t
+ (*hash)(const void *);
+
+ MagickBooleanType
+ (*compare)(const void *,const void *);
+
+ void
+ *(*relinquish_key)(void *),
+ *(*relinquish_value)(void *);
+
+ size_t
+ capacity,
+ entries,
+ next;
+
+ MagickBooleanType
+ head_of_list;
+
+ LinkedListInfo
+ **map;
+
+ SemaphoreInfo
+ *semaphore;
+
+ size_t
+ signature;
+};
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% A p p e n d V a l u e T o L i n k e d L i s t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% AppendValueToLinkedList() appends a value to the end of the linked-list.
+%
+% The format of the AppendValueToLinkedList method is:
+%
+% MagickBooleanType AppendValueToLinkedList(LinkedListInfo *list_info,
+% const void *value)
+%
+% A description of each parameter follows:
+%
+% o list_info: the linked-list info.
+%
+% o value: the value.
+%
+*/
+MagickExport MagickBooleanType AppendValueToLinkedList(
+ LinkedListInfo *list_info,const void *value)
+{
+ register ElementInfo
+ *next;
+
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ if (list_info->elements == list_info->capacity)
+ return(MagickFalse);
+ next=(ElementInfo *) AcquireMagickMemory(sizeof(*next));
+ if (next == (ElementInfo *) NULL)
+ return(MagickFalse);
+ next->value=(void *) value;
+ next->next=(ElementInfo *) NULL;
+ LockSemaphoreInfo(list_info->semaphore);
+ if (list_info->next == (ElementInfo *) NULL)
+ list_info->next=next;
+ if (list_info->elements == 0)
+ list_info->head=next;
+ else
+ list_info->tail->next=next;
+ list_info->tail=next;
+ list_info->elements++;
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return(MagickTrue);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% C l e a r L i n k e d L i s t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ClearLinkedList() clears all the elements from the linked-list.
+%
+% The format of the ClearLinkedList method is:
+%
+% void ClearLinkedList(LinkedListInfo *list_info,
+% void *(*relinquish_value)(void *))
+%
+% A description of each parameter follows:
+%
+% o list_info: the linked-list info.
+%
+% o relinquish_value: the value deallocation method; typically
+% RelinquishMagickMemory().
+%
+*/
+MagickExport void ClearLinkedList(LinkedListInfo *list_info,
+ void *(*relinquish_value)(void *))
+{
+ ElementInfo
+ *element;
+
+ register ElementInfo
+ *next;
+
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ LockSemaphoreInfo(list_info->semaphore);
+ next=list_info->head;
+ while (next != (ElementInfo *) NULL)
+ {
+ if (relinquish_value != (void *(*)(void *)) NULL)
+ next->value=relinquish_value(next->value);
+ element=next;
+ next=next->next;
+ element=(ElementInfo *) RelinquishMagickMemory(element);
+ }
+ list_info->head=(ElementInfo *) NULL;
+ list_info->tail=(ElementInfo *) NULL;
+ list_info->next=(ElementInfo *) NULL;
+ list_info->elements=0;
+ UnlockSemaphoreInfo(list_info->semaphore);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% C o m p a r e H a s h m a p S t r i n g %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% CompareHashmapString() finds an entry in a hash-map based on the contents
+% of a string.
+%
+% The format of the CompareHashmapString method is:
+%
+% MagickBooleanType CompareHashmapString(const void *target,
+% const void *source)
+%
+% A description of each parameter follows:
+%
+% o target: the target string.
+%
+% o source: the source string.
+%
+*/
+MagickExport MagickBooleanType CompareHashmapString(const void *target,
+ const void *source)
+{
+ const char
+ *p,
+ *q;
+
+ p=(const char *) target;
+ q=(const char *) source;
+ return(LocaleCompare(p,q) == 0 ? MagickTrue : MagickFalse);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% C o m p a r e H a s h m a p S t r i n g I n f o %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% CompareHashmapStringInfo() finds an entry in a hash-map based on the
+% contents of a string.
+%
+% The format of the CompareHashmapStringInfo method is:
+%
+% MagickBooleanType CompareHashmapStringInfo(const void *target,
+% const void *source)
+%
+% A description of each parameter follows:
+%
+% o target: the target string.
+%
+% o source: the source string.
+%
+*/
+MagickExport MagickBooleanType CompareHashmapStringInfo(const void *target,
+ const void *source)
{
const StringInfo
*p,
@@ -302,1627 +302,1627 @@
p=(const StringInfo *) target;
q=(const StringInfo *) source;
- return(CompareStringInfo(p,q) == 0 ? MagickTrue : MagickFalse);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% D e s t r o y H a s h m a p %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% DestroyHashmap() frees the hash-map and all associated resources.
-%
-% The format of the DestroyHashmap method is:
-%
-% HashmapInfo *DestroyHashmap(HashmapInfo *hashmap_info)
-%
-% A description of each parameter follows:
-%
-% o hashmap_info: the hashmap info.
-%
-*/
-MagickExport HashmapInfo *DestroyHashmap(HashmapInfo *hashmap_info)
-{
- LinkedListInfo
- *list_info;
-
- register EntryInfo
- *entry;
-
- register ssize_t
- i;
-
- assert(hashmap_info != (HashmapInfo *) NULL);
- assert(hashmap_info->signature == MagickCoreSignature);
- LockSemaphoreInfo(hashmap_info->semaphore);
- for (i=0; i < (ssize_t) hashmap_info->capacity; i++)
- {
- list_info=hashmap_info->map[i];
- if (list_info != (LinkedListInfo *) NULL)
- {
- list_info->next=list_info->head;
- entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
- while (entry != (EntryInfo *) NULL)
- {
- if (hashmap_info->relinquish_key != (void *(*)(void *)) NULL)
- entry->key=hashmap_info->relinquish_key(entry->key);
- if (hashmap_info->relinquish_value != (void *(*)(void *)) NULL)
- entry->value=hashmap_info->relinquish_value(entry->value);
- entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
- }
- }
- if (list_info != (LinkedListInfo *) NULL)
- list_info=DestroyLinkedList(list_info,RelinquishMagickMemory);
- }
- hashmap_info->map=(LinkedListInfo **) RelinquishMagickMemory(
- hashmap_info->map);
- hashmap_info->signature=(~MagickCoreSignature);
- UnlockSemaphoreInfo(hashmap_info->semaphore);
- RelinquishSemaphoreInfo(&hashmap_info->semaphore);
- hashmap_info=(HashmapInfo *) RelinquishMagickMemory(hashmap_info);
- return(hashmap_info);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% D e s t r o y L i n k e d L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% DestroyLinkedList() frees the linked-list and all associated resources.
-%
-% The format of the DestroyLinkedList method is:
-%
-% LinkedListInfo *DestroyLinkedList(LinkedListInfo *list_info,
-% void *(*relinquish_value)(void *))
-%
-% A description of each parameter follows:
-%
-% o list_info: the linked-list info.
-%
-% o relinquish_value: the value deallocation method; typically
-% RelinquishMagickMemory().
-%
-*/
-MagickExport LinkedListInfo *DestroyLinkedList(LinkedListInfo *list_info,
- void *(*relinquish_value)(void *))
-{
- ElementInfo
- *entry;
-
- register ElementInfo
- *next;
-
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- LockSemaphoreInfo(list_info->semaphore);
- for (next=list_info->head; next != (ElementInfo *) NULL; )
- {
- if (relinquish_value != (void *(*)(void *)) NULL)
- next->value=relinquish_value(next->value);
- entry=next;
- next=next->next;
- entry=(ElementInfo *) RelinquishMagickMemory(entry);
- }
- list_info->signature=(~MagickCoreSignature);
- UnlockSemaphoreInfo(list_info->semaphore);
- RelinquishSemaphoreInfo(&list_info->semaphore);
- list_info=(LinkedListInfo *) RelinquishMagickMemory(list_info);
- return(list_info);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t L a s t V a l u e I n L i n k e d L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetLastValueInLinkedList() gets the last value in the linked-list.
-%
-% The format of the GetLastValueInLinkedList method is:
-%
-% void *GetLastValueInLinkedList(LinkedListInfo *list_info)
-%
-% A description of each parameter follows:
-%
-% o list_info: the linked_list info.
-%
-*/
-MagickExport void *GetLastValueInLinkedList(LinkedListInfo *list_info)
-{
- void
- *value;
-
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- if (list_info->elements == 0)
- return((void *) NULL);
- LockSemaphoreInfo(list_info->semaphore);
- value=list_info->tail->value;
- UnlockSemaphoreInfo(list_info->semaphore);
- return(value);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t N e x t K e y I n H a s h m a p %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetNextKeyInHashmap() gets the next key in the hash-map.
-%
-% The format of the GetNextKeyInHashmap method is:
-%
-% void *GetNextKeyInHashmap(HashmapInfo *hashmap_info)
-%
-% A description of each parameter follows:
-%
-% o hashmap_info: the hashmap info.
-%
-*/
-MagickExport void *GetNextKeyInHashmap(HashmapInfo *hashmap_info)
-{
- LinkedListInfo
- *list_info;
-
- register EntryInfo
- *entry;
-
- void
- *key;
-
- assert(hashmap_info != (HashmapInfo *) NULL);
- assert(hashmap_info->signature == MagickCoreSignature);
- LockSemaphoreInfo(hashmap_info->semaphore);
- while (hashmap_info->next < hashmap_info->capacity)
- {
- list_info=hashmap_info->map[hashmap_info->next];
- if (list_info != (LinkedListInfo *) NULL)
- {
- if (IfMagickFalse(hashmap_info->head_of_list))
- {
- list_info->next=list_info->head;
- hashmap_info->head_of_list=MagickTrue;
- }
- entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
- if (entry != (EntryInfo *) NULL)
- {
- key=entry->key;
- UnlockSemaphoreInfo(hashmap_info->semaphore);
- return(key);
- }
- hashmap_info->head_of_list=MagickFalse;
- }
- hashmap_info->next++;
- }
- UnlockSemaphoreInfo(hashmap_info->semaphore);
- return((void *) NULL);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t N e x t V a l u e I n H a s h m a p %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetNextValueInHashmap() gets the next value in the hash-map.
-%
-% The format of the GetNextValueInHashmap method is:
-%
-% void *GetNextValueInHashmap(HashmapInfo *hashmap_info)
-%
-% A description of each parameter follows:
-%
-% o hashmap_info: the hashmap info.
-%
-*/
-MagickExport void *GetNextValueInHashmap(HashmapInfo *hashmap_info)
-{
- LinkedListInfo
- *list_info;
-
- register EntryInfo
- *entry;
-
- void
- *value;
-
- assert(hashmap_info != (HashmapInfo *) NULL);
- assert(hashmap_info->signature == MagickCoreSignature);
- LockSemaphoreInfo(hashmap_info->semaphore);
- while (hashmap_info->next < hashmap_info->capacity)
- {
- list_info=hashmap_info->map[hashmap_info->next];
- if (list_info != (LinkedListInfo *) NULL)
- {
- if (IfMagickFalse(hashmap_info->head_of_list))
- {
- list_info->next=list_info->head;
- hashmap_info->head_of_list=MagickTrue;
- }
- entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
- if (entry != (EntryInfo *) NULL)
- {
- value=entry->value;
- UnlockSemaphoreInfo(hashmap_info->semaphore);
- return(value);
- }
- hashmap_info->head_of_list=MagickFalse;
- }
- hashmap_info->next++;
- }
- UnlockSemaphoreInfo(hashmap_info->semaphore);
- return((void *) NULL);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t N e x t V a l u e I n L i n k e d L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetNextValueInLinkedList() gets the next value in the linked-list.
-%
-% The format of the GetNextValueInLinkedList method is:
-%
-% void *GetNextValueInLinkedList(LinkedListInfo *list_info)
-%
-% A description of each parameter follows:
-%
-% o list_info: the linked-list info.
-%
-*/
-MagickExport void *GetNextValueInLinkedList(LinkedListInfo *list_info)
-{
- void
- *value;
-
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- LockSemaphoreInfo(list_info->semaphore);
- if (list_info->next == (ElementInfo *) NULL)
- {
- UnlockSemaphoreInfo(list_info->semaphore);
- return((void *) NULL);
- }
- value=list_info->next->value;
- list_info->next=list_info->next->next;
- UnlockSemaphoreInfo(list_info->semaphore);
- return(value);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t N u m b e r O f E n t r i e s I n H a s h m a p %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetNumberOfEntriesInHashmap() returns the number of entries in the hash-map.
-%
-% The format of the GetNumberOfEntriesInHashmap method is:
-%
-% size_t GetNumberOfEntriesInHashmap(const HashmapInfo *hashmap_info)
-%
-% A description of each parameter follows:
-%
-% o hashmap_info: the hashmap info.
-%
-*/
-MagickExport size_t GetNumberOfEntriesInHashmap(
- const HashmapInfo *hashmap_info)
-{
- assert(hashmap_info != (HashmapInfo *) NULL);
- assert(hashmap_info->signature == MagickCoreSignature);
- return(hashmap_info->entries);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t N u m b e r O f E l e m e n t s I n L i n k e d L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetNumberOfElementsInLinkedList() returns the number of entries in the
-% linked-list.
-%
-% The format of the GetNumberOfElementsInLinkedList method is:
-%
-% size_t GetNumberOfElementsInLinkedList(
-% const LinkedListInfo *list_info)
-%
-% A description of each parameter follows:
-%
-% o list_info: the linked-list info.
-%
-*/
-MagickExport size_t GetNumberOfElementsInLinkedList(
- const LinkedListInfo *list_info)
-{
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- return(list_info->elements);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t V a l u e F r o m H a s h m a p %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetValueFromHashmap() gets an entry from the hash-map by its key.
-%
-% The format of the GetValueFromHashmap method is:
-%
-% void *GetValueFromHashmap(HashmapInfo *hashmap_info,const void *key)
-%
-% A description of each parameter follows:
-%
-% o hashmap_info: the hashmap info.
-%
-% o key: the key.
-%
-*/
-MagickExport void *GetValueFromHashmap(HashmapInfo *hashmap_info,
- const void *key)
-{
- LinkedListInfo
- *list_info;
-
- register EntryInfo
- *entry;
-
- size_t
- hash;
-
- void
- *value;
-
- assert(hashmap_info != (HashmapInfo *) NULL);
- assert(hashmap_info->signature == MagickCoreSignature);
- if (key == (const void *) NULL)
- return((void *) NULL);
- LockSemaphoreInfo(hashmap_info->semaphore);
- hash=hashmap_info->hash(key);
- list_info=hashmap_info->map[hash % hashmap_info->capacity];
- if (list_info != (LinkedListInfo *) NULL)
- {
- list_info->next=list_info->head;
- entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
- while (entry != (EntryInfo *) NULL)
- {
- if (entry->hash == hash)
- {
- MagickBooleanType
- compare;
-
- compare=MagickTrue;
- if (hashmap_info->compare !=
- (MagickBooleanType (*)(const void *,const void *)) NULL)
- compare=hashmap_info->compare(key,entry->key);
- if (IfMagickTrue(compare))
- {
- value=entry->value;
- UnlockSemaphoreInfo(hashmap_info->semaphore);
- return(value);
- }
- }
- entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
- }
- }
- UnlockSemaphoreInfo(hashmap_info->semaphore);
- return((void *) NULL);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% G e t V a l u e F r o m L i n k e d L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% GetValueFromLinkedList() gets a value from the linked-list at the specified
-% location.
-%
-% The format of the GetValueFromLinkedList method is:
-%
-% void *GetValueFromLinkedList(LinkedListInfo *list_info,
-% const size_t index)
-%
-% A description of each parameter follows:
-%
-% o list_info: the linked_list info.
-%
-% o index: the list index.
-%
-*/
-MagickExport void *GetValueFromLinkedList(LinkedListInfo *list_info,
- const size_t index)
-{
- register ElementInfo
- *next;
-
- register ssize_t
- i;
-
- void
- *value;
-
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- if (index >= list_info->elements)
- return((void *) NULL);
- LockSemaphoreInfo(list_info->semaphore);
- if (index == 0)
- {
- value=list_info->head->value;
- UnlockSemaphoreInfo(list_info->semaphore);
- return(value);
- }
- if (index == (list_info->elements-1))
- {
- value=list_info->tail->value;
- UnlockSemaphoreInfo(list_info->semaphore);
- return(value);
- }
- next=list_info->head;
- for (i=0; i < (ssize_t) index; i++)
- next=next->next;
- value=next->value;
- UnlockSemaphoreInfo(list_info->semaphore);
- return(value);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% H a s h P o i n t e r T y p e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% HashPointerType() finds an entry in a hash-map based on the address of a
-% pointer.
-%
-% The format of the HashPointerType method is:
-%
-% size_t HashPointerType(const void *pointer)
-%
-% A description of each parameter follows:
-%
-% o pointer: compute the hash entry location from this pointer address.
-%
-*/
-MagickExport size_t HashPointerType(const void *pointer)
-{
- size_t
- hash;
-
- hash=(size_t) pointer;
- hash+=(~(hash << 9));
- hash^=(hash >> 14);
- hash+=(hash << 4);
- hash^=(hash >> 10);
- return(hash);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% H a s h S t r i n g T y p e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% HashStringType() finds an entry in a hash-map based on the contents of a
-% string.
-%
-% The format of the HashStringType method is:
-%
-% size_t HashStringType(const void *string)
-%
-% A description of each parameter follows:
-%
-% o string: compute the hash entry location from this string.
-%
-*/
-MagickExport size_t HashStringType(const void *string)
-{
- const unsigned char
- *digest;
-
- register ssize_t
- i;
-
- SignatureInfo
- *signature_info;
-
- size_t
- hash;
-
- StringInfo
- *signature;
-
- signature_info=AcquireSignatureInfo();
- signature=StringToStringInfo((const char *) string);
- UpdateSignature(signature_info,signature);
- FinalizeSignature(signature_info);
- digest=GetStringInfoDatum(GetSignatureDigest(signature_info));
- hash=0;
- for (i=0; i < 8; i++)
- hash^=digest[i];
- signature=DestroyStringInfo(signature);
- signature_info=DestroySignatureInfo(signature_info);
- return(hash);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% H a s h S t r i n g I n f o T y p e %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% Specify the HashStringInfoType() method in NewHashmap() to find an entry
-% in a hash-map based on the contents of a string.
-%
-% The format of the HashStringInfoType method is:
-%
-% size_t HashStringInfoType(const void *string_info)
-%
-% A description of each parameter follows:
-%
-% o string_info: compute the hash entry location from this string.
-%
-*/
-MagickExport size_t HashStringInfoType(const void *string_info)
-{
- const unsigned char
- *digest;
-
- register ssize_t
- i;
-
- SignatureInfo
- *signature_info;
-
- size_t
- hash;
-
- signature_info=AcquireSignatureInfo();
- UpdateSignature(signature_info,(const StringInfo *) string_info);
- FinalizeSignature(signature_info);
- digest=GetStringInfoDatum(GetSignatureDigest(signature_info));
- hash=0;
- for (i=0; i < 8; i++)
- hash^=digest[i];
- signature_info=DestroySignatureInfo(signature_info);
- return(hash);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% I n s e r t V a l u e I n L i n k e d L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% InsertValueInLinkedList() inserts an element in the linked-list at the
-% specified location.
-%
-% The format of the InsertValueInLinkedList method is:
-%
-% MagickBooleanType InsertValueInLinkedList(ListInfo *list_info,
-% const size_t index,const void *value)
-%
-% A description of each parameter follows:
-%
-% o list_info: the hashmap info.
-%
-% o index: the index.
-%
-% o value: the value.
-%
-*/
-MagickExport MagickBooleanType InsertValueInLinkedList(
- LinkedListInfo *list_info,const size_t index,const void *value)
-{
- register ElementInfo
- *next;
-
- register ssize_t
- i;
-
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- if (value == (const void *) NULL)
- return(MagickFalse);
- if ((index > list_info->elements) ||
- (list_info->elements == list_info->capacity))
- return(MagickFalse);
- next=(ElementInfo *) AcquireMagickMemory(sizeof(*next));
- if (next == (ElementInfo *) NULL)
- return(MagickFalse);
- next->value=(void *) value;
- next->next=(ElementInfo *) NULL;
- LockSemaphoreInfo(list_info->semaphore);
- if (list_info->elements == 0)
- {
- if (list_info->next == (ElementInfo *) NULL)
- list_info->next=next;
- list_info->head=next;
- list_info->tail=next;
- }
- else
- {
- if (index == 0)
- {
- if (list_info->next == list_info->head)
- list_info->next=next;
- next->next=list_info->head;
- list_info->head=next;
- }
- else
- if (index == list_info->elements)
- {
- if (list_info->next == (ElementInfo *) NULL)
- list_info->next=next;
- list_info->tail->next=next;
- list_info->tail=next;
- }
- else
- {
- ElementInfo
- *element;
-
- element=list_info->head;
- next->next=element->next;
- for (i=1; i < (ssize_t) index; i++)
- {
- element=element->next;
- next->next=element->next;
- }
- next=next->next;
- element->next=next;
- if (list_info->next == next->next)
- list_info->next=next;
- }
- }
- list_info->elements++;
- UnlockSemaphoreInfo(list_info->semaphore);
- return(MagickTrue);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% I n s e r t V a l u e I n S o r t e d L i n k e d L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% InsertValueInSortedLinkedList() inserts a value in the sorted linked-list.
-%
-% The format of the InsertValueInSortedLinkedList method is:
-%
-% MagickBooleanType InsertValueInSortedLinkedList(ListInfo *list_info,
-% int (*compare)(const void *,const void *),void **replace,
-% const void *value)
-%
-% A description of each parameter follows:
-%
-% o list_info: the hashmap info.
-%
-% o index: the index.
-%
-% o compare: the compare method.
-%
-% o replace: return previous element here.
-%
-% o value: the value.
-%
-*/
-MagickExport MagickBooleanType InsertValueInSortedLinkedList(
- LinkedListInfo *list_info,int (*compare)(const void *,const void *),
- void **replace,const void *value)
-{
- ElementInfo
- *element;
-
- register ElementInfo
- *next;
-
- register ssize_t
- i;
-
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- if ((compare == (int (*)(const void *,const void *)) NULL) ||
- (value == (const void *) NULL))
- return(MagickFalse);
- if (list_info->elements == list_info->capacity)
- return(MagickFalse);
- next=(ElementInfo *) AcquireMagickMemory(sizeof(*next));
- if (next == (ElementInfo *) NULL)
- return(MagickFalse);
- next->value=(void *) value;
- element=(ElementInfo *) NULL;
- LockSemaphoreInfo(list_info->semaphore);
- next->next=list_info->head;
- while (next->next != (ElementInfo *) NULL)
- {
- i=(ssize_t) compare(value,next->next->value);
- if ((i < 0) || ((replace != (void **) NULL) && (i == 0)))
- {
- if (i == 0)
- {
- *replace=next->next->value;
- next->next=next->next->next;
- if (element != (ElementInfo *) NULL)
- element->next=(ElementInfo *) RelinquishMagickMemory(
- element->next);
- list_info->elements--;
- }
- if (element != (ElementInfo *) NULL)
- element->next=next;
- else
- list_info->head=next;
- break;
- }
- element=next->next;
- next->next=next->next->next;
- }
- if (next->next == (ElementInfo *) NULL)
- {
- if (element != (ElementInfo *) NULL)
- element->next=next;
- else
- list_info->head=next;
- list_info->tail=next;
- }
- list_info->elements++;
- UnlockSemaphoreInfo(list_info->semaphore);
- return(MagickTrue);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% I s H a s h m a p E m p t y %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% IsHashmapEmpty() returns MagickTrue if the hash-map is empty.
-%
-% The format of the IsHashmapEmpty method is:
-%
-% MagickBooleanType IsHashmapEmpty(const HashmapInfo *hashmap_info)
-%
-% A description of each parameter follows:
-%
-% o hashmap_info: the hashmap info.
-%
-*/
-MagickExport MagickBooleanType IsHashmapEmpty(const HashmapInfo *hashmap_info)
-{
- assert(hashmap_info != (HashmapInfo *) NULL);
- assert(hashmap_info->signature == MagickCoreSignature);
- return(hashmap_info->entries == 0 ? MagickTrue : MagickFalse);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% I s L i n k e d L i s t E m p t y %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% IsLinkedListEmpty() returns MagickTrue if the linked-list is empty.
-%
-% The format of the IsLinkedListEmpty method is:
-%
-% MagickBooleanType IsLinkedListEmpty(LinkedListInfo *list_info)
-%
-% A description of each parameter follows:
-%
-% o list_info: the linked-list info.
-%
-*/
-MagickExport MagickBooleanType IsLinkedListEmpty(
- const LinkedListInfo *list_info)
-{
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- return(list_info->elements == 0 ? MagickTrue : MagickFalse);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% L i n k e d L i s t T o A r r a y %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% LinkedListToArray() converts the linked-list to an array.
-%
-% The format of the LinkedListToArray method is:
-%
-% MagickBooleanType LinkedListToArray(LinkedListInfo *list_info,
-% void **array)
-%
-% A description of each parameter follows:
-%
-% o list_info: the linked-list info.
-%
-% o array: the array.
-%
-*/
-MagickExport MagickBooleanType LinkedListToArray(LinkedListInfo *list_info,
- void **array)
-{
- register ElementInfo
- *next;
-
- register ssize_t
- i;
-
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- if (array == (void **) NULL)
- return(MagickFalse);
- LockSemaphoreInfo(list_info->semaphore);
- next=list_info->head;
- for (i=0; next != (ElementInfo *) NULL; i++)
- {
- array[i]=next->value;
- next=next->next;
- }
- UnlockSemaphoreInfo(list_info->semaphore);
- return(MagickTrue);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% N e w H a s h m a p %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% NewHashmap() returns a pointer to a HashmapInfo structure initialized
-% to default values. The capacity is an initial estimate. The hashmap will
-% increase capacity dynamically as the demand requires.
-%
-% The format of the NewHashmap method is:
-%
-% HashmapInfo *NewHashmap(const size_t capacity,
-% size_t (*hash)(const void *),
-% MagickBooleanType (*compare)(const void *,const void *),
-% void *(*relinquish_key)(void *),void *(*relinquish_value)(void *))
-%
-% A description of each parameter follows:
-%
-% o capacity: the initial number entries in the hash-map: typically
-% SmallHashmapSize, MediumHashmapSize, or LargeHashmapSize. The
-% hashmap will dynamically increase its capacity on demand.
-%
-% o hash: the hash method, typically HashPointerType(), HashStringType(),
-% or HashStringInfoType().
-%
-% o compare: the compare method, typically NULL, CompareHashmapString(),
-% or CompareHashmapStringInfo().
-%
-% o relinquish_key: the key deallocation method, typically
-% RelinquishMagickMemory(), called whenever a key is removed from the
-% hash-map.
-%
-% o relinquish_value: the value deallocation method; typically
-% RelinquishMagickMemory(), called whenever a value object is removed from
-% the hash-map.
-%
-*/
-MagickExport HashmapInfo *NewHashmap(const size_t capacity,
- size_t (*hash)(const void *),
- MagickBooleanType (*compare)(const void *,const void *),
- void *(*relinquish_key)(void *),void *(*relinquish_value)(void *))
-{
- HashmapInfo
- *hashmap_info;
-
- hashmap_info=(HashmapInfo *) AcquireMagickMemory(sizeof(*hashmap_info));
- if (hashmap_info == (HashmapInfo *) NULL)
- ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
- (void) ResetMagickMemory(hashmap_info,0,sizeof(*hashmap_info));
- hashmap_info->hash=HashPointerType;
- if (hash != (size_t (*)(const void *)) NULL)
- hashmap_info->hash=hash;
- hashmap_info->compare=(MagickBooleanType (*)(const void *,const void *)) NULL;
- if (compare != (MagickBooleanType (*)(const void *,const void *)) NULL)
- hashmap_info->compare=compare;
- hashmap_info->relinquish_key=relinquish_key;
- hashmap_info->relinquish_value=relinquish_value;
- hashmap_info->entries=0;
- hashmap_info->capacity=capacity;
- hashmap_info->map=(LinkedListInfo **) NULL;
- if (~capacity >= 1UL)
- hashmap_info->map=(LinkedListInfo **) AcquireQuantumMemory((size_t)
- capacity+1UL,sizeof(*hashmap_info->map));
- if (hashmap_info->map == (LinkedListInfo **) NULL)
- ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
- (void) ResetMagickMemory(hashmap_info->map,0,(size_t) capacity*
- sizeof(*hashmap_info->map));
- hashmap_info->semaphore=AcquireSemaphoreInfo();
- hashmap_info->signature=MagickCoreSignature;
- return(hashmap_info);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% N e w L i n k e d L i s t I n f o %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% NewLinkedList() returns a pointer to a LinkedListInfo structure
-% initialized to default values.
-%
-% The format of the NewLinkedList method is:
-%
-% LinkedListInfo *NewLinkedList(const size_t capacity)
-%
-% A description of each parameter follows:
-%
-% o capacity: the maximum number of elements in the list.
-%
-*/
-MagickExport LinkedListInfo *NewLinkedList(const size_t capacity)
-{
- LinkedListInfo
- *list_info;
-
- list_info=(LinkedListInfo *) AcquireMagickMemory(sizeof(*list_info));
- if (list_info == (LinkedListInfo *) NULL)
- ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
- (void) ResetMagickMemory(list_info,0,sizeof(*list_info));
- list_info->capacity=capacity == 0 ? (size_t) (~0) : capacity;
- list_info->elements=0;
- list_info->head=(ElementInfo *) NULL;
- list_info->tail=(ElementInfo *) NULL;
- list_info->next=(ElementInfo *) NULL;
- list_info->semaphore=AcquireSemaphoreInfo();
- list_info->signature=MagickCoreSignature;
- return(list_info);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% P u t E n t r y I n H a s h m a p %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% PutEntryInHashmap() puts an entry in the hash-map. If the key already
-% exists in the map it is first removed.
-%
-% The format of the PutEntryInHashmap method is:
-%
-% MagickBooleanType PutEntryInHashmap(HashmapInfo *hashmap_info,
-% const void *key,const void *value)
-%
-% A description of each parameter follows:
-%
-% o hashmap_info: the hashmap info.
-%
-% o key: the key.
-%
-% o value: the value.
-%
-*/
-
-static MagickBooleanType IncreaseHashmapCapacity(HashmapInfo *hashmap_info)
-{
-#define MaxCapacities 20
-
- const size_t
- capacities[MaxCapacities] =
- {
- 17, 31, 61, 131, 257, 509, 1021, 2053, 4099, 8191, 16381, 32771,
- 65537, 131071, 262147, 524287, 1048573, 2097143, 4194301, 8388617
- };
-
- ElementInfo
- *element;
-
- EntryInfo
- *entry;
-
- LinkedListInfo
- *map_info,
- **map;
-
- register ElementInfo
- *next;
-
- register ssize_t
- i;
-
- size_t
- capacity;
-
- /*
- Increase to the next prime capacity.
- */
- for (i=0; i < MaxCapacities; i++)
- if (hashmap_info->capacity < capacities[i])
- break;
- if (i >= (MaxCapacities-1))
- return(MagickFalse);
- capacity=capacities[i+1];
- map=(LinkedListInfo **) AcquireQuantumMemory((size_t) capacity+1UL,
- sizeof(*map));
- if (map == (LinkedListInfo **) NULL)
- return(MagickFalse);
- (void) ResetMagickMemory(map,0,(size_t) capacity*sizeof(*map));
- /*
- Copy entries to new hashmap with increased capacity.
- */
- for (i=0; i < (ssize_t) hashmap_info->capacity; i++)
- {
- LinkedListInfo
- *list_info;
-
- list_info=hashmap_info->map[i];
- if (list_info == (LinkedListInfo *) NULL)
- continue;
- LockSemaphoreInfo(list_info->semaphore);
- for (next=list_info->head; next != (ElementInfo *) NULL; )
- {
- element=next;
- next=next->next;
- entry=(EntryInfo *) element->value;
- map_info=map[entry->hash % capacity];
- if (map_info == (LinkedListInfo *) NULL)
- {
- map_info=NewLinkedList(0);
- map[entry->hash % capacity]=map_info;
- }
- map_info->next=element;
- element->next=map_info->head;
- map_info->head=element;
- map_info->elements++;
- }
- list_info->signature=(~MagickCoreSignature);
- UnlockSemaphoreInfo(list_info->semaphore);
- RelinquishSemaphoreInfo(&list_info->semaphore);
- list_info=(LinkedListInfo *) RelinquishMagickMemory(list_info);
- }
- hashmap_info->map=(LinkedListInfo **) RelinquishMagickMemory(
- hashmap_info->map);
- hashmap_info->map=map;
- hashmap_info->capacity=capacity;
- return(MagickTrue);
-}
-
-MagickExport MagickBooleanType PutEntryInHashmap(HashmapInfo *hashmap_info,
- const void *key,const void *value)
-{
- EntryInfo
- *entry,
- *next;
-
- LinkedListInfo
- *list_info;
-
- register size_t
- i;
-
- assert(hashmap_info != (HashmapInfo *) NULL);
- assert(hashmap_info->signature == MagickCoreSignature);
- if ((key == (void *) NULL) || (value == (void *) NULL))
- return(MagickFalse);
- next=(EntryInfo *) AcquireMagickMemory(sizeof(*next));
- if (next == (EntryInfo *) NULL)
- return(MagickFalse);
- LockSemaphoreInfo(hashmap_info->semaphore);
- next->hash=hashmap_info->hash(key);
- next->key=(void *) key;
- next->value=(void *) value;
- list_info=hashmap_info->map[next->hash % hashmap_info->capacity];
- if (list_info == (LinkedListInfo *) NULL)
- {
- list_info=NewLinkedList(0);
- hashmap_info->map[next->hash % hashmap_info->capacity]=list_info;
- }
- else
- {
- list_info->next=list_info->head;
- entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
- for (i=0; entry != (EntryInfo *) NULL; i++)
- {
- if (entry->hash == next->hash)
- {
- MagickBooleanType
- compare;
-
- compare=MagickTrue;
- if (hashmap_info->compare !=
- (MagickBooleanType (*)(const void *,const void *)) NULL)
- compare=hashmap_info->compare(key,entry->key);
- if( IfMagickTrue(compare) )
- {
- (void) RemoveElementFromLinkedList(list_info,i);
- if (hashmap_info->relinquish_key != (void *(*)(void *)) NULL)
- entry->key=hashmap_info->relinquish_key(entry->key);
- if (hashmap_info->relinquish_value != (void *(*)(void *)) NULL)
- entry->value=hashmap_info->relinquish_value(entry->value);
- entry=(EntryInfo *) RelinquishMagickMemory(entry);
- break;
- }
- }
- entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
- }
- }
- if (IfMagickFalse(InsertValueInLinkedList(list_info,0,next)))
- {
- next=(EntryInfo *) RelinquishMagickMemory(next);
- UnlockSemaphoreInfo(hashmap_info->semaphore);
- return(MagickFalse);
- }
- if (list_info->elements >= (hashmap_info->capacity-1))
- if (IfMagickFalse(IncreaseHashmapCapacity(hashmap_info)))
- {
- UnlockSemaphoreInfo(hashmap_info->semaphore);
- return(MagickFalse);
- }
- hashmap_info->entries++;
- UnlockSemaphoreInfo(hashmap_info->semaphore);
- return(MagickTrue);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% R e m o v e E l e m e n t B y V a l u e F r o m L i n k e d L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% RemoveElementByValueFromLinkedList() removes an element from the linked-list
-% by value.
-%
-% The format of the RemoveElementByValueFromLinkedList method is:
-%
-% void *RemoveElementByValueFromLinkedList(LinkedListInfo *list_info,
-% const void *value)
-%
-% A description of each parameter follows:
-%
-% o list_info: the list info.
-%
-% o value: the value.
-%
-*/
-MagickExport void *RemoveElementByValueFromLinkedList(LinkedListInfo *list_info,
- const void *value)
-{
- ElementInfo
- *next;
-
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- if ((list_info->elements == 0) || (value == (const void *) NULL))
- return((void *) NULL);
- LockSemaphoreInfo(list_info->semaphore);
- if (value == list_info->head->value)
- {
- if (list_info->next == list_info->head)
- list_info->next=list_info->head->next;
- next=list_info->head;
- list_info->head=list_info->head->next;
- next=(ElementInfo *) RelinquishMagickMemory(next);
- }
- else
- {
- ElementInfo
- *element;
-
- next=list_info->head;
- while ((next->next != (ElementInfo *) NULL) &&
- (next->next->value != value))
- next=next->next;
- if (next->next == (ElementInfo *) NULL)
- {
- UnlockSemaphoreInfo(list_info->semaphore);
- return((void *) NULL);
- }
- element=next->next;
- next->next=element->next;
- if (element == list_info->tail)
- list_info->tail=next;
- if (list_info->next == element)
- list_info->next=element->next;
- element=(ElementInfo *) RelinquishMagickMemory(element);
- }
- list_info->elements--;
- UnlockSemaphoreInfo(list_info->semaphore);
- return((void *) value);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% R e m o v e E l e m e n t F r o m L i n k e d L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% RemoveElementFromLinkedList() removes an element from the linked-list at the
-% specified location.
-%
-% The format of the RemoveElementFromLinkedList method is:
-%
-% void *RemoveElementFromLinkedList(LinkedListInfo *list_info,
-% const size_t index)
-%
-% A description of each parameter follows:
-%
-% o list_info: the linked-list info.
-%
-% o index: the index.
-%
-*/
-MagickExport void *RemoveElementFromLinkedList(LinkedListInfo *list_info,
- const size_t index)
-{
- ElementInfo
- *next;
-
- register ssize_t
- i;
-
- void
- *value;
-
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- if (index >= list_info->elements)
- return((void *) NULL);
- LockSemaphoreInfo(list_info->semaphore);
- if (index == 0)
- {
- if (list_info->next == list_info->head)
- list_info->next=list_info->head->next;
- value=list_info->head->value;
- next=list_info->head;
- list_info->head=list_info->head->next;
- next=(ElementInfo *) RelinquishMagickMemory(next);
- }
- else
- {
- ElementInfo
- *element;
-
- next=list_info->head;
- for (i=1; i < (ssize_t) index; i++)
- next=next->next;
- element=next->next;
- next->next=element->next;
- if (element == list_info->tail)
- list_info->tail=next;
- if (list_info->next == element)
- list_info->next=element->next;
- value=element->value;
- element=(ElementInfo *) RelinquishMagickMemory(element);
- }
- list_info->elements--;
- UnlockSemaphoreInfo(list_info->semaphore);
- return(value);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% R e m o v e E n t r y F r o m H a s h m a p %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% RemoveEntryFromHashmap() removes an entry from the hash-map by its key.
-%
-% The format of the RemoveEntryFromHashmap method is:
-%
-% void *RemoveEntryFromHashmap(HashmapInfo *hashmap_info,void *key)
-%
-% A description of each parameter follows:
-%
-% o hashmap_info: the hashmap info.
-%
-% o key: the key.
-%
-*/
-MagickExport void *RemoveEntryFromHashmap(HashmapInfo *hashmap_info,
- const void *key)
-{
- EntryInfo
- *entry;
-
- LinkedListInfo
- *list_info;
-
- register size_t
- i;
-
- size_t
- hash;
-
- void
- *value;
-
- assert(hashmap_info != (HashmapInfo *) NULL);
- assert(hashmap_info->signature == MagickCoreSignature);
- if (key == (const void *) NULL)
- return((void *) NULL);
- LockSemaphoreInfo(hashmap_info->semaphore);
- hash=hashmap_info->hash(key);
- list_info=hashmap_info->map[hash % hashmap_info->capacity];
- if (list_info != (LinkedListInfo *) NULL)
- {
- list_info->next=list_info->head;
- entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
- for (i=0; entry != (EntryInfo *) NULL; i++)
- {
- if (entry->hash == hash)
- {
- MagickBooleanType
- compare;
-
- compare=MagickTrue;
- if (hashmap_info->compare !=
- (MagickBooleanType (*)(const void *,const void *)) NULL)
- compare=hashmap_info->compare(key,entry->key);
- if( IfMagickTrue(compare) )
- {
- entry=(EntryInfo *) RemoveElementFromLinkedList(list_info,i);
- if (entry == (EntryInfo *) NULL)
- {
- UnlockSemaphoreInfo(hashmap_info->semaphore);
- return((void *) NULL);
- }
- if (hashmap_info->relinquish_key != (void *(*)(void *)) NULL)
- entry->key=hashmap_info->relinquish_key(entry->key);
- value=entry->value;
- entry=(EntryInfo *) RelinquishMagickMemory(entry);
- hashmap_info->entries--;
- UnlockSemaphoreInfo(hashmap_info->semaphore);
- return(value);
- }
- }
- entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
- }
- }
- UnlockSemaphoreInfo(hashmap_info->semaphore);
- return((void *) NULL);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% R e m o v e L a s t E l e m e n t F r o m L i n k e d L i s t %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% RemoveLastElementFromLinkedList() removes the last element from the
-% linked-list.
-%
-% The format of the RemoveLastElementFromLinkedList method is:
-%
-% void *RemoveLastElementFromLinkedList(LinkedListInfo *list_info)
-%
-% A description of each parameter follows:
-%
-% o list_info: the linked-list info.
-%
-*/
-MagickExport void *RemoveLastElementFromLinkedList(LinkedListInfo *list_info)
-{
- void
- *value;
-
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- if (list_info->elements == 0)
- return((void *) NULL);
- LockSemaphoreInfo(list_info->semaphore);
- if (list_info->next == list_info->tail)
- list_info->next=(ElementInfo *) NULL;
- if (list_info->elements == 1UL)
- {
- value=list_info->head->value;
- list_info->head=(ElementInfo *) NULL;
- list_info->tail=(ElementInfo *) RelinquishMagickMemory(list_info->tail);
- }
- else
- {
- ElementInfo
- *next;
-
- value=list_info->tail->value;
- next=list_info->head;
- while (next->next != list_info->tail)
- next=next->next;
- list_info->tail=(ElementInfo *) RelinquishMagickMemory(list_info->tail);
- list_info->tail=next;
- next->next=(ElementInfo *) NULL;
- }
- list_info->elements--;
- UnlockSemaphoreInfo(list_info->semaphore);
- return(value);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% R e s e t H a s h m a p I t e r a t o r %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ResetHashmapIterator() resets the hash-map iterator. Use it in conjunction
-% with GetNextKeyInHashmap() to iterate over all the keys in the hash-map.
-%
-% The format of the ResetHashmapIterator method is:
-%
-% ResetHashmapIterator(HashmapInfo *hashmap_info)
-%
-% A description of each parameter follows:
-%
-% o hashmap_info: the hashmap info.
-%
-*/
-MagickExport void ResetHashmapIterator(HashmapInfo *hashmap_info)
-{
- assert(hashmap_info != (HashmapInfo *) NULL);
- assert(hashmap_info->signature == MagickCoreSignature);
- LockSemaphoreInfo(hashmap_info->semaphore);
- hashmap_info->next=0;
- hashmap_info->head_of_list=MagickFalse;
- UnlockSemaphoreInfo(hashmap_info->semaphore);
-}
-
-/*
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% %
-% %
-% %
-% R e s e t L i n k e d L i s t I t e r a t o r %
-% %
-% %
-% %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% ResetLinkedListIterator() resets the lined-list iterator. Use it in
-% conjunction with GetNextValueInLinkedList() to iterate over all the values
-% in the linked-list.
-%
-% The format of the ResetLinkedListIterator method is:
-%
-% ResetLinkedListIterator(LinkedListInfo *list_info)
-%
-% A description of each parameter follows:
-%
-% o list_info: the linked-list info.
-%
-*/
-MagickExport void ResetLinkedListIterator(LinkedListInfo *list_info)
-{
- assert(list_info != (LinkedListInfo *) NULL);
- assert(list_info->signature == MagickCoreSignature);
- LockSemaphoreInfo(list_info->semaphore);
- list_info->next=list_info->head;
- UnlockSemaphoreInfo(list_info->semaphore);
-}
+ return(CompareStringInfo(p,q) == 0 ? MagickTrue : MagickFalse);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% D e s t r o y H a s h m a p %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DestroyHashmap() frees the hash-map and all associated resources.
+%
+% The format of the DestroyHashmap method is:
+%
+% HashmapInfo *DestroyHashmap(HashmapInfo *hashmap_info)
+%
+% A description of each parameter follows:
+%
+% o hashmap_info: the hashmap info.
+%
+*/
+MagickExport HashmapInfo *DestroyHashmap(HashmapInfo *hashmap_info)
+{
+ LinkedListInfo
+ *list_info;
+
+ register EntryInfo
+ *entry;
+
+ register ssize_t
+ i;
+
+ assert(hashmap_info != (HashmapInfo *) NULL);
+ assert(hashmap_info->signature == MagickCoreSignature);
+ LockSemaphoreInfo(hashmap_info->semaphore);
+ for (i=0; i < (ssize_t) hashmap_info->capacity; i++)
+ {
+ list_info=hashmap_info->map[i];
+ if (list_info != (LinkedListInfo *) NULL)
+ {
+ list_info->next=list_info->head;
+ entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
+ while (entry != (EntryInfo *) NULL)
+ {
+ if (hashmap_info->relinquish_key != (void *(*)(void *)) NULL)
+ entry->key=hashmap_info->relinquish_key(entry->key);
+ if (hashmap_info->relinquish_value != (void *(*)(void *)) NULL)
+ entry->value=hashmap_info->relinquish_value(entry->value);
+ entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
+ }
+ }
+ if (list_info != (LinkedListInfo *) NULL)
+ list_info=DestroyLinkedList(list_info,RelinquishMagickMemory);
+ }
+ hashmap_info->map=(LinkedListInfo **) RelinquishMagickMemory(
+ hashmap_info->map);
+ hashmap_info->signature=(~MagickCoreSignature);
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+ RelinquishSemaphoreInfo(&hashmap_info->semaphore);
+ hashmap_info=(HashmapInfo *) RelinquishMagickMemory(hashmap_info);
+ return(hashmap_info);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% D e s t r o y L i n k e d L i s t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% DestroyLinkedList() frees the linked-list and all associated resources.
+%
+% The format of the DestroyLinkedList method is:
+%
+% LinkedListInfo *DestroyLinkedList(LinkedListInfo *list_info,
+% void *(*relinquish_value)(void *))
+%
+% A description of each parameter follows:
+%
+% o list_info: the linked-list info.
+%
+% o relinquish_value: the value deallocation method; typically
+% RelinquishMagickMemory().
+%
+*/
+MagickExport LinkedListInfo *DestroyLinkedList(LinkedListInfo *list_info,
+ void *(*relinquish_value)(void *))
+{
+ ElementInfo
+ *entry;
+
+ register ElementInfo
+ *next;
+
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ LockSemaphoreInfo(list_info->semaphore);
+ for (next=list_info->head; next != (ElementInfo *) NULL; )
+ {
+ if (relinquish_value != (void *(*)(void *)) NULL)
+ next->value=relinquish_value(next->value);
+ entry=next;
+ next=next->next;
+ entry=(ElementInfo *) RelinquishMagickMemory(entry);
+ }
+ list_info->signature=(~MagickCoreSignature);
+ UnlockSemaphoreInfo(list_info->semaphore);
+ RelinquishSemaphoreInfo(&list_info->semaphore);
+ list_info=(LinkedListInfo *) RelinquishMagickMemory(list_info);
+ return(list_info);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% G e t L a s t V a l u e I n L i n k e d L i s t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% GetLastValueInLinkedList() gets the last value in the linked-list.
+%
+% The format of the GetLastValueInLinkedList method is:
+%
+% void *GetLastValueInLinkedList(LinkedListInfo *list_info)
+%
+% A description of each parameter follows:
+%
+% o list_info: the linked_list info.
+%
+*/
+MagickExport void *GetLastValueInLinkedList(LinkedListInfo *list_info)
+{
+ void
+ *value;
+
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ if (list_info->elements == 0)
+ return((void *) NULL);
+ LockSemaphoreInfo(list_info->semaphore);
+ value=list_info->tail->value;
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return(value);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% G e t N e x t K e y I n H a s h m a p %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% GetNextKeyInHashmap() gets the next key in the hash-map.
+%
+% The format of the GetNextKeyInHashmap method is:
+%
+% void *GetNextKeyInHashmap(HashmapInfo *hashmap_info)
+%
+% A description of each parameter follows:
+%
+% o hashmap_info: the hashmap info.
+%
+*/
+MagickExport void *GetNextKeyInHashmap(HashmapInfo *hashmap_info)
+{
+ LinkedListInfo
+ *list_info;
+
+ register EntryInfo
+ *entry;
+
+ void
+ *key;
+
+ assert(hashmap_info != (HashmapInfo *) NULL);
+ assert(hashmap_info->signature == MagickCoreSignature);
+ LockSemaphoreInfo(hashmap_info->semaphore);
+ while (hashmap_info->next < hashmap_info->capacity)
+ {
+ list_info=hashmap_info->map[hashmap_info->next];
+ if (list_info != (LinkedListInfo *) NULL)
+ {
+ if (IfMagickFalse(hashmap_info->head_of_list))
+ {
+ list_info->next=list_info->head;
+ hashmap_info->head_of_list=MagickTrue;
+ }
+ entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
+ if (entry != (EntryInfo *) NULL)
+ {
+ key=entry->key;
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+ return(key);
+ }
+ hashmap_info->head_of_list=MagickFalse;
+ }
+ hashmap_info->next++;
+ }
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+ return((void *) NULL);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% G e t N e x t V a l u e I n H a s h m a p %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% GetNextValueInHashmap() gets the next value in the hash-map.
+%
+% The format of the GetNextValueInHashmap method is:
+%
+% void *GetNextValueInHashmap(HashmapInfo *hashmap_info)
+%
+% A description of each parameter follows:
+%
+% o hashmap_info: the hashmap info.
+%
+*/
+MagickExport void *GetNextValueInHashmap(HashmapInfo *hashmap_info)
+{
+ LinkedListInfo
+ *list_info;
+
+ register EntryInfo
+ *entry;
+
+ void
+ *value;
+
+ assert(hashmap_info != (HashmapInfo *) NULL);
+ assert(hashmap_info->signature == MagickCoreSignature);
+ LockSemaphoreInfo(hashmap_info->semaphore);
+ while (hashmap_info->next < hashmap_info->capacity)
+ {
+ list_info=hashmap_info->map[hashmap_info->next];
+ if (list_info != (LinkedListInfo *) NULL)
+ {
+ if (IfMagickFalse(hashmap_info->head_of_list))
+ {
+ list_info->next=list_info->head;
+ hashmap_info->head_of_list=MagickTrue;
+ }
+ entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
+ if (entry != (EntryInfo *) NULL)
+ {
+ value=entry->value;
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+ return(value);
+ }
+ hashmap_info->head_of_list=MagickFalse;
+ }
+ hashmap_info->next++;
+ }
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+ return((void *) NULL);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% G e t N e x t V a l u e I n L i n k e d L i s t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% GetNextValueInLinkedList() gets the next value in the linked-list.
+%
+% The format of the GetNextValueInLinkedList method is:
+%
+% void *GetNextValueInLinkedList(LinkedListInfo *list_info)
+%
+% A description of each parameter follows:
+%
+% o list_info: the linked-list info.
+%
+*/
+MagickExport void *GetNextValueInLinkedList(LinkedListInfo *list_info)
+{
+ void
+ *value;
+
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ LockSemaphoreInfo(list_info->semaphore);
+ if (list_info->next == (ElementInfo *) NULL)
+ {
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return((void *) NULL);
+ }
+ value=list_info->next->value;
+ list_info->next=list_info->next->next;
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return(value);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% G e t N u m b e r O f E n t r i e s I n H a s h m a p %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% GetNumberOfEntriesInHashmap() returns the number of entries in the hash-map.
+%
+% The format of the GetNumberOfEntriesInHashmap method is:
+%
+% size_t GetNumberOfEntriesInHashmap(const HashmapInfo *hashmap_info)
+%
+% A description of each parameter follows:
+%
+% o hashmap_info: the hashmap info.
+%
+*/
+MagickExport size_t GetNumberOfEntriesInHashmap(
+ const HashmapInfo *hashmap_info)
+{
+ assert(hashmap_info != (HashmapInfo *) NULL);
+ assert(hashmap_info->signature == MagickCoreSignature);
+ return(hashmap_info->entries);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% G e t N u m b e r O f E l e m e n t s I n L i n k e d L i s t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% GetNumberOfElementsInLinkedList() returns the number of entries in the
+% linked-list.
+%
+% The format of the GetNumberOfElementsInLinkedList method is:
+%
+% size_t GetNumberOfElementsInLinkedList(
+% const LinkedListInfo *list_info)
+%
+% A description of each parameter follows:
+%
+% o list_info: the linked-list info.
+%
+*/
+MagickExport size_t GetNumberOfElementsInLinkedList(
+ const LinkedListInfo *list_info)
+{
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ return(list_info->elements);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% G e t V a l u e F r o m H a s h m a p %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% GetValueFromHashmap() gets an entry from the hash-map by its key.
+%
+% The format of the GetValueFromHashmap method is:
+%
+% void *GetValueFromHashmap(HashmapInfo *hashmap_info,const void *key)
+%
+% A description of each parameter follows:
+%
+% o hashmap_info: the hashmap info.
+%
+% o key: the key.
+%
+*/
+MagickExport void *GetValueFromHashmap(HashmapInfo *hashmap_info,
+ const void *key)
+{
+ LinkedListInfo
+ *list_info;
+
+ register EntryInfo
+ *entry;
+
+ size_t
+ hash;
+
+ void
+ *value;
+
+ assert(hashmap_info != (HashmapInfo *) NULL);
+ assert(hashmap_info->signature == MagickCoreSignature);
+ if (key == (const void *) NULL)
+ return((void *) NULL);
+ LockSemaphoreInfo(hashmap_info->semaphore);
+ hash=hashmap_info->hash(key);
+ list_info=hashmap_info->map[hash % hashmap_info->capacity];
+ if (list_info != (LinkedListInfo *) NULL)
+ {
+ list_info->next=list_info->head;
+ entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
+ while (entry != (EntryInfo *) NULL)
+ {
+ if (entry->hash == hash)
+ {
+ MagickBooleanType
+ compare;
+
+ compare=MagickTrue;
+ if (hashmap_info->compare !=
+ (MagickBooleanType (*)(const void *,const void *)) NULL)
+ compare=hashmap_info->compare(key,entry->key);
+ if (compare != MagickFalse)
+ {
+ value=entry->value;
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+ return(value);
+ }
+ }
+ entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
+ }
+ }
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+ return((void *) NULL);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% G e t V a l u e F r o m L i n k e d L i s t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% GetValueFromLinkedList() gets a value from the linked-list at the specified
+% location.
+%
+% The format of the GetValueFromLinkedList method is:
+%
+% void *GetValueFromLinkedList(LinkedListInfo *list_info,
+% const size_t index)
+%
+% A description of each parameter follows:
+%
+% o list_info: the linked_list info.
+%
+% o index: the list index.
+%
+*/
+MagickExport void *GetValueFromLinkedList(LinkedListInfo *list_info,
+ const size_t index)
+{
+ register ElementInfo
+ *next;
+
+ register ssize_t
+ i;
+
+ void
+ *value;
+
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ if (index >= list_info->elements)
+ return((void *) NULL);
+ LockSemaphoreInfo(list_info->semaphore);
+ if (index == 0)
+ {
+ value=list_info->head->value;
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return(value);
+ }
+ if (index == (list_info->elements-1))
+ {
+ value=list_info->tail->value;
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return(value);
+ }
+ next=list_info->head;
+ for (i=0; i < (ssize_t) index; i++)
+ next=next->next;
+ value=next->value;
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return(value);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% H a s h P o i n t e r T y p e %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% HashPointerType() finds an entry in a hash-map based on the address of a
+% pointer.
+%
+% The format of the HashPointerType method is:
+%
+% size_t HashPointerType(const void *pointer)
+%
+% A description of each parameter follows:
+%
+% o pointer: compute the hash entry location from this pointer address.
+%
+*/
+MagickExport size_t HashPointerType(const void *pointer)
+{
+ size_t
+ hash;
+
+ hash=(size_t) pointer;
+ hash+=(~(hash << 9));
+ hash^=(hash >> 14);
+ hash+=(hash << 4);
+ hash^=(hash >> 10);
+ return(hash);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% H a s h S t r i n g T y p e %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% HashStringType() finds an entry in a hash-map based on the contents of a
+% string.
+%
+% The format of the HashStringType method is:
+%
+% size_t HashStringType(const void *string)
+%
+% A description of each parameter follows:
+%
+% o string: compute the hash entry location from this string.
+%
+*/
+MagickExport size_t HashStringType(const void *string)
+{
+ const unsigned char
+ *digest;
+
+ register ssize_t
+ i;
+
+ SignatureInfo
+ *signature_info;
+
+ size_t
+ hash;
+
+ StringInfo
+ *signature;
+
+ signature_info=AcquireSignatureInfo();
+ signature=StringToStringInfo((const char *) string);
+ UpdateSignature(signature_info,signature);
+ FinalizeSignature(signature_info);
+ digest=GetStringInfoDatum(GetSignatureDigest(signature_info));
+ hash=0;
+ for (i=0; i < 8; i++)
+ hash^=digest[i];
+ signature=DestroyStringInfo(signature);
+ signature_info=DestroySignatureInfo(signature_info);
+ return(hash);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% H a s h S t r i n g I n f o T y p e %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Specify the HashStringInfoType() method in NewHashmap() to find an entry
+% in a hash-map based on the contents of a string.
+%
+% The format of the HashStringInfoType method is:
+%
+% size_t HashStringInfoType(const void *string_info)
+%
+% A description of each parameter follows:
+%
+% o string_info: compute the hash entry location from this string.
+%
+*/
+MagickExport size_t HashStringInfoType(const void *string_info)
+{
+ const unsigned char
+ *digest;
+
+ register ssize_t
+ i;
+
+ SignatureInfo
+ *signature_info;
+
+ size_t
+ hash;
+
+ signature_info=AcquireSignatureInfo();
+ UpdateSignature(signature_info,(const StringInfo *) string_info);
+ FinalizeSignature(signature_info);
+ digest=GetStringInfoDatum(GetSignatureDigest(signature_info));
+ hash=0;
+ for (i=0; i < 8; i++)
+ hash^=digest[i];
+ signature_info=DestroySignatureInfo(signature_info);
+ return(hash);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% I n s e r t V a l u e I n L i n k e d L i s t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% InsertValueInLinkedList() inserts an element in the linked-list at the
+% specified location.
+%
+% The format of the InsertValueInLinkedList method is:
+%
+% MagickBooleanType InsertValueInLinkedList(ListInfo *list_info,
+% const size_t index,const void *value)
+%
+% A description of each parameter follows:
+%
+% o list_info: the hashmap info.
+%
+% o index: the index.
+%
+% o value: the value.
+%
+*/
+MagickExport MagickBooleanType InsertValueInLinkedList(
+ LinkedListInfo *list_info,const size_t index,const void *value)
+{
+ register ElementInfo
+ *next;
+
+ register ssize_t
+ i;
+
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ if (value == (const void *) NULL)
+ return(MagickFalse);
+ if ((index > list_info->elements) ||
+ (list_info->elements == list_info->capacity))
+ return(MagickFalse);
+ next=(ElementInfo *) AcquireMagickMemory(sizeof(*next));
+ if (next == (ElementInfo *) NULL)
+ return(MagickFalse);
+ next->value=(void *) value;
+ next->next=(ElementInfo *) NULL;
+ LockSemaphoreInfo(list_info->semaphore);
+ if (list_info->elements == 0)
+ {
+ if (list_info->next == (ElementInfo *) NULL)
+ list_info->next=next;
+ list_info->head=next;
+ list_info->tail=next;
+ }
+ else
+ {
+ if (index == 0)
+ {
+ if (list_info->next == list_info->head)
+ list_info->next=next;
+ next->next=list_info->head;
+ list_info->head=next;
+ }
+ else
+ if (index == list_info->elements)
+ {
+ if (list_info->next == (ElementInfo *) NULL)
+ list_info->next=next;
+ list_info->tail->next=next;
+ list_info->tail=next;
+ }
+ else
+ {
+ ElementInfo
+ *element;
+
+ element=list_info->head;
+ next->next=element->next;
+ for (i=1; i < (ssize_t) index; i++)
+ {
+ element=element->next;
+ next->next=element->next;
+ }
+ next=next->next;
+ element->next=next;
+ if (list_info->next == next->next)
+ list_info->next=next;
+ }
+ }
+ list_info->elements++;
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return(MagickTrue);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% I n s e r t V a l u e I n S o r t e d L i n k e d L i s t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% InsertValueInSortedLinkedList() inserts a value in the sorted linked-list.
+%
+% The format of the InsertValueInSortedLinkedList method is:
+%
+% MagickBooleanType InsertValueInSortedLinkedList(ListInfo *list_info,
+% int (*compare)(const void *,const void *),void **replace,
+% const void *value)
+%
+% A description of each parameter follows:
+%
+% o list_info: the hashmap info.
+%
+% o index: the index.
+%
+% o compare: the compare method.
+%
+% o replace: return previous element here.
+%
+% o value: the value.
+%
+*/
+MagickExport MagickBooleanType InsertValueInSortedLinkedList(
+ LinkedListInfo *list_info,int (*compare)(const void *,const void *),
+ void **replace,const void *value)
+{
+ ElementInfo
+ *element;
+
+ register ElementInfo
+ *next;
+
+ register ssize_t
+ i;
+
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ if ((compare == (int (*)(const void *,const void *)) NULL) ||
+ (value == (const void *) NULL))
+ return(MagickFalse);
+ if (list_info->elements == list_info->capacity)
+ return(MagickFalse);
+ next=(ElementInfo *) AcquireMagickMemory(sizeof(*next));
+ if (next == (ElementInfo *) NULL)
+ return(MagickFalse);
+ next->value=(void *) value;
+ element=(ElementInfo *) NULL;
+ LockSemaphoreInfo(list_info->semaphore);
+ next->next=list_info->head;
+ while (next->next != (ElementInfo *) NULL)
+ {
+ i=(ssize_t) compare(value,next->next->value);
+ if ((i < 0) || ((replace != (void **) NULL) && (i == 0)))
+ {
+ if (i == 0)
+ {
+ *replace=next->next->value;
+ next->next=next->next->next;
+ if (element != (ElementInfo *) NULL)
+ element->next=(ElementInfo *) RelinquishMagickMemory(
+ element->next);
+ list_info->elements--;
+ }
+ if (element != (ElementInfo *) NULL)
+ element->next=next;
+ else
+ list_info->head=next;
+ break;
+ }
+ element=next->next;
+ next->next=next->next->next;
+ }
+ if (next->next == (ElementInfo *) NULL)
+ {
+ if (element != (ElementInfo *) NULL)
+ element->next=next;
+ else
+ list_info->head=next;
+ list_info->tail=next;
+ }
+ list_info->elements++;
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return(MagickTrue);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% I s H a s h m a p E m p t y %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% IsHashmapEmpty() returns MagickTrue if the hash-map is empty.
+%
+% The format of the IsHashmapEmpty method is:
+%
+% MagickBooleanType IsHashmapEmpty(const HashmapInfo *hashmap_info)
+%
+% A description of each parameter follows:
+%
+% o hashmap_info: the hashmap info.
+%
+*/
+MagickExport MagickBooleanType IsHashmapEmpty(const HashmapInfo *hashmap_info)
+{
+ assert(hashmap_info != (HashmapInfo *) NULL);
+ assert(hashmap_info->signature == MagickCoreSignature);
+ return(hashmap_info->entries == 0 ? MagickTrue : MagickFalse);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% I s L i n k e d L i s t E m p t y %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% IsLinkedListEmpty() returns MagickTrue if the linked-list is empty.
+%
+% The format of the IsLinkedListEmpty method is:
+%
+% MagickBooleanType IsLinkedListEmpty(LinkedListInfo *list_info)
+%
+% A description of each parameter follows:
+%
+% o list_info: the linked-list info.
+%
+*/
+MagickExport MagickBooleanType IsLinkedListEmpty(
+ const LinkedListInfo *list_info)
+{
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ return(list_info->elements == 0 ? MagickTrue : MagickFalse);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% L i n k e d L i s t T o A r r a y %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% LinkedListToArray() converts the linked-list to an array.
+%
+% The format of the LinkedListToArray method is:
+%
+% MagickBooleanType LinkedListToArray(LinkedListInfo *list_info,
+% void **array)
+%
+% A description of each parameter follows:
+%
+% o list_info: the linked-list info.
+%
+% o array: the array.
+%
+*/
+MagickExport MagickBooleanType LinkedListToArray(LinkedListInfo *list_info,
+ void **array)
+{
+ register ElementInfo
+ *next;
+
+ register ssize_t
+ i;
+
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ if (array == (void **) NULL)
+ return(MagickFalse);
+ LockSemaphoreInfo(list_info->semaphore);
+ next=list_info->head;
+ for (i=0; next != (ElementInfo *) NULL; i++)
+ {
+ array[i]=next->value;
+ next=next->next;
+ }
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return(MagickTrue);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% N e w H a s h m a p %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NewHashmap() returns a pointer to a HashmapInfo structure initialized
+% to default values. The capacity is an initial estimate. The hashmap will
+% increase capacity dynamically as the demand requires.
+%
+% The format of the NewHashmap method is:
+%
+% HashmapInfo *NewHashmap(const size_t capacity,
+% size_t (*hash)(const void *),
+% MagickBooleanType (*compare)(const void *,const void *),
+% void *(*relinquish_key)(void *),void *(*relinquish_value)(void *))
+%
+% A description of each parameter follows:
+%
+% o capacity: the initial number entries in the hash-map: typically
+% SmallHashmapSize, MediumHashmapSize, or LargeHashmapSize. The
+% hashmap will dynamically increase its capacity on demand.
+%
+% o hash: the hash method, typically HashPointerType(), HashStringType(),
+% or HashStringInfoType().
+%
+% o compare: the compare method, typically NULL, CompareHashmapString(),
+% or CompareHashmapStringInfo().
+%
+% o relinquish_key: the key deallocation method, typically
+% RelinquishMagickMemory(), called whenever a key is removed from the
+% hash-map.
+%
+% o relinquish_value: the value deallocation method; typically
+% RelinquishMagickMemory(), called whenever a value object is removed from
+% the hash-map.
+%
+*/
+MagickExport HashmapInfo *NewHashmap(const size_t capacity,
+ size_t (*hash)(const void *),
+ MagickBooleanType (*compare)(const void *,const void *),
+ void *(*relinquish_key)(void *),void *(*relinquish_value)(void *))
+{
+ HashmapInfo
+ *hashmap_info;
+
+ hashmap_info=(HashmapInfo *) AcquireMagickMemory(sizeof(*hashmap_info));
+ if (hashmap_info == (HashmapInfo *) NULL)
+ ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
+ (void) ResetMagickMemory(hashmap_info,0,sizeof(*hashmap_info));
+ hashmap_info->hash=HashPointerType;
+ if (hash != (size_t (*)(const void *)) NULL)
+ hashmap_info->hash=hash;
+ hashmap_info->compare=(MagickBooleanType (*)(const void *,const void *)) NULL;
+ if (compare != (MagickBooleanType (*)(const void *,const void *)) NULL)
+ hashmap_info->compare=compare;
+ hashmap_info->relinquish_key=relinquish_key;
+ hashmap_info->relinquish_value=relinquish_value;
+ hashmap_info->entries=0;
+ hashmap_info->capacity=capacity;
+ hashmap_info->map=(LinkedListInfo **) NULL;
+ if (~capacity >= 1UL)
+ hashmap_info->map=(LinkedListInfo **) AcquireQuantumMemory((size_t)
+ capacity+1UL,sizeof(*hashmap_info->map));
+ if (hashmap_info->map == (LinkedListInfo **) NULL)
+ ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
+ (void) ResetMagickMemory(hashmap_info->map,0,(size_t) capacity*
+ sizeof(*hashmap_info->map));
+ hashmap_info->semaphore=AcquireSemaphoreInfo();
+ hashmap_info->signature=MagickCoreSignature;
+ return(hashmap_info);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% N e w L i n k e d L i s t I n f o %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% NewLinkedList() returns a pointer to a LinkedListInfo structure
+% initialized to default values.
+%
+% The format of the NewLinkedList method is:
+%
+% LinkedListInfo *NewLinkedList(const size_t capacity)
+%
+% A description of each parameter follows:
+%
+% o capacity: the maximum number of elements in the list.
+%
+*/
+MagickExport LinkedListInfo *NewLinkedList(const size_t capacity)
+{
+ LinkedListInfo
+ *list_info;
+
+ list_info=(LinkedListInfo *) AcquireMagickMemory(sizeof(*list_info));
+ if (list_info == (LinkedListInfo *) NULL)
+ ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
+ (void) ResetMagickMemory(list_info,0,sizeof(*list_info));
+ list_info->capacity=capacity == 0 ? (size_t) (~0) : capacity;
+ list_info->elements=0;
+ list_info->head=(ElementInfo *) NULL;
+ list_info->tail=(ElementInfo *) NULL;
+ list_info->next=(ElementInfo *) NULL;
+ list_info->semaphore=AcquireSemaphoreInfo();
+ list_info->signature=MagickCoreSignature;
+ return(list_info);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% P u t E n t r y I n H a s h m a p %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% PutEntryInHashmap() puts an entry in the hash-map. If the key already
+% exists in the map it is first removed.
+%
+% The format of the PutEntryInHashmap method is:
+%
+% MagickBooleanType PutEntryInHashmap(HashmapInfo *hashmap_info,
+% const void *key,const void *value)
+%
+% A description of each parameter follows:
+%
+% o hashmap_info: the hashmap info.
+%
+% o key: the key.
+%
+% o value: the value.
+%
+*/
+
+static MagickBooleanType IncreaseHashmapCapacity(HashmapInfo *hashmap_info)
+{
+#define MaxCapacities 20
+
+ const size_t
+ capacities[MaxCapacities] =
+ {
+ 17, 31, 61, 131, 257, 509, 1021, 2053, 4099, 8191, 16381, 32771,
+ 65537, 131071, 262147, 524287, 1048573, 2097143, 4194301, 8388617
+ };
+
+ ElementInfo
+ *element;
+
+ EntryInfo
+ *entry;
+
+ LinkedListInfo
+ *map_info,
+ **map;
+
+ register ElementInfo
+ *next;
+
+ register ssize_t
+ i;
+
+ size_t
+ capacity;
+
+ /*
+ Increase to the next prime capacity.
+ */
+ for (i=0; i < MaxCapacities; i++)
+ if (hashmap_info->capacity < capacities[i])
+ break;
+ if (i >= (MaxCapacities-1))
+ return(MagickFalse);
+ capacity=capacities[i+1];
+ map=(LinkedListInfo **) AcquireQuantumMemory((size_t) capacity+1UL,
+ sizeof(*map));
+ if (map == (LinkedListInfo **) NULL)
+ return(MagickFalse);
+ (void) ResetMagickMemory(map,0,(size_t) capacity*sizeof(*map));
+ /*
+ Copy entries to new hashmap with increased capacity.
+ */
+ for (i=0; i < (ssize_t) hashmap_info->capacity; i++)
+ {
+ LinkedListInfo
+ *list_info;
+
+ list_info=hashmap_info->map[i];
+ if (list_info == (LinkedListInfo *) NULL)
+ continue;
+ LockSemaphoreInfo(list_info->semaphore);
+ for (next=list_info->head; next != (ElementInfo *) NULL; )
+ {
+ element=next;
+ next=next->next;
+ entry=(EntryInfo *) element->value;
+ map_info=map[entry->hash % capacity];
+ if (map_info == (LinkedListInfo *) NULL)
+ {
+ map_info=NewLinkedList(0);
+ map[entry->hash % capacity]=map_info;
+ }
+ map_info->next=element;
+ element->next=map_info->head;
+ map_info->head=element;
+ map_info->elements++;
+ }
+ list_info->signature=(~MagickCoreSignature);
+ UnlockSemaphoreInfo(list_info->semaphore);
+ RelinquishSemaphoreInfo(&list_info->semaphore);
+ list_info=(LinkedListInfo *) RelinquishMagickMemory(list_info);
+ }
+ hashmap_info->map=(LinkedListInfo **) RelinquishMagickMemory(
+ hashmap_info->map);
+ hashmap_info->map=map;
+ hashmap_info->capacity=capacity;
+ return(MagickTrue);
+}
+
+MagickExport MagickBooleanType PutEntryInHashmap(HashmapInfo *hashmap_info,
+ const void *key,const void *value)
+{
+ EntryInfo
+ *entry,
+ *next;
+
+ LinkedListInfo
+ *list_info;
+
+ register size_t
+ i;
+
+ assert(hashmap_info != (HashmapInfo *) NULL);
+ assert(hashmap_info->signature == MagickCoreSignature);
+ if ((key == (void *) NULL) || (value == (void *) NULL))
+ return(MagickFalse);
+ next=(EntryInfo *) AcquireMagickMemory(sizeof(*next));
+ if (next == (EntryInfo *) NULL)
+ return(MagickFalse);
+ LockSemaphoreInfo(hashmap_info->semaphore);
+ next->hash=hashmap_info->hash(key);
+ next->key=(void *) key;
+ next->value=(void *) value;
+ list_info=hashmap_info->map[next->hash % hashmap_info->capacity];
+ if (list_info == (LinkedListInfo *) NULL)
+ {
+ list_info=NewLinkedList(0);
+ hashmap_info->map[next->hash % hashmap_info->capacity]=list_info;
+ }
+ else
+ {
+ list_info->next=list_info->head;
+ entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
+ for (i=0; entry != (EntryInfo *) NULL; i++)
+ {
+ if (entry->hash == next->hash)
+ {
+ MagickBooleanType
+ compare;
+
+ compare=MagickTrue;
+ if (hashmap_info->compare !=
+ (MagickBooleanType (*)(const void *,const void *)) NULL)
+ compare=hashmap_info->compare(key,entry->key);
+ if( compare != MagickFalse )
+ {
+ (void) RemoveElementFromLinkedList(list_info,i);
+ if (hashmap_info->relinquish_key != (void *(*)(void *)) NULL)
+ entry->key=hashmap_info->relinquish_key(entry->key);
+ if (hashmap_info->relinquish_value != (void *(*)(void *)) NULL)
+ entry->value=hashmap_info->relinquish_value(entry->value);
+ entry=(EntryInfo *) RelinquishMagickMemory(entry);
+ break;
+ }
+ }
+ entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
+ }
+ }
+ if (IfMagickFalse(InsertValueInLinkedList(list_info,0,next)))
+ {
+ next=(EntryInfo *) RelinquishMagickMemory(next);
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+ return(MagickFalse);
+ }
+ if (list_info->elements >= (hashmap_info->capacity-1))
+ if (IfMagickFalse(IncreaseHashmapCapacity(hashmap_info)))
+ {
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+ return(MagickFalse);
+ }
+ hashmap_info->entries++;
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+ return(MagickTrue);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% R e m o v e E l e m e n t B y V a l u e F r o m L i n k e d L i s t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% RemoveElementByValueFromLinkedList() removes an element from the linked-list
+% by value.
+%
+% The format of the RemoveElementByValueFromLinkedList method is:
+%
+% void *RemoveElementByValueFromLinkedList(LinkedListInfo *list_info,
+% const void *value)
+%
+% A description of each parameter follows:
+%
+% o list_info: the list info.
+%
+% o value: the value.
+%
+*/
+MagickExport void *RemoveElementByValueFromLinkedList(LinkedListInfo *list_info,
+ const void *value)
+{
+ ElementInfo
+ *next;
+
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ if ((list_info->elements == 0) || (value == (const void *) NULL))
+ return((void *) NULL);
+ LockSemaphoreInfo(list_info->semaphore);
+ if (value == list_info->head->value)
+ {
+ if (list_info->next == list_info->head)
+ list_info->next=list_info->head->next;
+ next=list_info->head;
+ list_info->head=list_info->head->next;
+ next=(ElementInfo *) RelinquishMagickMemory(next);
+ }
+ else
+ {
+ ElementInfo
+ *element;
+
+ next=list_info->head;
+ while ((next->next != (ElementInfo *) NULL) &&
+ (next->next->value != value))
+ next=next->next;
+ if (next->next == (ElementInfo *) NULL)
+ {
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return((void *) NULL);
+ }
+ element=next->next;
+ next->next=element->next;
+ if (element == list_info->tail)
+ list_info->tail=next;
+ if (list_info->next == element)
+ list_info->next=element->next;
+ element=(ElementInfo *) RelinquishMagickMemory(element);
+ }
+ list_info->elements--;
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return((void *) value);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% R e m o v e E l e m e n t F r o m L i n k e d L i s t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% RemoveElementFromLinkedList() removes an element from the linked-list at the
+% specified location.
+%
+% The format of the RemoveElementFromLinkedList method is:
+%
+% void *RemoveElementFromLinkedList(LinkedListInfo *list_info,
+% const size_t index)
+%
+% A description of each parameter follows:
+%
+% o list_info: the linked-list info.
+%
+% o index: the index.
+%
+*/
+MagickExport void *RemoveElementFromLinkedList(LinkedListInfo *list_info,
+ const size_t index)
+{
+ ElementInfo
+ *next;
+
+ register ssize_t
+ i;
+
+ void
+ *value;
+
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ if (index >= list_info->elements)
+ return((void *) NULL);
+ LockSemaphoreInfo(list_info->semaphore);
+ if (index == 0)
+ {
+ if (list_info->next == list_info->head)
+ list_info->next=list_info->head->next;
+ value=list_info->head->value;
+ next=list_info->head;
+ list_info->head=list_info->head->next;
+ next=(ElementInfo *) RelinquishMagickMemory(next);
+ }
+ else
+ {
+ ElementInfo
+ *element;
+
+ next=list_info->head;
+ for (i=1; i < (ssize_t) index; i++)
+ next=next->next;
+ element=next->next;
+ next->next=element->next;
+ if (element == list_info->tail)
+ list_info->tail=next;
+ if (list_info->next == element)
+ list_info->next=element->next;
+ value=element->value;
+ element=(ElementInfo *) RelinquishMagickMemory(element);
+ }
+ list_info->elements--;
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return(value);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% R e m o v e E n t r y F r o m H a s h m a p %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% RemoveEntryFromHashmap() removes an entry from the hash-map by its key.
+%
+% The format of the RemoveEntryFromHashmap method is:
+%
+% void *RemoveEntryFromHashmap(HashmapInfo *hashmap_info,void *key)
+%
+% A description of each parameter follows:
+%
+% o hashmap_info: the hashmap info.
+%
+% o key: the key.
+%
+*/
+MagickExport void *RemoveEntryFromHashmap(HashmapInfo *hashmap_info,
+ const void *key)
+{
+ EntryInfo
+ *entry;
+
+ LinkedListInfo
+ *list_info;
+
+ register size_t
+ i;
+
+ size_t
+ hash;
+
+ void
+ *value;
+
+ assert(hashmap_info != (HashmapInfo *) NULL);
+ assert(hashmap_info->signature == MagickCoreSignature);
+ if (key == (const void *) NULL)
+ return((void *) NULL);
+ LockSemaphoreInfo(hashmap_info->semaphore);
+ hash=hashmap_info->hash(key);
+ list_info=hashmap_info->map[hash % hashmap_info->capacity];
+ if (list_info != (LinkedListInfo *) NULL)
+ {
+ list_info->next=list_info->head;
+ entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
+ for (i=0; entry != (EntryInfo *) NULL; i++)
+ {
+ if (entry->hash == hash)
+ {
+ MagickBooleanType
+ compare;
+
+ compare=MagickTrue;
+ if (hashmap_info->compare !=
+ (MagickBooleanType (*)(const void *,const void *)) NULL)
+ compare=hashmap_info->compare(key,entry->key);
+ if (compare != MagickFalse)
+ {
+ entry=(EntryInfo *) RemoveElementFromLinkedList(list_info,i);
+ if (entry == (EntryInfo *) NULL)
+ {
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+ return((void *) NULL);
+ }
+ if (hashmap_info->relinquish_key != (void *(*)(void *)) NULL)
+ entry->key=hashmap_info->relinquish_key(entry->key);
+ value=entry->value;
+ entry=(EntryInfo *) RelinquishMagickMemory(entry);
+ hashmap_info->entries--;
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+ return(value);
+ }
+ }
+ entry=(EntryInfo *) GetNextValueInLinkedList(list_info);
+ }
+ }
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+ return((void *) NULL);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% R e m o v e L a s t E l e m e n t F r o m L i n k e d L i s t %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% RemoveLastElementFromLinkedList() removes the last element from the
+% linked-list.
+%
+% The format of the RemoveLastElementFromLinkedList method is:
+%
+% void *RemoveLastElementFromLinkedList(LinkedListInfo *list_info)
+%
+% A description of each parameter follows:
+%
+% o list_info: the linked-list info.
+%
+*/
+MagickExport void *RemoveLastElementFromLinkedList(LinkedListInfo *list_info)
+{
+ void
+ *value;
+
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ if (list_info->elements == 0)
+ return((void *) NULL);
+ LockSemaphoreInfo(list_info->semaphore);
+ if (list_info->next == list_info->tail)
+ list_info->next=(ElementInfo *) NULL;
+ if (list_info->elements == 1UL)
+ {
+ value=list_info->head->value;
+ list_info->head=(ElementInfo *) NULL;
+ list_info->tail=(ElementInfo *) RelinquishMagickMemory(list_info->tail);
+ }
+ else
+ {
+ ElementInfo
+ *next;
+
+ value=list_info->tail->value;
+ next=list_info->head;
+ while (next->next != list_info->tail)
+ next=next->next;
+ list_info->tail=(ElementInfo *) RelinquishMagickMemory(list_info->tail);
+ list_info->tail=next;
+ next->next=(ElementInfo *) NULL;
+ }
+ list_info->elements--;
+ UnlockSemaphoreInfo(list_info->semaphore);
+ return(value);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% R e s e t H a s h m a p I t e r a t o r %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ResetHashmapIterator() resets the hash-map iterator. Use it in conjunction
+% with GetNextKeyInHashmap() to iterate over all the keys in the hash-map.
+%
+% The format of the ResetHashmapIterator method is:
+%
+% ResetHashmapIterator(HashmapInfo *hashmap_info)
+%
+% A description of each parameter follows:
+%
+% o hashmap_info: the hashmap info.
+%
+*/
+MagickExport void ResetHashmapIterator(HashmapInfo *hashmap_info)
+{
+ assert(hashmap_info != (HashmapInfo *) NULL);
+ assert(hashmap_info->signature == MagickCoreSignature);
+ LockSemaphoreInfo(hashmap_info->semaphore);
+ hashmap_info->next=0;
+ hashmap_info->head_of_list=MagickFalse;
+ UnlockSemaphoreInfo(hashmap_info->semaphore);
+}
+
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% R e s e t L i n k e d L i s t I t e r a t o r %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% ResetLinkedListIterator() resets the lined-list iterator. Use it in
+% conjunction with GetNextValueInLinkedList() to iterate over all the values
+% in the linked-list.
+%
+% The format of the ResetLinkedListIterator method is:
+%
+% ResetLinkedListIterator(LinkedListInfo *list_info)
+%
+% A description of each parameter follows:
+%
+% o list_info: the linked-list info.
+%
+*/
+MagickExport void ResetLinkedListIterator(LinkedListInfo *list_info)
+{
+ assert(list_info != (LinkedListInfo *) NULL);
+ assert(list_info->signature == MagickCoreSignature);
+ LockSemaphoreInfo(list_info->semaphore);
+ list_info->next=list_info->head;
+ UnlockSemaphoreInfo(list_info->semaphore);
+}
diff --git a/MagickCore/identify.c b/MagickCore/identify.c
index 96858de..1e08272 100644
--- a/MagickCore/identify.c
+++ b/MagickCore/identify.c
@@ -974,7 +974,7 @@
else
{
artifact=GetImageArtifact(image,"identify:unique-colors");
- if (IfMagickTrue(IsStringTrue(artifact)))
+ if (IsStringTrue(artifact != MagickFalse))
(void) FormatLocaleFile(file," Colors: %.20g\n",(double)
GetNumberColors(image,(FILE *) NULL,exception));
}
diff --git a/MagickCore/magick-type.h b/MagickCore/magick-type.h
index b25dbe3..f7d8990 100644
--- a/MagickCore/magick-type.h
+++ b/MagickCore/magick-type.h
@@ -160,11 +160,9 @@
*/
#if 1
/* Fast C typing method assumes MagickBooleanType match 0,1 values */
-# define IfMagickTrue(v) ((int)(v))
# define IfMagickFalse(v) (!(int)(v))
#else
/* Do not depend MagickBooleanType's values */
-# define IfMagickTrue(v) ((v) != MagickFalse)
# define IfMagickFalse(v) ((v) == MagickFalse)
#endif
diff --git a/MagickCore/morphology.c b/MagickCore/morphology.c
index e5b90f7..53923b6 100644
--- a/MagickCore/morphology.c
+++ b/MagickCore/morphology.c
@@ -3732,7 +3732,7 @@
changed=MorphologyPrimitiveDirect(rslt_image,method,kernel,exception);
- if ( IfMagickTrue(verbose) )
+ if (verbose != MagickFalse)
(void) (void) FormatLocaleFile(stderr,
"%s:%.20g.%.20g #%.20g => Changed %.20g\n",
CommandOptionToMnemonic(MagickMorphologyOptions, method),
@@ -3880,7 +3880,7 @@
assert( this_kernel != (KernelInfo *) NULL );
/* Extra information for debugging compound operations */
- if ( IfMagickTrue(verbose) ) {
+ if (verbose != MagickFalse) {
if ( stage_limit > 1 )
(void) FormatLocaleString(v_info,MagickPathExtent,"%s:%.20g.%.20g -> ",
CommandOptionToMnemonic(MagickMorphologyOptions,method),(double)
@@ -3914,7 +3914,7 @@
count++;
changed = MorphologyPrimitive(curr_image, work_image, primitive,
this_kernel, bias, exception);
- if ( IfMagickTrue(verbose) ) {
+ if (verbose != MagickFalse) {
if ( kernel_loop > 1 )
(void) FormatLocaleFile(stderr, "\n"); /* add end-of-line from previous */
(void) (void) FormatLocaleFile(stderr,
@@ -3939,9 +3939,9 @@
} /* End Loop 4: Iterate the kernel with primitive */
- if ( IfMagickTrue(verbose) && kernel_changed != (size_t)changed )
+ if (verbose != MagickFalse && kernel_changed != (size_t)changed)
(void) FormatLocaleFile(stderr, " Total %.20g",(double) kernel_changed);
- if ( IfMagickTrue(verbose) && stage_loop < stage_limit )
+ if (verbose != MagickFalse && stage_loop < stage_limit)
(void) FormatLocaleFile(stderr, "\n"); /* add end-of-line before looping */
#if 0
@@ -3966,7 +3966,7 @@
case EdgeInMorphology:
case TopHatMorphology:
case BottomHatMorphology:
- if ( IfMagickTrue(verbose) )
+ if (verbose != MagickFalse)
(void) FormatLocaleFile(stderr,
"\n%s: Difference with original image",CommandOptionToMnemonic(
MagickMorphologyOptions, method) );
@@ -3974,7 +3974,7 @@
MagickTrue,0,0,exception);
break;
case EdgeMorphology:
- if ( IfMagickTrue(verbose) )
+ if (verbose != MagickFalse)
(void) FormatLocaleFile(stderr,
"\n%s: Difference of Dilate and Erode",CommandOptionToMnemonic(
MagickMorphologyOptions, method) );
@@ -3990,7 +3990,7 @@
if ( kernel->next == (KernelInfo *) NULL )
rslt_image = curr_image; /* just return the resulting image */
else if ( rslt_compose == NoCompositeOp )
- { if ( IfMagickTrue(verbose) ) {
+ { if (verbose != MagickFalse) {
if ( this_kernel->next != (KernelInfo *) NULL )
(void) FormatLocaleFile(stderr, " (re-iterate)");
else
@@ -3999,7 +3999,7 @@
rslt_image = curr_image; /* return result, and re-iterate */
}
else if ( rslt_image == (Image *) NULL)
- { if ( IfMagickTrue(verbose) )
+ { if (verbose != MagickFalse)
(void) FormatLocaleFile(stderr, " (save for compose)");
rslt_image = curr_image;
curr_image = (Image *) image; /* continue with original image */
@@ -4012,7 +4012,7 @@
** purely mathematical way, and only to the selected channels.
** IE: Turn off SVG composition 'alpha blending'.
*/
- if ( IfMagickTrue(verbose) )
+ if (verbose != MagickFalse)
(void) FormatLocaleFile(stderr, " (compose \"%s\")",
CommandOptionToMnemonic(MagickComposeOptions, rslt_compose) );
(void) CompositeImage(rslt_image,curr_image,rslt_compose,MagickTrue,
@@ -4020,7 +4020,7 @@
curr_image = DestroyImage(curr_image);
curr_image = (Image *) image; /* continue with original image */
}
- if ( IfMagickTrue(verbose) )
+ if (verbose != MagickFalse)
(void) FormatLocaleFile(stderr, "\n");
/* loop to the next kernel in a multi-kernel list */
diff --git a/MagickCore/property.c b/MagickCore/property.c
index 343e260..a13bf5c 100644
--- a/MagickCore/property.c
+++ b/MagickCore/property.c
@@ -139,7 +139,7 @@
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
assert(clone_image != (const Image *) NULL);
assert(clone_image->signature == MagickCoreSignature);
- if( IfMagickTrue(clone_image->debug) )
+ if (clone_image->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
clone_image->filename);
(void) CopyMagickString(image->filename,clone_image->filename,MagickPathExtent);
@@ -2084,7 +2084,7 @@
assert(image != (Image *) NULL);
assert(image->signature == MagickCoreSignature);
- if (IfMagickTrue(image->debug))
+ if (image->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
p=(const char *) NULL;
if (image->properties != (void *) NULL)
@@ -2275,9 +2275,9 @@
const char
*string; /* return a string already stored somewher */
- if (image != (Image *) NULL && IfMagickTrue(image->debug))
+ if (image != (Image *) NULL && image->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- else if( image_info != (ImageInfo *) NULL && IfMagickTrue(image_info->debug))
+ else if( image_info != (ImageInfo *) NULL && image_info->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s","no-images");
*value='\0'; /* formatted string */
@@ -2401,7 +2401,7 @@
WarnNoImageReturn("\"%%%c\"",letter);
colorspace=image->colorspace;
- if (IfMagickTrue(SetImageGray(image,exception)))
+ if (SetImageGray(image,exception != MagickFalse))
colorspace=GRAYColorspace; /* FUTURE: this is IMv6 not IMv7 */
(void) FormatLocaleString(value,MagickPathExtent,"%s %s %s",
CommandOptionToMnemonic(MagickClassOptions,(ssize_t) image->storage_class),
@@ -2647,9 +2647,9 @@
if (property[1] == '\0') /* single letter property request */
return(GetMagickPropertyLetter(image_info,image,*property,exception));
- if (image != (Image *) NULL && IfMagickTrue(image->debug))
+ if (image != (Image *) NULL && image->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- else if( image_info != (ImageInfo *) NULL && IfMagickTrue(image_info->debug))
+ else if( image_info != (ImageInfo *) NULL && image_info->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s","no-images");
*value='\0'; /* formated string */
@@ -3236,9 +3236,9 @@
assert(image == NULL || image->signature == MagickCoreSignature);
assert(image_info == NULL || image_info->signature == MagickCoreSignature);
- if (image != (Image *) NULL && IfMagickTrue(image->debug))
+ if (image != (Image *) NULL && image->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",image->filename);
- else if( image_info != (ImageInfo *) NULL && IfMagickTrue(image_info->debug))
+ else if( image_info != (ImageInfo *) NULL && image_info->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s","no-image");
if (embed_text == (const char *) NULL)
diff --git a/MagickCore/resize.c b/MagickCore/resize.c
index f46cee8..ccfe0cc 100644
--- a/MagickCore/resize.c
+++ b/MagickCore/resize.c
@@ -880,7 +880,7 @@
window_type=mapping[filter].window;
resize_filter->blur=1.0;
/* Promote 1D Windowed Sinc Filters to a 2D Windowed Jinc filters */
- if ( IfMagickTrue(cylindrical) && (filter_type == SincFastFilter) &&
+ if ( cylindrical != MagickFalse && (filter_type == SincFastFilter) &&
(filter != SincFastFilter))
filter_type=JincFilter; /* 1D Windowed Sinc => 2D Windowed Jinc filters */
@@ -918,7 +918,7 @@
option=ParseCommandOption(MagickFilterOptions,MagickFalse,artifact);
if ((UndefinedFilter < option) && (option < SentinelFilter))
{
- filter_type= IfMagickTrue(cylindrical) ? JincFilter
+ filter_type= cylindrical != MagickFalse ? JincFilter
: SincFastFilter;
window_type=(FilterTypes) option;
}
@@ -3677,7 +3677,7 @@
image->magick_filename);
(void) SetImageProperty(thumbnail_image,"Thumb::URI",value,exception);
(void) CopyMagickString(value,image->magick_filename,MagickPathExtent);
- if ( IfMagickTrue(GetPathAttributes(image->filename,&attributes)) )
+ if ( GetPathAttributes(image->filename,&attributes) != MagickFalse )
{
(void) FormatLocaleString(value,MagickPathExtent,"%.20g",(double)
attributes.st_mtime);