*key,
*next;
- unsigned long
+ size_t
nodes;
MagickBooleanType
SemaphoreInfo
*semaphore;
- unsigned long
+ size_t
signature;
};
\f
register NodeInfo
*node;
- (void) LockSemaphoreInfo(splay_tree->semaphore);
+ LockSemaphoreInfo(splay_tree->semaphore);
SplaySplayTree(splay_tree,key);
compare=0;
if (splay_tree->root != (NodeInfo *) NULL)
splay_tree->root->value=splay_tree->relinquish_value(
splay_tree->root->value);
splay_tree->root->value=(void *) value;
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(MagickTrue);
}
}
node=(NodeInfo *) AcquireAlignedMemory(1,sizeof(*node));
if (node == (NodeInfo *) NULL)
{
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(MagickFalse);
}
node->key=(void *) key;
splay_tree->root=node;
splay_tree->key=(void *) NULL;
splay_tree->nodes++;
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(MagickTrue);
}
\f
%
*/
-static NodeInfo *LinkSplayTreeNodes(NodeInfo **nodes,const unsigned long low,
- const unsigned long high)
+static NodeInfo *LinkSplayTreeNodes(NodeInfo **nodes,const size_t low,
+ const size_t high)
{
register NodeInfo
*node;
- unsigned long
+ size_t
bisect;
bisect=low+(high-low)/2;
% whenever a value object is added to the splay-tree.
%
*/
+
+static void *GetFirstSplayTreeNode(SplayTreeInfo *splay_tree)
+{
+ register NodeInfo
+ *node;
+
+ node=splay_tree->root;
+ if (splay_tree->root == (NodeInfo *) NULL)
+ return((NodeInfo *) NULL);
+ while (node->left != (NodeInfo *) NULL)
+ node=node->left;
+ return(node->key);
+}
+
MagickExport SplayTreeInfo *CloneSplayTree(SplayTreeInfo *splay_tree,
void *(*clone_key)(void *),void *(*clone_value)(void *))
{
+ register NodeInfo
+ *next,
+ *node;
+
SplayTreeInfo
*clone_tree;
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
clone_tree=NewSplayTree(splay_tree->compare,splay_tree->relinquish_key,
splay_tree->relinquish_value);
- (void) LockSemaphoreInfo(splay_tree->semaphore);
- if (splay_tree->root != (NodeInfo *) NULL)
+ LockSemaphoreInfo(splay_tree->semaphore);
+ if (splay_tree->root == (NodeInfo *) NULL)
{
- register NodeInfo
- *active,
- *next,
- *node;
-
- void
- *key,
- *value;
-
- key=splay_tree->root->key;
- if ((clone_key != (void *(*)(void *)) NULL) && (key != (void *) NULL))
- key=clone_key(key);
- value=splay_tree->root->value;
- if ((clone_value != (void *(*)(void *)) NULL) && (value != (void *) NULL))
- value=clone_value(value);
- (void) AddValueToSplayTree(clone_tree,key,value);
- for (node=splay_tree->root; node != (NodeInfo *) NULL; )
+ UnlockSemaphoreInfo(splay_tree->semaphore);
+ return(clone_tree);
+ }
+ next=(NodeInfo *) GetFirstSplayTreeNode(splay_tree);
+ while (next != (NodeInfo *) NULL)
+ {
+ SplaySplayTree(splay_tree,next);
+ (void) AddValueToSplayTree(clone_tree,clone_key(splay_tree->root->key),
+ clone_value(splay_tree->root->value));
+ next=(NodeInfo *) NULL;
+ node=splay_tree->root->right;
+ if (node != (NodeInfo *) NULL)
{
- active=node;
- for (node=(NodeInfo *) NULL; active != (NodeInfo *) NULL; )
- {
- next=(NodeInfo *) NULL;
- if (active->left != (NodeInfo *) NULL)
- {
- next=node;
- key=active->left->key;
- if ((clone_key != (void *(*)(void *)) NULL) &&
- (key != (void *) NULL))
- key=clone_key(key);
- value=active->left->value;
- if ((clone_value != (void *(*)(void *)) NULL) &&
- (value != (void *) NULL))
- value=clone_value(value);
- (void) AddValueToSplayTree(clone_tree,key,value);
- node=active->left;
- }
- if (active->right != (NodeInfo *) NULL)
- {
- next=node;
- key=active->right->key;
- if ((clone_key != (void *(*)(void *)) NULL) &&
- (key != (void *) NULL))
- key=clone_key(key);
- value=active->right->value;
- if ((clone_value != (void *(*)(void *)) NULL) &&
- (value != (void *) NULL))
- value=clone_value(value);
- (void) AddValueToSplayTree(clone_tree,key,value);
- node=active->right;
- }
- active=next;
- }
+ while (node->left != (NodeInfo *) NULL)
+ node=node->left;
+ next=(NodeInfo *) node->key;
}
- }
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ }
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(clone_tree);
}
\f
% o value: the value.
%
*/
-
-static void *GetFirstSplayTreeNode(SplayTreeInfo *splay_tree)
-{
- register NodeInfo
- *node;
-
- node=splay_tree->root;
- if (splay_tree->root == (NodeInfo *) NULL)
- return((NodeInfo *) NULL);
- while (node->left != (NodeInfo *) NULL)
- node=node->left;
- return(node->key);
-}
-
MagickExport MagickBooleanType DeleteNodeByValueFromSplayTree(
SplayTreeInfo *splay_tree,const void *value)
{
assert(splay_tree->signature == MagickSignature);
if (splay_tree->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
- (void) LockSemaphoreInfo(splay_tree->semaphore);
+ LockSemaphoreInfo(splay_tree->semaphore);
if (splay_tree->root == (NodeInfo *) NULL)
{
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(MagickFalse);
}
next=(NodeInfo *) GetFirstSplayTreeNode(splay_tree);
((splay_tree->root->key < key) ? -1 : 0);
if (compare != 0)
{
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(MagickFalse);
}
left=splay_tree->root->left;
if (left == (NodeInfo *) NULL)
{
splay_tree->root=right;
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(MagickTrue);
}
splay_tree->root=left;
left=left->right;
left->right=right;
}
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(MagickTrue);
}
}
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(MagickFalse);
}
\f
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
if (splay_tree->root == (NodeInfo *) NULL)
return(MagickFalse);
- (void) LockSemaphoreInfo(splay_tree->semaphore);
+ LockSemaphoreInfo(splay_tree->semaphore);
SplaySplayTree(splay_tree,key);
splay_tree->key=(void *) NULL;
if (splay_tree->compare != (int (*)(const void *,const void *)) NULL)
((splay_tree->root->key < key) ? -1 : 0);
if (compare != 0)
{
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(MagickFalse);
}
left=splay_tree->root->left;
if (left == (NodeInfo *) NULL)
{
splay_tree->root=right;
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(MagickTrue);
}
splay_tree->root=left;
left=left->right;
left->right=right;
}
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(MagickTrue);
}
\f
*active,
*pend;
- (void) LockSemaphoreInfo(splay_tree->semaphore);
+ LockSemaphoreInfo(splay_tree->semaphore);
if (splay_tree->root != (NodeInfo *) NULL)
{
if ((splay_tree->relinquish_key != (void *(*)(void *)) NULL) &&
}
}
splay_tree->signature=(~MagickSignature);
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
DestroySemaphoreInfo(&splay_tree->semaphore);
splay_tree=(SplayTreeInfo *) RelinquishMagickMemory(splay_tree);
return(splay_tree);
%
% The format of the GetNextKeyInSplayTree method is:
%
-% void *GetNextKeyInSplayTree(SplayTreeInfo *splay_tree)
+% const void *GetNextKeyInSplayTree(SplayTreeInfo *splay_tree)
%
% A description of each parameter follows:
%
% o key: the key.
%
*/
-MagickExport void *GetNextKeyInSplayTree(SplayTreeInfo *splay_tree)
+MagickExport const void *GetNextKeyInSplayTree(SplayTreeInfo *splay_tree)
{
register NodeInfo
*node;
if ((splay_tree->root == (NodeInfo *) NULL) ||
(splay_tree->next == (void *) NULL))
return((void *) NULL);
- (void) LockSemaphoreInfo(splay_tree->semaphore);
+ LockSemaphoreInfo(splay_tree->semaphore);
SplaySplayTree(splay_tree,splay_tree->next);
splay_tree->next=(void *) NULL;
node=splay_tree->root->right;
splay_tree->next=node->key;
}
key=splay_tree->root->key;
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(key);
}
\f
%
% The format of the GetNextValueInSplayTree method is:
%
-% void *GetNextValueInSplayTree(SplayTreeInfo *splay_tree)
+% const void *GetNextValueInSplayTree(SplayTreeInfo *splay_tree)
%
% A description of each parameter follows:
%
% o key: the key.
%
*/
-MagickExport void *GetNextValueInSplayTree(SplayTreeInfo *splay_tree)
+MagickExport const void *GetNextValueInSplayTree(SplayTreeInfo *splay_tree)
{
register NodeInfo
*node;
if ((splay_tree->root == (NodeInfo *) NULL) ||
(splay_tree->next == (void *) NULL))
return((void *) NULL);
- (void) LockSemaphoreInfo(splay_tree->semaphore);
+ LockSemaphoreInfo(splay_tree->semaphore);
SplaySplayTree(splay_tree,splay_tree->next);
splay_tree->next=(void *) NULL;
node=splay_tree->root->right;
splay_tree->next=node->key;
}
value=splay_tree->root->value;
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(value);
}
\f
%
% GetValueFromSplayTree() gets a value from the splay-tree by its key.
%
+% Note, the value is a constant. Do not attempt to free it.
+%
% The format of the GetValueFromSplayTree method is:
%
-% void *GetValueFromSplayTree(SplayTreeInfo *splay_tree,const void *key)
+% const void *GetValueFromSplayTree(SplayTreeInfo *splay_tree,
+% const void *key)
%
% A description of each parameter follows:
%
% o key: the key.
%
*/
-MagickExport void *GetValueFromSplayTree(SplayTreeInfo *splay_tree,
+MagickExport const void *GetValueFromSplayTree(SplayTreeInfo *splay_tree,
const void *key)
{
int
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
if (splay_tree->root == (NodeInfo *) NULL)
return((void *) NULL);
- (void) LockSemaphoreInfo(splay_tree->semaphore);
+ LockSemaphoreInfo(splay_tree->semaphore);
SplaySplayTree(splay_tree,key);
if (splay_tree->compare != (int (*)(const void *,const void *)) NULL)
compare=splay_tree->compare(splay_tree->root->key,key);
((splay_tree->root->key < key) ? -1 : 0);
if (compare != 0)
{
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return((void *) NULL);
}
value=splay_tree->root->value;
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(value);
}
\f
%
% The format of the GetNumberOfNodesInSplayTree method is:
%
-% unsigned long GetNumberOfNodesInSplayTree(
+% size_t GetNumberOfNodesInSplayTree(
% const SplayTreeInfo *splay_tree)
%
% A description of each parameter follows:
% o splay_tree: the splay tree.
%
*/
-MagickExport unsigned long GetNumberOfNodesInSplayTree(
+MagickExport size_t GetNumberOfNodesInSplayTree(
const SplayTreeInfo *splay_tree)
{
assert(splay_tree != (SplayTreeInfo *) NULL);
NodeInfo
**nodes;
- register long
+ register ssize_t
i;
register NodeInfo
key=(void *) NULL;
if (splay_tree->root == (NodeInfo *) NULL)
return(key);
- (void) LockSemaphoreInfo(splay_tree->semaphore);
+ LockSemaphoreInfo(splay_tree->semaphore);
next=(NodeInfo *) GetFirstSplayTreeNode(splay_tree);
while (next != (NodeInfo *) NULL)
{
((splay_tree->root->key < key) ? -1 : 0);
if (compare != 0)
{
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(key);
}
left=splay_tree->root->left;
if (left == (NodeInfo *) NULL)
{
splay_tree->root=right;
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(key);
}
splay_tree->root=left;
left=left->right;
left->right=right;
}
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(key);
}
}
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(key);
}
\f
value=(void *) NULL;
if (splay_tree->root == (NodeInfo *) NULL)
return(value);
- (void) LockSemaphoreInfo(splay_tree->semaphore);
+ LockSemaphoreInfo(splay_tree->semaphore);
SplaySplayTree(splay_tree,key);
splay_tree->key=(void *) NULL;
if (splay_tree->compare != (int (*)(const void *,const void *)) NULL)
((splay_tree->root->key < key) ? -1 : 0);
if (compare != 0)
{
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(value);
}
left=splay_tree->root->left;
if (left == (NodeInfo *) NULL)
{
splay_tree->root=right;
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(value);
}
splay_tree->root=left;
left=left->right;
left->right=right;
}
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
return(value);
}
\f
assert(splay_tree->signature == MagickSignature);
if (splay_tree->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
- (void) LockSemaphoreInfo(splay_tree->semaphore);
+ LockSemaphoreInfo(splay_tree->semaphore);
if (splay_tree->root != (NodeInfo *) NULL)
{
if ((splay_tree->relinquish_key != (void *(*)(void *)) NULL) &&
splay_tree->next=(void *) NULL;
splay_tree->nodes=0;
splay_tree->balance=MagickFalse;
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
}
\f
/*
assert(splay_tree->signature == MagickSignature);
if (splay_tree->debug != MagickFalse)
(void) LogMagickEvent(TraceEvent,GetMagickModule(),"...");
- (void) LockSemaphoreInfo(splay_tree->semaphore);
+ LockSemaphoreInfo(splay_tree->semaphore);
splay_tree->next=GetFirstSplayTreeNode(splay_tree);
- (void) UnlockSemaphoreInfo(splay_tree->semaphore);
+ UnlockSemaphoreInfo(splay_tree->semaphore);
}
\f
/*
%
*/
-static NodeInfo *Splay(SplayTreeInfo *splay_tree,const unsigned long depth,
+static NodeInfo *Splay(SplayTreeInfo *splay_tree,const size_t depth,
const void *key,NodeInfo **node,NodeInfo **parent,NodeInfo **grandparent)
{
int