# 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 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