ZE-Standard-Libraries/list/list_expand.h

340 lines
21 KiB
C
Raw Normal View History

2018-06-12 05:51:42 +00:00
<EFBFBD><EFBFBD>#ifndef LIST_EXPAND_H
#define LIST_EXPAND_H
#include "list.h"
Node *nodeWithInt(int);//<EFBFBD>_<EFBFBD>R<EFBFBD>YSN*NUSN<P<EFBFBD><EFBFBD><EFBFBD>pv^K<EFBFBD><P
Node *nodeWithDouble(double);//<EFBFBD>_<EFBFBD>R<EFBFBD>YSN*N<EFBFBD><EFBFBD>USN<P<EFBFBD>pv^K<EFBFBD><P
Node *nodeWithString(const char *);//<EFBFBD>_<EFBFBD>R<EFBFBD>YSN*NUSN<P<EFBFBD><EFBFBD><EFBFBD>pv^K<EFBFBD><P
Node *nodeWithPointer(void *);//<EFBFBD>_<EFBFBD>R<EFBFBD>YSN*NUSN<P<EFBFBD><EFBFBD><EFBFBD>pv^K<EFBFBD><P
Node *nodeWithComplex(void);//<EFBFBD>_<EFBFBD>R<EFBFBD>YSN*N YT<P<EFBFBD><EFBFBD><EFBFBD>pv^K<EFBFBD><P
int addValueForComplex(Node *, char *type, void *value);//:N YT<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>m<EFBFBD>R<P
int addIntForComplex(Node *, int);//:N YT<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>m<EFBFBD>RN*Nyr<EFBFBD>[{|<EFBFBD>W<EFBFBD>v<P
int addDoubleForComplex(Node *, double);//:N YT<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>m<EFBFBD>RN*Nyr<EFBFBD>[{|<EFBFBD>W<EFBFBD>v<P
int addStringForComplex(Node *, char *);//:N YT<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>m<EFBFBD>RN*Nyr<EFBFBD>[{|<EFBFBD>W<EFBFBD>v<P
int addPointerForComplex(Node *, void *);//:N YT<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>m<EFBFBD>RN*Nyr<EFBFBD>[{|<EFBFBD>W<EFBFBD>v<P
Node *findByIndexForNode(List *, unsigned long long);//9hncMOn<EFBFBD>g~bN*N<EFBFBD><EFBFBD><EFBFBD>p
Node *findByIntForNode(List *, int);//<EFBFBD>Ogqyr<EFBFBD>[{|<EFBFBD>W<EFBFBD>g~bN*N<EFBFBD><EFBFBD><EFBFBD>p
Node *findByDoubleForNode(List *, double);//<EFBFBD>Ogqyr<EFBFBD>[{|<EFBFBD>W<EFBFBD>g~bN*N<EFBFBD><EFBFBD><EFBFBD>p
Node *findByStringForNode(List *, char *);//<EFBFBD>Ogqyr<EFBFBD>[{|<EFBFBD>W<EFBFBD>g~bN*N<EFBFBD><EFBFBD><EFBFBD>p
Node *findByPointerForNode(List *, void *);//<EFBFBD>Ogqyr<EFBFBD>[{|<EFBFBD>W<EFBFBD>g~bN*N<EFBFBD><EFBFBD><EFBFBD>p
List *m_findByIntForNode(List*, int);//9hncMOn<EFBFBD>g~b@b g9SM<EFBFBD><EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>p
List *m_findByDoubleForNode(List*, double);//9hncMOn<EFBFBD>g~b@b g9SM<EFBFBD><EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>p
List *m_findByStringForNode(List*, char *);//9hncMOn<EFBFBD>g~b@b g9SM<EFBFBD><EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>p
List *m_findByPointerForNode(List*, void *);//9hncMOn<EFBFBD>g~b@b g9SM<EFBFBD><EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>p
void printListInfo(List *p_list,int priority);//SbpSRh<EFBFBD><EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>~<EFBFBD>Oo`
void printNodeInfo(Node *p_node,int priority);//SbpS<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>v<EFBFBD><EFBFBD><EFBFBD>~<EFBFBD>Oo`
void printList(List *);//SbpSRh<EFBFBD>
void printNode(Node *p_node);//SbpS<EFBFBD><EFBFBD><EFBFBD>p
int getByIntForNode(Node *);//<EFBFBD>v<EFBFBD>c<EFBFBD>_0R<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>v<P
double getByDoubleForNode(Node *);//<EFBFBD>v<EFBFBD>c<EFBFBD>_0R<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>v<P
char *getByStringForNode(Node *);//<EFBFBD>v<EFBFBD>c<EFBFBD>_0R<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>v<P
void *getByPointerForNode(Node *);//<EFBFBD>v<EFBFBD>c<EFBFBD>_0R<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>v<P
unsigned long long getIndexByNode(Node *p_node);
int listThrough(List *p_list, int (*p_func)(Node *));//M<EFBFBD><EFBFBD>S<EFBFBD><EFBFBD>h<EFBFBD>v^ N<EFBFBD>e<EFBFBD>(u<EFBFBD>vh<EFBFBD>Qpe0<EFBFBD>vh<EFBFBD>Qpe\<EFBFBD>c<EFBFBD>S<EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>PX[<P<EFBFBD>vc<EFBFBD><EFBFBD><EFBFBD>SvQ{|<EFBFBD>W0
Node *nodeWithInt(int m_int){
int *p_int = (int *)malloc(sizeof(int));
*p_int = m_int;
Node *p_node = init_node();
initMalllocValueForNode(p_node,"int",(void *)p_int);
return p_node;
}
Node *nodeWithDouble(double m_double){
double *p_double = (double *)malloc(sizeof(double));
*p_double = m_double;
Node *p_node = init_node();
initMalllocValueForNode(p_node,"double",(void *)p_double);
return p_node;
}
Node *nodeWithString(const char *m_string){
char *p_string = (char *)malloc(sizeof(char)*(strlen(m_string)+1));
strcpy_s(p_string, strlen(p_string), m_string);
Node *p_node = init_node();
initMalllocValueForNode(p_node,"string",(void *)p_string);
return p_node;
}
Node *nodeWithPointer(void *m_pointer){
Node *p_node = init_node();
initMalllocValueForNode(p_node,"pointer",m_pointer);
return p_node;
}
Node *nodeWithComplex(void){
Node *p_node = init_node();
p_node->type = "list";
p_node->value = init_list();
p_node->if_malloc = 1;
return p_node;
}
Node *findByIndexForNode(List *p_list, unsigned long long m_index){
Node *p_node = p_list->head;
for(unsigned long long i= 0; i < m_index; i++){
p_node = p_node->next;
}
return p_node;
}
int listThrough(List *p_list, int(*p_func)(Node *)){
Node *p_node = p_list->head;
while(p_node != NULL){
if(p_node->if_malloc == 1){
int m_return = (*p_func)(p_node->value, p_node->type);
if (m_return == -1) break;
else if (m_return == 1){
p_node = p_node->last;
continue;
}
else{
}
}
p_node = p_node->next;
}
return 0;
}
int getByIntForNode(Node *p_node){
if (!strcmp(p_node->type, "int")) return *(int *)(p_node->value);
else return -1;
}
char *getByStringForNode(Node *p_node){
if (!strcmp(p_node->type, "string")) return (char *)(p_node->value);
else return NULL;
}
double getByDoubleForNode(Node *p_node){
if (!strcmp(p_node->type, "double")) return *(double *)(p_node->value);
else return -1;
}
void *getByPointerForNode(Node *p_node){
if (!strcmp(p_node->type, "pointer")) return (void *)(p_node->value);
else return NULL;
}
void printListInfo(List *p_list,int priority){
for(int i = 0; i < priority; i++) printf(" ");
printf("###LIST(location:%p, id:%llu){\n",p_list,p_list->id);
for(int i = 0; i < priority+1; i++) printf(" ");
printf("HEAD->%p / Tail->%p / Length:%llu\n",p_list->head,p_list->tail,p_list->length);
Node *p_node = p_list->head;
int i = 0;
while (p_node != NULL){
for(int i = 0; i < priority+1; i++) printf(" ");
printf("%d.... \n",i);
printNodeInfo(p_node, priority+1);
p_node = p_node->next;
i++;
}
for(int i = 0; i < priority; i++) printf(" ");
printf("}\n");
}
void printList(List *p_list) {
Node *p_node = p_list->head;
printf("[");
int if_nearLast = 0;
while (p_node != NULL) {
if (!if_nearLast && p_node->next == NULL) if_nearLast = 1;
if (!strcmp(p_node->type, "int")) {
printf("%d", *(int *)(p_node->value));
}
else if (!strcmp(p_node->type, "double")) {
printf("%a", *(double *)(p_node->value));
}
else if (!strcmp(p_node->type, "string")) {
printf("%s", (char *)(p_node->value));
}
else if (!strcmp(p_node->type, "pointer")) {
printf("%s", (char *)(p_node->value));
}
else if (!strcmp(p_node->type, "list")) {
printList((List *)p_node->value);
}
if (!if_nearLast) {
printf(", ");
}
p_node = p_node->next;
}
printf("]");
}
void printNodeInfo(Node *p_node,int priority){
for(int i = 0; i < priority; i++) printf(" ");
printf("#NODE(location:%p, id:%llu){\n",p_node,p_node->id);
for(int i = 0; i < priority+1; i++) printf(" ");
printf("NEXT->%p / LAST->%p / MALLOC:%d\n",p_node->next,p_node->last,p_node->if_malloc);
if(!strcmp(p_node->type, "int")){
for(int i = 0; i < priority+1; i++) printf(" ");
printf("VALUE(Int):%d\n",*(int *)(p_node->value));
}
else if(!strcmp(p_node->type, "double")){
for(int i = 0; i < priority+1; i++) printf(" ");
printf("VALUE(Double):%a\n",*(double *)(p_node->value));
}
else if(!strcmp(p_node->type, "string")){
for(int i = 0; i < priority+1; i++) printf(" ");
printf("VALUE(String):%s\n",(char *)(p_node->value));
}
else if(!strcmp(p_node->type, "pointer")){
for(int i = 0; i < priority+1; i++) printf(" ");
printf("VALUE(Pointer):%s\n",(char *)(p_node->value));
}
else if(!strcmp(p_node->type, "list")){
for(int i = 0; i < priority+1; i++) printf(" ");
printf("VALUE(List):\n");
printListInfo((List *)p_node->value,priority+2);
}
for(int i = 0; i < priority; i++) printf(" ");
printf("}\n");
}
void printNode(Node *p_node){
printf("#NODE(location:%p, id:%llu){\n",p_node,p_node->id);
printf(" ");
printf("NEXT->%p / LAST->%p / MALLOC:%d\n",p_node->next,p_node->last,p_node->if_malloc);
printf(" ");
if(!strcmp(p_node->type, "int")){
printf("%d",*(int *)(p_node->value));
}
else if(!strcmp(p_node->type, "double")){
printf("%a\n",*(double *)(p_node->value));
}
else if(!strcmp(p_node->type, "string")){
printf("%s\n",(char *)(p_node->value));
}
else if(!strcmp(p_node->type, "pointer")){
printf("%s\n",(char *)(p_node->value));
}
else if(!strcmp(p_node->type, "list")){
printList((List *)p_node->value);
}
printf("}\n");
}
Node *findByIntForNode(List *p_list, int target){
int *p_target = (int *)malloc(sizeof(int));
*p_target = target;
Node *t_node = findByValue(p_list, "int", p_target);
free(p_target);
return t_node;
}
Node *findByDoubleForNode(List *p_list, double target){
double *p_target = (double *)malloc(sizeof(double));
*p_target = target;
Node *t_node = findByValue(p_list, "double", p_target);
free(p_target);
return t_node;
}
Node *findByStringForNode(List *p_list, char *target){
char *p_temp = (char *)malloc(sizeof(char)*(strlen(target)+1));
strcpy_s(p_temp, strlen(p_temp), target);
Node *t_node = findByValue(p_list, "string", p_temp);
free(p_temp);
return t_node;
}
Node *findByPointerForNode(List *p_list, void *target){
Node *t_node = findByValue(p_list, "pointer", target);
return t_node;
}
int addValueForComplex(Node * p_node, char *type, void *value){
if(!strcmp(p_node->type ,"list")){
List *c_list = (List *)p_node->value;
Node *c_node = init_node();
initMalllocValueForNode(c_node, type, value);
insertInTail(c_list, c_node);
return 0;
}
return -1;
}
int addIntForComplex(Node *p_node, int temp){
if(!strcmp(p_node->type, "list")){
int *p_temp = (int *)malloc(sizeof(int));
*p_temp = temp;
addValueForComplex(p_node, "int", p_temp);
return 0;
}
return -1;
}
int addDoubleForComplex(Node *p_node, double temp){
if(!strcmp(p_node->type, "list")){
double *p_temp = (double *)malloc(sizeof(double));
*p_temp = temp;
addValueForComplex(p_node, "double", p_temp);
return 0;
}
return -1;
}
int addStringForComplex(Node *p_node, char *temp){
if(!strcmp(p_node->type, "list")){
char *p_temp = (char *)malloc(sizeof(strlen(temp)+1));
strcpy_s(p_temp, strlen(p_temp), temp);
addValueForComplex(p_node, "string", p_temp);
return 0;
}
return -1;
}
int addPointerForComplex(Node *p_node, void *temp){
if(!strcmp(p_node->type, "list")){
addValueForComplex(p_node, "pointer", temp);
return 0;
}
return -1;
}
List *m_findByInt(List* p_list, int temp){
int *p_temp = (int *)malloc(sizeof(int));
*p_temp = temp;
List *t_list = mply_findByValue(p_list, "int", (void *)p_temp);
free(p_temp);
return t_list;
}
List *m_findByDouble(List* p_list, double temp){
double *p_temp = (double *)malloc(sizeof(double));
*p_temp = temp;
List *t_list = mply_findByValue(p_list, "double", (void *)p_temp);
free(p_temp);
return t_list;
}
List *m_findByString(List* p_list, char *temp){
char *p_temp = (char *)malloc(sizeof(char)*(strlen(temp)+1));
strcpy_s(p_temp, strlen(p_temp), temp);
List *t_list = mply_findByValue(p_list, "string", (void *)p_temp);
free(p_temp);
return t_list;
}
List *m_findByPointer(List* p_list, void *temp){
List *t_list = mply_findByValue(p_list, "double", (void *)temp);
return t_list;
}
unsigned long long getIndexByNode(Node *p_node) {
return 0;
}
#endif