diff --git a/CMakeLists.txt b/CMakeLists.txt index 9016caf60a3fa8ccb51a8b35a1c8373d8b5933cc..d0cadfc23205c4a58b0b6e3258b36c4ee00a8be8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,6 +48,7 @@ add_executable(ParserTest util/Stemmer.cpp parser/tests/parserTest.cpp) +add_executable(SharedTableTest shared/SharedHashMapTest.cpp ) add_executable(URLTEST shared/url.h shared/urlTest.cpp) diff --git a/crawler-parser-test b/crawler-parser-test index e57fee527da5971f210dfae7dcc06d26661452a1..f6e68d1aa6b62b614da5b0ab0ddae084aed2c717 100755 Binary files a/crawler-parser-test and b/crawler-parser-test differ diff --git a/makefile b/makefile index 48c2b284b540d8e068b0d9657486380df79e7350..8d2bafb418c9a23c8614806be7639e34fa9cd93a 100644 --- a/makefile +++ b/makefile @@ -175,6 +175,19 @@ URLTEST/fast: $(MAKE) -f CMakeFiles/URLTEST.dir/build.make CMakeFiles/URLTEST.dir/build .PHONY : URLTEST/fast +#============================================================================= +# Target rules for targets named SharedTableTest + +# Build rule for target. +SharedTableTest: cmake_check_build_system + $(MAKE) -f CMakeFiles/Makefile2 SharedTableTest +.PHONY : SharedTableTest + +# fast build rule for target. +SharedTableTest/fast: + $(MAKE) -f CMakeFiles/SharedTableTest.dir/build.make CMakeFiles/SharedTableTest.dir/build +.PHONY : SharedTableTest/fast + #============================================================================= # Target rules for targets named ParserTest @@ -517,6 +530,33 @@ shared/Document.cpp.s: $(MAKE) -f CMakeFiles/crawler-parser-test.dir/build.make CMakeFiles/crawler-parser-test.dir/shared/Document.cpp.s .PHONY : shared/Document.cpp.s +shared/SharedHashMapTest.o: shared/SharedHashMapTest.cpp.o + +.PHONY : shared/SharedHashMapTest.o + +# target to build an object file +shared/SharedHashMapTest.cpp.o: + $(MAKE) -f CMakeFiles/SharedTableTest.dir/build.make CMakeFiles/SharedTableTest.dir/shared/SharedHashMapTest.cpp.o +.PHONY : shared/SharedHashMapTest.cpp.o + +shared/SharedHashMapTest.i: shared/SharedHashMapTest.cpp.i + +.PHONY : shared/SharedHashMapTest.i + +# target to preprocess a source file +shared/SharedHashMapTest.cpp.i: + $(MAKE) -f CMakeFiles/SharedTableTest.dir/build.make CMakeFiles/SharedTableTest.dir/shared/SharedHashMapTest.cpp.i +.PHONY : shared/SharedHashMapTest.cpp.i + +shared/SharedHashMapTest.s: shared/SharedHashMapTest.cpp.s + +.PHONY : shared/SharedHashMapTest.s + +# target to generate assembly for a file +shared/SharedHashMapTest.cpp.s: + $(MAKE) -f CMakeFiles/SharedTableTest.dir/build.make CMakeFiles/SharedTableTest.dir/shared/SharedHashMapTest.cpp.s +.PHONY : shared/SharedHashMapTest.cpp.s + shared/urlTest.o: shared/urlTest.cpp.o .PHONY : shared/urlTest.o @@ -782,6 +822,7 @@ help: @echo "... StringProcessingTest" @echo "... TokenizerTest" @echo "... URLTEST" + @echo "... SharedTableTest" @echo "... ParserTest" @echo "... search-engine" @echo "... crawler-parser-test" @@ -818,6 +859,9 @@ help: @echo "... shared/Document.o" @echo "... shared/Document.i" @echo "... shared/Document.s" + @echo "... shared/SharedHashMapTest.o" + @echo "... shared/SharedHashMapTest.i" + @echo "... shared/SharedHashMapTest.s" @echo "... shared/urlTest.o" @echo "... shared/urlTest.i" @echo "... shared/urlTest.s" diff --git a/shared/SharedHashMap.cpp b/shared/SharedHashMap.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6fa3cd696691a19a1fd5796f41f173e500de821b --- /dev/null +++ b/shared/SharedHashMap.cpp @@ -0,0 +1,40 @@ +// +// Created by Jake Close on 3/18/18. +// + +#include "SharedHashMap.h" + + + +template <class T> +void SharedHashMap::Insert( T key, T value ) + { + pthread_mutex_lock(&m); + + map.insert(key, value); + + pthread_mutex_unlock(&m); + } + +template <class T> +T void SharedHashMap::Find( T key) + + { + pthread_mutex_lock(&m); + + T value = map.find(key); + + + pthread_mutex_unlock(&m); + + return value; + } + +template <class T> +size_t ProducerConsumerQueue<T>::Size() + { + pthread_mutex_lock(&m); + size_t size = map.size(); + pthread_mutex_unlock(&m); + return size; + } \ No newline at end of file diff --git a/shared/SharedHashMap.h b/shared/SharedHashMap.h new file mode 100644 index 0000000000000000000000000000000000000000..03246b6fcab4a07e468a76af263b56eaf695627c --- /dev/null +++ b/shared/SharedHashMap.h @@ -0,0 +1,32 @@ +// +// Created by Jake Close on 3/18/18. +// + +#ifndef EECS398_SEARCH_SHAREDHASHMAP_H +#define EECS398_SEARCH_SHAREDHASHMAP_H +#include <unordered_map> +#include <pthread.h> + + +template <class T> class SharedHashMap { + private: + std::unordered_map<T, T> map; + pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; + pthread_cond_t consumer_cv = PTHREAD_COND_INITIALIZER; + + public: + + SharedHashMap() {} + + + void Insert(T key, T value); + T Find(T Key); + size_t Size(); + + + }; + +//Necessary because this class is templated +#include"SharedHashMap.cpp" + +#endif diff --git a/shared/SharedHashMapTest.cpp b/shared/SharedHashMapTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f2edc1653cce6ebd739519f4d2dfe6210645a1e9 --- /dev/null +++ b/shared/SharedHashMapTest.cpp @@ -0,0 +1,29 @@ +// +// Created by Jake Close on 3/18/18. +// + +#include "SharedHashMap.h" + +#include <iostream> +#include <stdlib.h> +#include <pthread.h> +#include <cassert> +using namespace std; + +pthread_mutex_t cout_lock = PTHREAD_MUTEX_INITIALIZER; + +int main(int argc, const char * argv[]) + { + SharedHashMap < int, int > *sharedTable = new(SharedHashMap < int, int >); + + pthread_t t; + + sharedTable->Insert( 5, 4 ); + int v = sharedTable->Find( 5 ); + assert( v == 4 ); + + + delete sharedTable; + + return 0; + }