Added and Fixed.

This commit is contained in:
Saturneic 2019-01-06 22:50:32 +08:00
parent 30323b5d63
commit a7b6538bac
10 changed files with 38 additions and 200 deletions

7
include/block/block.h Normal file
View File

@ -0,0 +1,7 @@
#ifndef block_h
#define block_h
#include <block/block_type.h>
#endif /* block_h */

View File

@ -0,0 +1,5 @@
#ifndef BLOCK_EXPAND_H
#define BLOCK_EXPAND_H
#endif /* block_expand_h */

View File

@ -0,0 +1,22 @@
#ifndef block_type_h
#define block_type_h
#include<type.h>
#ifdef id_enable
#include <id/id.h>
#endif
/*
*
*/
typedef struct block{
uint64_t size;
uint32_t carve;
void *data;
#ifdef id_enable
SID *s_id;//栈节点的ID
#endif
} SNode;
#endif /* block_type_h */

View File

@ -1,19 +0,0 @@
#ifndef stack_h
#define stack_h
#include <stack/stack_type.h>
extern Stack *initStack(void);
extern SNode *initSNode(void);
extern int initMallocValueForSNode(SNode *p_snode, unsigned int type, void *value);
extern SNode *popStack(Stack *p_stack);
extern int pushStack(Stack *p_stack, SNode *p_snode);
extern int releaseStack(Stack *p_stack);
extern int releaseSNode(SNode *p_snode);
#endif /* stack_h */

View File

@ -1,14 +0,0 @@
#ifndef STACK_EXPAND_H
#define STACK_EXPAND_H
SNode *snodeWithInt(int);
SNode *snodeWithDouble(double);
SNode *snodeWithString(char *);
SNode *snodeWithPointer(void *);
int getValueByIntForSNode(SNode *);
double getValueByDoubleForSNode(SNode *);
char *getValueByStringForSNode(SNode *);
void *getValueByPointerForSNode(SNode *);
#endif /* stack_expand_h */

View File

@ -1,31 +0,0 @@
#ifndef stack_type_h
#define stack_type_h
#ifdef id_enable
#include <id/id.h>
#endif
/*
*
*/
typedef struct stack_node{
unsigned int type;//栈节点的类型
void *value;//值指针
struct stack_node *next;//下一个栈节点
#ifdef id_enable
SID *s_id;//栈节点的ID
#endif
} SNode;
/*
*
*/
typedef struct stack{
unsigned long long length;//栈的长度
SNode *top;//指向栈顶的栈节点
#ifdef id_enable
SID *s_id;//栈的ID
#endif
} Stack;
#endif /* stack_type_h */

2
src/block/block.c Normal file
View File

@ -0,0 +1,2 @@
#include <block/block.h>

2
src/block/block_expand.c Normal file
View File

@ -0,0 +1,2 @@
#include <block/block.h>
#include <block/block_expand.h>

View File

@ -1,74 +0,0 @@
#include <type.h>
#include <stack/stack.h>
Stack *initStack(void) {
Stack *p_stack = (Stack *)malloc(sizeof(Stack));
#ifdef id_enable
p_stack->s_id = getS_id(STACK, 1);
#endif
p_stack->length = 0;
p_stack->top = NULL;
return p_stack;
}
SNode *initSNode(void) {
SNode *p_snode = (SNode *)malloc(sizeof(SNode));
#ifdef id_enable
p_snode->s_id = getS_id(STACK_NODE, 1);
#endif
p_snode->next = NULL;
p_snode->value = NULL;
return p_snode;
}
SNode *popStack(Stack *p_stack) {
if (p_stack->top != NULL) {
SNode *p_snode = p_stack->top;
p_stack->top = p_snode->next;
p_snode->next = NULL;
p_stack->length -= 1;
return p_snode;
}
else return NULL;
}
int pushStack(Stack *p_stack, SNode *p_snode) {
SNode *pn_snode = p_stack->top;
p_stack->top = p_snode;
p_snode->next = pn_snode;
p_stack->length -= 1;
return 0;
}
int releaseStack(Stack *p_stack) {
SNode *p_sndoe = p_stack->top;
while (p_sndoe != NULL) {
SNode *pl_snode = p_sndoe;
p_sndoe = p_sndoe->next;
releaseSNode(pl_snode);
}
#ifdef id_enable
freeS_id(p_stack->s_id);
#endif
p_stack->top = NULL;
p_stack->length = 0;
free(p_stack);
return 0;
}
int releaseSNode(SNode *p_snode) {
#ifdef id_enable
freeS_id(p_snode->s_id);
#endif
free(p_snode->value);
p_snode->value = NULL;
p_snode->type = VOID;
free(p_snode);
return 0;
}
int initMallocValueForSNode(SNode *p_snode, unsigned int type, void *value) {
p_snode->type = type;
p_snode->value = value;
return 0;
}

View File

@ -1,62 +0,0 @@
#include <type.h>
#include <stack/stack.h>
#include <stack/stack_expand.h>
SNode *snodeWithInt(int temp) {
SNode *p_snode = initSNode();
int *p_temp = (int *)malloc(sizeof(int));
if(p_temp == NULL){
return NULL;
}
*p_temp = temp;
initMallocValueForSNode(p_snode, INT, p_temp);
return p_snode;
}
SNode *snodeWithDouble(double temp) {
SNode *p_snode = initSNode();
double *p_temp = (double *)malloc(sizeof(double));
if(p_temp == NULL){
return NULL;
}
*p_temp = temp;
initMallocValueForSNode(p_snode, DOUBLE, p_temp);
return p_snode;
}
SNode *snodeWithString(char *temp) {
SNode *p_snode = initSNode();
char *p_temp = (char *)malloc(sizeof(char)*(strlen(temp) + 1));
if(p_temp == NULL){
return NULL;
}
strcpy(p_temp, temp);
initMallocValueForSNode(p_snode, STRING, p_temp);
return p_snode;
}
SNode *snodeWithPointer(void *temp) {
SNode *p_snode = initSNode();
initMallocValueForSNode(p_snode, POINTER, temp);
return p_snode;
}
int getValueByIntForSNode(SNode *p_snode) {
if (p_snode->type == INT) return *(int *)p_snode->value;
else return -1;
}
double getValueByDoubleForSNode(SNode *p_snode) {
if (p_snode->type == DOUBLE) return *(double *)p_snode->value;
else return -1;
}
char *getValueByStringForSNode(SNode *p_snode) {
if (p_snode->type == STRING) return (char *)p_snode->value;
else return NULL;
}
void *getValueByPointerForSNode(SNode *p_snode) {
if (p_snode->type == POINTER) return (void *)p_snode->value;
else return NULL;
}