Skip to content
Snippets Groups Projects
Select Git revision
  • e48924b57cd3dd2afba7122942909b21f332715f
  • master default protected
  • 2018ws
  • 2017ws
  • 2016ws
5 results

hello-4.c

Blame
  • Forked from Peter Gerwinski / hp
    Source project has a limited visibility.
    fifo.c 1.72 KiB
    #include <stdio.h>
    #include <stdlib.h>
    
    #define FIFO_SIZE 42
    
    typedef struct
    {
    	int x, y;
    }
    pair;
    
    pair fifo[FIFO_SIZE];
    int fifo_read_pointer = 0;
    int fifo_write_pointer = 0;
    
    void fatal_error (char *msg)
    {
    	fprintf (stderr, "%s\n", msg);
    	exit (1);
    }
    
    void push_pair (int x, int y)
    {
    	if (fifo_write_pointer < 0 || fifo_write_pointer >= FIFO_SIZE)
    		fatal_error ("push_pair: fifo inconsistence");
    	else
    	{
    		printf ("pushing (%d,%d)\n", x, y);
    		fifo[fifo_write_pointer].x = x;
    		fifo[fifo_write_pointer].y = y;
    		fifo_write_pointer++;
    		if (fifo_write_pointer >= FIFO_SIZE)
    			fifo_write_pointer = 0;
    		if (fifo_write_pointer == fifo_read_pointer)
    			fatal_error ("fifo overflow");
        }
    }
    
    pair pop_pair (void)
    {
    	pair nix;
    	if (fifo_read_pointer < 0 || fifo_read_pointer >= FIFO_SIZE)
        {
    		fatal_error ("pop_pair: fifo inconsistence");		
    		return nix;
        }
    	else if (fifo_read_pointer == fifo_write_pointer)
        {
    		fatal_error ("fifo underflow");
    		return nix;
        }
    	else
        {
    		printf ("popping (%d,%d)\n", fifo[fifo_read_pointer].x, fifo[fifo_read_pointer].y);
    		pair value = fifo[fifo_read_pointer];
    		fifo[fifo_read_pointer].x = 0;
    		fifo[fifo_read_pointer].y = 0;
    		fifo_read_pointer++;
    		if (fifo_read_pointer >= FIFO_SIZE)
    			fifo_read_pointer = 0;
    		return value;
        }
    }
    
    void dump_stack (void)
    {
    	int i;
    	printf ("dump_stack:");
    	for (i = 0; i < FIFO_SIZE; i++)
    		printf (" (%d,%d)", fifo[i].x, fifo[i].y);
    	printf ("\n");
    }
    
    int main (void)
    {
    	dump_stack ();
    	push_pair (3, 0);
    	dump_stack ();
    	push_pair (7, 2);
    	dump_stack ();
    	push_pair (23, 23);
    	dump_stack ();
    	pop_pair ();
    	dump_stack ();
    	pop_pair ();
    	dump_stack ();
    	push_pair (42, 137);
    	dump_stack ();
    	pop_pair ();
    	dump_stack ();
    	pop_pair ();
    	dump_stack ();
    	return 0;
    }