Beispiel #1
0
void del(FILE *args, OrthogonalList *list, fpos_t *position) {
    int size;                       /* holds size of next token */

    if (fgetc(args) != ',') {
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
        return;
    }

    /* get last name */
    size = nextsize(args) + 1;      /* get last name size */
    char last[size];                /* last name parameter */
    fgets(last, size, args);        /* get last name parameter */
    if (fgetc(args) != ',') {
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
        return;
    }

    /* get first name */
    size = nextsize(args) + 1;      /* get first name size */
    char first[size];               /* first name parameter */
    fgets(first, size, args);
    if (fgetc(args) != ',') {
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
        return;
    }

    /* get middle initial */
    char middle;                    /* middle initial parameter */
    middle = fgetc(args);
    if (!isalpha(middle)) {
        if (middle != '\n' && middle != EOF)
            advance(args);          /* advance file pointer if not newline */
        middle = ' ';               /* set to space for no middle initial */
    } else {
        advance(args);
    }

    /* print instruction */
    if (middle == ' ')
        printf("D,%s,%s,\n", last, first);
    else
        printf("D,%s,%s,%c\n", last, first, middle);

    int result;                     /* store result of list operation */
    result = remove_node(list, last, first, middle);
    if (result)
        printf("%s\n", describe_orthogonal_list_error(result));
}
Beispiel #2
0
int main(int ac, char** av)
{
	int		n = 500000;		/* mallocs in main. */
	int		n0;
	list_t*		head;
	double		begin;
	double		end;
	double		t = 2.5e-9;

	if (ac > 1)
		n = atoi(av[1]);

	n0 = n;

	head = new_list(NULL);

	printf("check starts\n");

	begin = sec();

	while (n > 0) {
		add(head, malloc(nextsize()));
		n -= 1;

		if ((n & 1) && !empty(head)) 
			free(take_out_first(head));
	}

	while (!empty(head)) 
		free(take_out_first(head));

	free(head);

	end = sec();

	printf("check is ready\n");
	printf("total = %1.3lf s\n", end-begin);
	printf("m+f   = %1.3g s\n", (end-begin)/(2*n0));
	printf("cy    = %1.3lf s\n", ((end-begin)/(2*n0))/t);

	return 0;
}
Beispiel #3
0
int
main(int argc, char **argv)
{
	int		c;
	uint_t		cursize;
	DIR		*dirp;
	int		i;
	int		j;
	char		name[NAME_MAX + 1];
	struct stat	stb;
	double		stime;

	while ((c = getopt(argc, argv, "a:c:d:f:l:m:n:s:")) != -1) {
		switch (c) {
		case 'a':
			addval = (uint_t)atoi(optarg);
			break;
		case 'c':
			nchars = (uint_t)atoi(optarg);
			break;
		case 'd':
			directory = optarg;
			break;
		case 'f':
			firstsize = (uint_t)atoi(optarg);
			break;
		case 'l':
			lastsize = (uint_t)atoi(optarg);
			break;
		case 'm':
			mulval = atof(optarg);
			break;
		case 'n':
			ndirs = (uint_t)atoi(optarg);
			break;
		case 's':
			stats = (uint_t)atoi(optarg);
			break;
		case '?':
		default:
			usage();
			exit(1);
		}
	}
	if (!addval && !mulval)
		mulval = 2.0;
	else if ((addval && mulval) || mulval < 0.0) {
		usage();
		exit(1);
	}
	if (stats == 0)
		stats = 1;
	if (!directory)
		directory = ".";
	else {
		if (mkdir(directory, 0777) < 0 && errno != EEXIST) {
			perror(directory);
			exit(1);
		}
		if (chdir(directory) < 0) {
			perror(directory);
			exit(1);
		}
	}
	if (firstsize == 0)
		firstsize = DFL_FIRST_SIZE;
	else if (firstsize > MAX_DIR_SIZE)
		firstsize = MAX_DIR_SIZE;
	if (lastsize == 0)
		lastsize = DFL_LAST_SIZE;
	else if (lastsize > MAX_DIR_SIZE)
		lastsize = MAX_DIR_SIZE;
	if (lastsize < firstsize)
		lastsize = firstsize;
	minchars = hexchars(lastsize - 1);
	if (nchars < minchars)
		nchars = minchars;
	else if (nchars >= NAME_MAX + 1)
		nchars = NAME_MAX;
	if (ndirs > MAX_DIR_COUNT)
		ndirs = MAX_DIR_COUNT;
	if (ndirs < MIN_DIR_COUNT)
		ndirs = MIN_DIR_COUNT;
	dirchars = hexchars(ndirs);
	pfxchars = nchars - minchars;
	if (pfxchars)
		memset(&name[dirchars + 1], 'a', pfxchars);
	for (j = 0; j < ndirs; j++) {
		filename(0, j, name);
		name[dirchars] = '\0';
		mkdir(name, 0777);
	}
	for (cursize = firstsize;
	     cursize <= lastsize;
	     cursize = nextsize(cursize)) {
		stime = now();
		for (i = 0; i < cursize; i++) {
			for (j = 0; j < ndirs; j++) {
				filename((i + j) % cursize, j, name);
				close(creat(name, 0666));
			}
		}
		for (i = 0; i < cursize * stats; i++) {
			for (j = 0; j < ndirs; j++) {
				filename((i + j) % cursize, j, name);
				stat(name, &stb);
			}
		}
		for (j = 0; j < ndirs; j++) {
			filename(0, j, name);
			name[dirchars] = '\0';
			dirp = opendir(name);
			while (readdir(dirp))
				continue;
			closedir(dirp);
		}
		for (i = 0; i < cursize; i++) {
			for (j = 0; j < ndirs; j++) {
				filename((i + j) % cursize, j, name);
				unlink(name);
			}
		}
		printf("%d %.3f\n", cursize,
			(now() - stime) * 1.0e3 / (cursize * ndirs));
	}
	for (j = 0; j < ndirs; j++) {
		filename(0, j, name);
		name[dirchars] = '\0';
		rmdir(name);
	}
	return 0;
}
Beispiel #4
0
void query(FILE *args, OrthogonalList *list, fpos_t *position) {

    if (fgetc(args) != ',') {
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
        return;
    }

    int query_id;                   /* type of query */
    int size;                       /* next token size */
    char delim;                     /* holds actual delimiter character */

    if (fscanf(args, "%d", &query_id) != 1) { /* get query type */
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
        return;
    }
    delim = fgetc(args);
    if (delim != ',') {
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
        return;
    }

    if (query_id == QUERY_YEAR) {

        int begin, end;             /* range parameters */

        /* get begin year */
        if (fscanf(args, "%d", &begin) != 1) {
            printinstruction(args, position);
            printf("Invalid instruction format.\n");
            return;
        }

        delim = fgetc(args);
        if (delim != ',') {
            printinstruction(args, position);
            printf("Invalid instruction format.\n");
            return;
        }

        /* get end year */
        if (fscanf(args, "%d", &end) != 1) {
            printinstruction(args, position);
            printf("Invalid instruction format.\n");
            return;
        }

        /* print instruction */
        printf("Q,%d,%d,%d\n", query_id, begin, end);

        if (begin < 0 || end < 0) {
            printf("Invalid arguments: Year parameters must be positive\n");
            return;
        }

        unsigned int result = query_year(list, begin, end); /* call function */
        char *msg;                  /* output string */
        if (result == 1) {
            msg = " student was admitted from ";
        } else {
            msg = " students were admitted from ";
        }

        /* print output*/
        printf("%u%s%d through %d.\n", result, msg, begin, end);
        advance(args);

    } else if (query_id == QUERY_MAJOR) {

        size = nextsize(args) + 1;  /* get size */
        char major[size];           /* query parameter */
        fgets(major, size, args);   /* get parameter */

        /* print instruction */
        printf("Q,%d,%s\n", query_id, major);

        nodeptr result = query_major(list, major);  /* query & store result */

        /* print result */
        printf("The students studying %s are:\n", major);

        if (result == NULL) {
            printf("There are no students studying %s.\n", major);
        } else {
            while (result != NULL) {
                printf("%s, ", result->lastname);
                printf("%s", result->firstname);
                if (result->middle != ' ')
                    printf(", %c\n", result->middle);
                else
                    printf("\n");
                result = result->next_by_major;
            }
        }

        advance(args);

    } else if (query_id == QUERY_HOMETOWN) {

        size = nextsize(args) + 1;  /* get size */
        char hometown[size];        /* query parameter */
        fgets(hometown, size, args);/* get parameter */

        /* print instruction */
        printf("Q,%d,%s\n", query_id, hometown);

        /* make query and store result */
        int year;                   /* last year of graduation */
        nodeptr result = query_hometown(list, hometown, &year);

        /* print result header */
        printf("The student(s) from %s with the latest expected ", hometown);
        printf("year of graduation:\n");

        if (result == NULL) {
            printf("There are no students from %s\n", hometown);
        } else {
            do {
                printf("%s, ", result->lastname);
                printf("%s", result->firstname);
                if (result->middle != ' ')
                    printf(", %c\n", result->middle);
                else
                    printf("\n");
                result = result->next_by_hometown;
            } while (result != NULL && result->graduation_year == year);
        }

        advance(args);

    } else {
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
    }
}
Beispiel #5
0
void ins(FILE *args, OrthogonalList *list, fpos_t *position) {
    int size;                   /* stores length of next token */

    if (fgetc(args) != ',') {
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
        return;
    }

    size = nextsize(args) + 1;  /* get last name length */
    char last[size];            /* last name parameter */
    fgets(last, size, args);    /* get last name */
    if (fgetc(args) != ',') {
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
        return;
    }

    /* get first name */
    size = nextsize(args) + 1;
    char first[size];           /* first name parameter */
    fgets(first, size, args);
    if (fgetc(args) != ',') {
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
        return;
    }

    /* get middle initial */
    size = nextsize(args) + 1;
    char middlename[size],      
         middle;                /* middle initial parameter */
    fgets(middlename, size, args);
    middle = *middlename;
    if (middle == '\0') {        /* if no middle initial store as space */
        middle = ' ';
    }
    if ((!isalpha(middle) && middle != ' ') || fgetc(args) != ',') {
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
        return;
    }    

    /* get major */
    size = nextsize(args) + 1;
    char major[size];           /* major parameter */
    fgets(major, size, args);
    if (fgetc(args) != ',') {
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
        return;
    }

    /* get year admitted */
    size = nextsize(args) + 1;
    char admitted[size];        /* year admitted parameter */
    fgets(admitted, size, args);
    if (fgetc(args) != ',') {
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
        return;
    }

    /* get graduation year */
    int graduates;              /* graduation year parameter */
    fscanf(args, "%d", &graduates);
    if (fgetc(args) != ',') {
        printinstruction(args, position);
        printf("Invalid instruction format.\n");
        return;
    }

    if (atoi(admitted) < 0 || graduates < 0) {
        printinstruction(args, position);
        printf("Years must be positive.\n");
        return;
    }

    /* get hometown */
    size = nextsize(args) + 1;
    char hometown[size];        /* hometown parameter */
    fgets(hometown, size, args);

    /* print instruction */
    if (middle == ' ') {
        printf("I,%s,%s,,%s,%s,%d,", last, first, major, admitted, graduates);
        printf("%s\n", hometown);
    } else {
        printf("I,%s,%s,%c,%s,%s,", last, first, middle, major, admitted);
        printf("%d,%s\n", graduates, hometown);
    }

    int result;                 /* get result of operation */
    result = insert(list, last, first, middle, major, admitted, graduates,
                    hometown);

    if (result) {
        printf("%s\n", describe_orthogonal_list_error(result));
    }

    /* advance file pointer to next line */
    advance(args);
}