Back to index

php5  5.3.10
Functions
zend_stack.c File Reference
#include "zend.h"
#include "zend_stack.h"

Go to the source code of this file.

Functions

ZEND_API int zend_stack_init (zend_stack *stack)
ZEND_API int zend_stack_push (zend_stack *stack, const void *element, int size)
ZEND_API int zend_stack_top (const zend_stack *stack, void **element)
ZEND_API int zend_stack_del_top (zend_stack *stack)
ZEND_API int zend_stack_int_top (const zend_stack *stack)
ZEND_API int zend_stack_is_empty (const zend_stack *stack)
ZEND_API int zend_stack_destroy (zend_stack *stack)
ZEND_API void ** zend_stack_base (const zend_stack *stack)
ZEND_API int zend_stack_count (const zend_stack *stack)
ZEND_API void zend_stack_apply (zend_stack *stack, int type, int(*apply_function)(void *element))
ZEND_API void zend_stack_apply_with_argument (zend_stack *stack, int type, int(*apply_function)(void *element, void *arg), void *arg)

Function Documentation

ZEND_API void zend_stack_apply ( zend_stack stack,
int  type,
int(*)(void *element)  apply_function 
)

Definition at line 123 of file zend_stack.c.

{
       int i;

       switch (type) {
              case ZEND_STACK_APPLY_TOPDOWN:
                     for (i=stack->top-1; i>=0; i--) {
                            if (apply_function(stack->elements[i])) {
                                   break;
                            }
                     }
                     break;
              case ZEND_STACK_APPLY_BOTTOMUP:
                     for (i=0; i<stack->top; i++) {
                            if (apply_function(stack->elements[i])) {
                                   break;
                            }
                     }
                     break;
       }
}

Here is the caller graph for this function:

ZEND_API void zend_stack_apply_with_argument ( zend_stack stack,
int  type,
int(*)(void *element, void *arg)  apply_function,
void *  arg 
)

Definition at line 146 of file zend_stack.c.

{
       int i;

       switch (type) {
              case ZEND_STACK_APPLY_TOPDOWN:
                     for (i=stack->top-1; i>=0; i--) {
                            if (apply_function(stack->elements[i], arg)) {
                                   break;
                            }
                     }
                     break;
              case ZEND_STACK_APPLY_BOTTOMUP:
                     for (i=0; i<stack->top; i++) {
                            if (apply_function(stack->elements[i], arg)) {
                                   break;
                            }
                     }
                     break;
       }
}

Here is the caller graph for this function:

ZEND_API void** zend_stack_base ( const zend_stack stack)

Definition at line 111 of file zend_stack.c.

{
       return stack->elements;
}

Definition at line 117 of file zend_stack.c.

{
       return stack->top;
}

Here is the caller graph for this function:

Definition at line 64 of file zend_stack.c.

{
       if (stack->top > 0) {
              efree(stack->elements[--stack->top]);
       }
       return SUCCESS;
}

Here is the caller graph for this function:

Definition at line 95 of file zend_stack.c.

{
       int i;

       if (stack->elements) {
              for (i = 0; i < stack->top; i++) {
                     efree(stack->elements[i]);
              }

              efree(stack->elements);
       }

       return SUCCESS;
}

Here is the caller graph for this function:

Definition at line 25 of file zend_stack.c.

{
       stack->top = 0;
       stack->elements = (void **) emalloc(sizeof(void **) * STACK_BLOCK_SIZE);
       if (!stack->elements) {
              return FAILURE;
       } else {
              stack->max = STACK_BLOCK_SIZE;
              return SUCCESS;
       }
}

Here is the caller graph for this function:

Definition at line 73 of file zend_stack.c.

{
       int *e;

       if (zend_stack_top(stack, (void **) &e) == FAILURE) {
              return FAILURE;                    /* this must be a negative number, since negative numbers can't be address numbers */
       } else {
              return *e;
       }
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 85 of file zend_stack.c.

{
       if (stack->top == 0) {
              return 1;
       } else {
              return 0;
       }
}

Here is the caller graph for this function:

ZEND_API int zend_stack_push ( zend_stack stack,
const void *  element,
int  size 
)

Definition at line 37 of file zend_stack.c.

{
       if (stack->top >= stack->max) {           /* we need to allocate more memory */
              stack->elements = (void **) erealloc(stack->elements,
                               (sizeof(void **) * (stack->max += STACK_BLOCK_SIZE)));
              if (!stack->elements) {
                     return FAILURE;
              }
       }
       stack->elements[stack->top] = (void *) emalloc(size);
       memcpy(stack->elements[stack->top], element, size);
       return stack->top++;
}

Here is the caller graph for this function:

ZEND_API int zend_stack_top ( const zend_stack stack,
void **  element 
)

Definition at line 52 of file zend_stack.c.

{
       if (stack->top > 0) {
              *element = stack->elements[stack->top - 1];
              return SUCCESS;
       } else {
              *element = NULL;
              return FAILURE;
       }
}

Here is the caller graph for this function: