version 1.1, 2003/11/08 12:34:01 |
version 1.2, 2008/09/19 10:55:40 |
|
|
/* $OpenXM$ */ |
/* $OpenXM: OpenXM/src/ox_ntl/oxstack.c,v 1.1 2003/11/08 12:34:01 iwane Exp $ */ |
|
|
#include <stdio.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <stdlib.h> |
|
|
/* cmo stack */ |
/* cmo stack */ |
static int G_ox_stack_size = 0; |
static int G_ox_stack_size = 0; |
static int G_ox_stack_pointer = 0; |
static int G_ox_stack_pointer = 0; |
static cmo **G_ox_stack = NULL; |
static oxstack_node **G_ox_stack = NULL; |
|
|
|
|
/*===========================================================================* |
/*===========================================================================* |
Line 51 oxstack_init_stack(void) |
|
Line 51 oxstack_init_stack(void) |
|
|
|
G_ox_stack_pointer = 0; |
G_ox_stack_pointer = 0; |
G_ox_stack_size = OXSERV_INIT_STACK_SIZE; |
G_ox_stack_size = OXSERV_INIT_STACK_SIZE; |
G_ox_stack = (cmo **)malloc(G_ox_stack_size * sizeof(cmo *)); |
G_ox_stack = (oxstack_node **)malloc(G_ox_stack_size * sizeof(oxstack_node *)); |
if (G_ox_stack == NULL) { |
if (G_ox_stack == NULL) { |
DPRINTF(("server: %d: %s\n", errno, strerror(errno))); |
DPRINTF(("server: %d: %s\n", errno, strerror(errno))); |
return (OXSERV_FAILURE); |
return (OXSERV_FAILURE); |
|
|
oxstack_extend_stack(void) |
oxstack_extend_stack(void) |
{ |
{ |
int size2 = G_ox_stack_size + OXSERV_EXT_STACK_SIZE; |
int size2 = G_ox_stack_size + OXSERV_EXT_STACK_SIZE; |
cmo **stack2 = (cmo **)malloc(size2 * sizeof(cmo *)); |
oxstack_node **stack2 = (oxstack_node **)malloc(size2 * sizeof(oxstack_node *)); |
if (stack2 == NULL) { |
if (stack2 == NULL) { |
DPRINTF(("server: %d: %s\n", errno, strerror(errno))); |
DPRINTF(("server: %d: %s\n", errno, strerror(errno))); |
return (OXSERV_FAILURE); |
return (OXSERV_FAILURE); |
} |
} |
|
|
memcpy(stack2, G_ox_stack, G_ox_stack_size * sizeof(cmo *)); |
memcpy(stack2, G_ox_stack, G_ox_stack_size * sizeof(oxstack_node *)); |
free(G_ox_stack); |
free(G_ox_stack); |
|
|
G_ox_stack = stack2; |
G_ox_stack = stack2; |
Line 91 oxstack_extend_stack(void) |
|
Line 91 oxstack_extend_stack(void) |
|
* RETURN : if success return OXSERV_SUCCESS, else OXSERV_FAILURE. |
* RETURN : if success return OXSERV_SUCCESS, else OXSERV_FAILURE. |
*****************************************************************************/ |
*****************************************************************************/ |
int |
int |
oxstack_push(cmo *m) |
oxstack_push(oxstack_node *m) |
{ |
{ |
int ret; |
int ret; |
|
|
Line 107 oxstack_push(cmo *m) |
|
Line 107 oxstack_push(cmo *m) |
|
return (OXSERV_SUCCESS); |
return (OXSERV_SUCCESS); |
} |
} |
|
|
|
int |
|
oxstack_push_cmo(cmo *c) |
|
{ |
|
return (oxstack_push(oxstack_node_init(c))); |
|
} |
|
|
|
|
/***************************************************************************** |
/***************************************************************************** |
* remove thd CMO at the top of this stack and |
* remove thd CMO at the top of this stack and |
* returns that cmo as the value of this function. |
* returns that cmo as the value of this function. |
Line 114 oxstack_push(cmo *m) |
|
Line 121 oxstack_push(cmo *m) |
|
* PARAM : NONE |
* PARAM : NONE |
* RETURN : CMO at the top of the stack. |
* RETURN : CMO at the top of the stack. |
*****************************************************************************/ |
*****************************************************************************/ |
cmo * |
oxstack_node * |
oxstack_pop(void) |
oxstack_pop(void) |
{ |
{ |
cmo *c; |
oxstack_node *c; |
if (G_ox_stack_pointer > 0) { |
if (G_ox_stack_pointer > 0) { |
G_ox_stack_pointer--; |
G_ox_stack_pointer--; |
c = G_ox_stack[G_ox_stack_pointer]; |
c = G_ox_stack[G_ox_stack_pointer]; |
Line 133 oxstack_pop(void) |
|
Line 140 oxstack_pop(void) |
|
* PARAM : i : position in the stack. |
* PARAM : i : position in the stack. |
* RETURN: thd cmo at the specified position in the stack. |
* RETURN: thd cmo at the specified position in the stack. |
*****************************************************************************/ |
*****************************************************************************/ |
cmo * |
oxstack_node * |
oxstack_get(int i) |
oxstack_get(int i) |
{ |
{ |
if (i < G_ox_stack_pointer && i >= 0) { |
if (i < G_ox_stack_pointer && i >= 0) { |
Line 148 oxstack_get(int i) |
|
Line 155 oxstack_get(int i) |
|
* PARAM : NONE |
* PARAM : NONE |
* RETURN: the cmo at the top of the stack. |
* RETURN: the cmo at the top of the stack. |
*****************************************************************************/ |
*****************************************************************************/ |
cmo * |
oxstack_node * |
oxstack_peek(void) |
oxstack_peek(void) |
{ |
{ |
return (oxstack_get(G_ox_stack_pointer - 1)); |
return (oxstack_get(G_ox_stack_pointer - 1)); |
Line 168 oxstack_dest(void) |
|
Line 175 oxstack_dest(void) |
|
free(G_ox_stack); |
free(G_ox_stack); |
} |
} |
|
|
|
|
|
/***************************************************************************** |
|
* destroy |
|
* |
|
* PARAM : NONE |
|
* RETURN: NONE |
|
*****************************************************************************/ |
|
oxstack_node * |
|
oxstack_node_init(cmo *c) |
|
{ |
|
oxstack_node *p; |
|
|
|
p = malloc(sizeof(oxstack_node)); |
|
memset(p, 0, sizeof(*p)); |
|
|
|
p->c = c; |
|
return (p); |
|
} |
|
|
|
|