% MagickCore Image List Methods %
% %
% Software Design %
-% John Cristy %
+% Cristy %
% December 2002 %
% %
% %
-% Copyright 1999-2012 ImageMagick Studio LLC, a non-profit organization %
+% Copyright 1999-2015 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 %
assert(images != (Image **) NULL);
if (append == (Image *) NULL)
return;
- assert(append->signature == MagickSignature);
+ assert(append->signature == MagickCoreSignature);
if (append->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",append->filename);
if ((*images) == (Image *) NULL)
*images=(Image *) append;
return;
}
- assert((*images)->signature == MagickSignature);
+ assert((*images)->signature == MagickCoreSignature);
p=GetLastImageInList(*images);
q=GetFirstImageInList(append);
p->next=q;
if (images == (Image *) NULL)
return((Image *) NULL);
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
while (images->previous != (Image *) NULL)
images=images->previous;
image=(Image *) NULL;
length;
assert(images != (const Image *) NULL);
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
assert(scenes != (char *) NULL);
if (images->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",images->filename);
assert(exception != (ExceptionInfo *) NULL);
- assert(exception->signature == MagickSignature);
+ assert(exception->signature == MagickCoreSignature);
clone_images=NewImageList();
images=GetFirstImageInList(images);
length=GetImageListLength(images);
length;
assert(images != (Image **) NULL);
- assert((*images)->signature == MagickSignature);
+ assert((*images)->signature == MagickCoreSignature);
assert(scenes != (char *) NULL);
if ((*images)->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
(*images)->filename);
assert(exception != (ExceptionInfo *) NULL);
- assert(exception->signature == MagickSignature);
+ assert(exception->signature == MagickCoreSignature);
*images=GetFirstImageInList(*images);
length=GetImageListLength(*images);
delete_list=(MagickBooleanType *) AcquireQuantumMemory(length,
*/
for (p=(char *) scenes; *p != '\0';)
{
- while ((isspace((int) *p) != 0) || (*p == ','))
+ while ((isspace((int) ((unsigned char) *p)) != 0) || (*p == ','))
p++;
first=strtol(p,&p,10);
if (first < 0)
{
if (images == (Image *) NULL)
return((Image *) NULL);
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
if (images->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",images->filename);
while (images != (Image *) NULL)
Duplicate images.
*/
assert(images != (Image *) NULL);
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
assert(scenes != (char *) NULL);
if (images->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",images->filename);
assert(exception != (ExceptionInfo *) NULL);
- assert(exception->signature == MagickSignature);
+ assert(exception->signature == MagickCoreSignature);
duplicate_images=NewImageList();
for (i=0; i < (ssize_t) number_duplicates; i++)
{
if (images == (Image *) NULL)
return((Image *) NULL);
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
for (p=images; p->previous != (Image *) NULL; p=p->previous) ;
return((Image *) p);
}
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% GetImageFromList() returns an image at the specified offset from the list.
+% GetImageFromList() returns an image at the specified index from the image
+% list. Starting with 0 as the first image in the list.
+%
+% A negative offset will return the image from the end of the list, such that
+% an index of -1 is the last image.
+%
+% If no such image exists at the specified offset a NULL image pointer is
+% returned. This will only happen if index is less that the negative of
+% the list length, or larger than list length -1. EG: ( -N to N-1 )
%
% The format of the GetImageFromList method is:
%
register ssize_t
i;
- size_t
- length;
-
- ssize_t
- offset;
-
if (images == (Image *) NULL)
return((Image *) NULL);
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
if (images->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",images->filename);
- for (p=images; p->previous != (Image *) NULL; p=p->previous) ;
- length=GetImageListLength(images);
- for (offset=index; offset < 0; offset+=(ssize_t) length) ;
- for (i=0; p != (Image *) NULL; p=p->next)
- if (i++ == (ssize_t) (offset % length))
- break;
- if (p == (Image *) NULL)
- return((Image *) NULL);
+
+ /*
+ Designed to efficiently find first image (index == 0), or last image
+ (index == -1) as appropriate, without to go through the whole image list.
+ That is it tries to avoid 'counting the whole list' to handle the
+ most common image indexes.
+ */
+ if ( index < 0 )
+ {
+ p=GetLastImageInList(images);
+ for (i=-1; p != (Image *) NULL; p=p->previous)
+ if (i-- == index)
+ break;
+ }
+ else
+ {
+ p=GetFirstImageInList(images);
+ for (i=0; p != (Image *) NULL; p=p->next)
+ if (i++ == index)
+ break;
+ }
return((Image *) p);
}
\f
if (images == (const Image *) NULL)
return(-1);
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
for (i=0; images->previous != (Image *) NULL; i++)
images=images->previous;
return(i);
if (images == (Image *) NULL)
return(0);
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
if (images->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",images->filename);
- while (images->next != (Image *) NULL)
- images=images->next;
+ images=GetLastImageInList(images);
for (i=0; images != (Image *) NULL; images=images->previous)
i++;
return((size_t) i);
if (images == (Image *) NULL)
return((Image *) NULL);
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
for (p=images; p->next != (Image *) NULL; p=p->next) ;
return((Image *) p);
}
{
if (images == (Image *) NULL)
return((Image *) NULL);
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
if (images->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",images->filename);
return(images->next);
{
if (images == (Image *) NULL)
return((Image *) NULL);
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
return(images->previous);
}
\f
if (images == (Image *) NULL)
return((Image **) NULL);
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
if (images->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",images->filename);
group=(Image **) AcquireQuantumMemory((size_t) GetImageListLength(images)+1UL,
assert(images != (Image **) NULL);
assert(insert != (Image *) NULL);
- assert(insert->signature == MagickSignature);
+ assert(insert->signature == MagickCoreSignature);
if (insert->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",insert->filename);
if ((*images) == (Image *) NULL)
return;
- assert((*images)->signature == MagickSignature);
+ assert((*images)->signature == MagickCoreSignature);
split=SplitImageList(*images);
AppendImageToList(images,insert);
AppendImageToList(images,split);
% o image: the image.
%
*/
-MagickExport void PrependImageToList(Image **images,Image *image)
+MagickExport void PrependImageToList(Image **images,Image *prepend)
{
- /* prepend, append the two lists with order swapped! */
- AppendImageToList(&image,*images);
+ if (*images == (Image *) NULL)
+ {
+ *images=prepend;
+ return;
+ }
+ AppendImageToList(&prepend,*images);
}
\f
/*
assert(images != (Image **) NULL);
if ((*images) == (Image *) NULL)
return((Image *) NULL);
- assert((*images)->signature == MagickSignature);
+ assert((*images)->signature == MagickCoreSignature);
if ((*images)->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
(*images)->filename);
assert(images != (Image **) NULL);
if ((*images) == (Image *) NULL)
return((Image *) NULL);
- assert((*images)->signature == MagickSignature);
+ assert((*images)->signature == MagickCoreSignature);
if ((*images)->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
(*images)->filename);
assert(images != (Image **) NULL);
if ((*images) == (Image *) NULL)
return((Image *) NULL);
- assert((*images)->signature == MagickSignature);
+ assert((*images)->signature == MagickCoreSignature);
if ((*images)->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
(*images)->filename);
{
assert(images != (Image **) NULL);
assert(replace != (Image *) NULL);
- assert(replace->signature == MagickSignature);
+ assert(replace->signature == MagickCoreSignature);
if (replace->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",replace->filename);
if ((*images) == (Image *) NULL)
return;
- assert((*images)->signature == MagickSignature);
+ assert((*images)->signature == MagickCoreSignature);
/* link next pointer */
replace=GetLastImageInList(replace);
{
assert(images != (Image **) NULL);
assert(replace != (Image *) NULL);
- assert(replace->signature == MagickSignature);
+ assert(replace->signature == MagickCoreSignature);
if (replace->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",replace->filename);
if ((*images) == (Image *) NULL)
return;
- assert((*images)->signature == MagickSignature);
+ assert((*images)->signature == MagickCoreSignature);
/* link previous pointer */
replace=GetFirstImageInList(replace);
assert(images != (Image **) NULL);
if ((*images) == (Image *) NULL)
return;
- assert((*images)->signature == MagickSignature);
+ assert((*images)->signature == MagickCoreSignature);
if ((*images)->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
(*images)->filename);
assert(images != (Image **) NULL);
assert(splice != (Image *) NULL);
- assert(splice->signature == MagickSignature);
+ assert(splice->signature == MagickCoreSignature);
if ((*images) == (Image *) NULL)
return((Image *) NULL);
- assert((*images)->signature == MagickSignature);
+ assert((*images)->signature == MagickCoreSignature);
if ((*images)->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"%s",
(*images)->filename);
if (images == (Image *) NULL)
return;
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
for (p=images; p != (Image *) NULL; p=p->next)
{
for (q=p->next; q != (Image *) NULL; q=q->next)
{
if (images == (Image *) NULL)
return((Image *) NULL);
- assert(images->signature == MagickSignature);
+ assert(images->signature == MagickCoreSignature);
if (images->next == (Image *) NULL)
return((Image *) NULL);
if (images->blob != images->next->blob)