packages feed

data-structure-inferrer-1.0: README.md

# About the project
This project is meant to be a compiler feature/wrapper that analyzes your code and chooses the best data structure depending on your source code. It analyzes the functions used on a wildcard data structure and chooses the type of structure that minimizes the time complexity. It will support C language and hopefully some other languages too.

# Usage

	alistra@bialobrewy data-structure-inferrer % ./dsinf -h
	dsinf
	  -o file    --output=file    Output file
	  -r         --recommend      Give recommendations about the data structure in the supplied code (default)
	  -a         --advice         Give advice about the data structure in the supplied code
	  -c         --compile        Compile the code with recommended structure linked
	  -i         --inline         Inline the code implementing the recommended structure in the supplied code
	  -v         --verbose        Enable verbose messages
	  -h         --help           Show help


# Example (not yet working)

For the following C file:

	//example.c
	typedef int dstype;
	#include <ds.h>
	int main()
	{
		ds d1;
		dselem e;

		for(int i = 0; i < 20; i++)
		{
			insert_d(d1, i);
			printf("%d\n", search_d(d1, i));
			update_d(d1, i, 2*i);
		}

		printf("%d\n", max_d(d1));
	}

you'll invoke:

	dsinf -c example.c

and it will automatically compile the file and link the matching library with data structure implementation (here red-black trees with max element cache).

# For now

For now it works as a standalone code analyzer for a toy language that prints the most appropriate structure.

## Examples

You can run tests by running runIlTests from the Tests.hs file. These tests (Il/tests subdirectory) are source code in a simple imperative language. The analyzer infers the best data structure for operations used in the test program.

	*Tests> runIlTests
	Test File Il/tests/1.il
	The recommended structure for ds is:
	Hashtable
	Test File Il/tests/2.il
	The recommended structure for ds is:
	Red-Black Trees with extreme element caching
	The recommended structure for ds2 is:
	Red-Black Trees with extreme element caching
	Test File Il/tests/3.il
	The recommended structure for ds is:
	Red-Black Trees with extreme element caching
	The recommended structure for ds2 is:
	Linked List with extreme element caching

## Low Level

For now you can get the best structures depending on operations used in your program (if you manually put it in the invocation):

	*AllStructures> recommendAllDs [InsertVal, ExtremalVal]
	[Fibonacci Heap,Binomial Heap]
	*AllStructures> recommendAllDs [InsertVal, FindByVal ]
	[Hashtable]
	*AllStructures> recommendAllDs [InsertVal, FindByVal, ExtremalVal]
	[Red-Black Trees]

There's an advice mode which is formatted more nicely:

	*Advice> printAdvice [InsertVal, UpdateByVal, DeleteExtremalVal ]
	Currently, the recommended data structure is: Red-Black Trees
	You could use Hashtable, if you removed the following operations:
	* DeleteExtremalVal