Menu

Tree [de27e4] master /
 History

HTTPS access


File Date Author Commit
 Audience_Template_Utils 2018-02-10 Krishna Addepalli Krishna Addepalli [b53725] Adding code related to chapter "Optimizing Code...
 BinaryTree 2019-04-11 Krishna Addepalli Krishna Addepalli [740cb6] Fixing the std::optional::value failure for Mac
 Design_Patterns 2019-01-05 Krishna Addepalli Krishna Addepalli [4c8315] Work in progress to fix the compiler errors and...
 Exploring_CPP14 2019-05-23 Krishna Addepalli Krishna Addepalli [de27e4] 1. Use find_package in finding boost libraries,...
 Learning_Programming 2019-05-23 Krishna Addepalli Krishna Addepalli [de27e4] 1. Use find_package in finding boost libraries,...
 LinkedList 2019-01-05 Krishna Addepalli Krishna Addepalli [4c8315] Work in progress to fix the compiler errors and...
 Modern_CPP 2019-01-06 Krishna Addepalli Krishna Addepalli [918a69] Now the build works with support from VS CMake ...
 Performance_Experiments 2019-01-05 Krishna Addepalli Krishna Addepalli [4c8315] Work in progress to fix the compiler errors and...
 Recursion_Problems 2019-01-09 Krishna Addepalli Krishna Addepalli [6a6011] 1. Simplified the function for deleting a list.
 async_task_handler 2017-12-07 Krishna Addepalli Krishna Addepalli [060e7f] 1. Simplified the toplevel CMakeLists.txt file ...
 cmake_files 2019-05-23 Krishna Addepalli Krishna Addepalli [de27e4] 1. Use find_package in finding boost libraries,...
 notification_manager 2017-12-07 Krishna Addepalli Krishna Addepalli [060e7f] 1. Simplified the toplevel CMakeLists.txt file ...
 plugin_manager 2017-12-07 Krishna Addepalli Krishna Addepalli [060e7f] 1. Simplified the toplevel CMakeLists.txt file ...
 .gitignore 2018-09-11 Krishna Addepalli Krishna Addepalli [3dfbee] 1. Added EnvironmentVariableExplorer.cpp/h for ...
 CMakeLists.txt 2019-01-05 Krishna Addepalli Krishna Addepalli [4c8315] Work in progress to fix the compiler errors and...
 CMakeSettings.json 2019-01-06 Krishna Addepalli Krishna Addepalli [918a69] Now the build works with support from VS CMake ...
 Copyright.txt 2017-11-14 Krishna Addepalli Krishna Addepalli [7e60d9] Added CPack command which will generate an inst...
 ReadMe.md 2019-01-12 Krishna Addepalli Krishna Addepalli [6eb6b8] Finished modernizing the BinaryTree module.
 SAP_Scala_Manager_Job_Questions.txt 2017-05-29 Krishna Krishna [bb9c24] Making the entire project Cmake compatible.

Read Me

This project contains all the explorations done in C++ language at work. It is organized into following projects:
1. Binary Tree - Contains the implementations of binary tree algorithms
2. Linked List - Contains the implementations for some of the common problems of Linked Lists.
3. Design Patterns - Contains the implementations for commonly known Design Patterns
4. Learning Programming - Contains the explorations of various contructs of C++ language, include C++11 features, Template Metaprogramming concepts.
5. Exploring C++14 - Explorations of features of C++ 14, along with functional programming concepts like Continuation Passing Style etc.
6. Performance Experiments - Contains the benchmarking code for seemingly simple code, and tries to obtain the average time taken by a function.

Prerequisites:

  1. C++14 or later compiler. For example on windows, requires MSVC 2017 or later for successful compilation.
  2. Boost libraries >= 1.59.
  3. Poco libraries >= 1.7.8
  4. CMake >= 3.9
  5. NSIS: Nullsoft Scriptable Install System >= 3.02.1 if you need to create packages for Windows.
  6. If on Windows, then install VS 2017 with Linux Development package to enable cross platform development from Windows itself.

Steps for setup

  1. Make sure that cmake is installed and added to path.
    For eg. if you type "cmake" at command prompt it should print details and quit.
  2. Define Environment variable "POCO" and have it pointed to the path where it is installed.
    For building Poco on windows, refer to the section below.
  3. Define Environment variables "BOOST_ROOT", "BOOST_INCLUDEDIR", "BOOST_LIBRARYDIR" as follows:
    For example, assume that boost libraries are extracted to the following folder: C:\local\boost_1_64_0.
    Then define
    BOOST_ROOT=C:/local/boost_1_64_0
    BOOST_INCLUDEDIR=${BOOST_ROOT}/boost/ or C:/local/boost_1_64_0/boost/
    BOOST_LIBRARYDIR=${BOOST_ROOT}/lib64-msvc-14.1 or C:/local/boost_1_64_0/lib64-msvc-14.1/

    Please note that "lib64-msvc-14.1" folder could change based on 32bit/64bit libraries and also the msvc compiler used to compile the boost libraries.
    Also, boost_1_64_0 could also change as per the version of the boost that has been downloaded.
    4. It is recommended to setup VS to work with CMake projects as described here: https://docs.microsoft.com/en-us/cpp/linux/cmake-linux-project?view=vs-2017

Steps for Linux setup with VS remote debugging enabled

  1. Install VMware/VirtualBox, and then install a linux distro of your choice, although the steps mentioned here have been tested on Ubuntu.
  2. Follow the instructions from this page: https://blogs.msdn.microsoft.com/vcblog/2018/11/26/using-visual-studio-for-cross-platform-c-development-targeting-windows-and-linux/
  3. To enable connection from VS, follow the steps from this page: https://serverfault.com/questions/225155/virtualbox-how-to-set-up-networking-so-both-host-and-guest-can-access-internet
  4. Build and Run from CMake menu item in VS toolbar.

Steps for building Poco:

  1. Goto this site to download the poco sources: https://pocoproject.org/
  2. Download the sources for Basic Edition, since there are no other dependent libraries needed to build.
  3. Extract to a suitable folder, and then run cmake with either of the following command for building with MSVC 2017(depending on the debug/release builds, although it is recommended to build both):
    cmake -G "Visual Studio 15" -DENABLE_MONGODB=OFF -DENABLE_ZIP=OFF -DENABLE_PAGECOMPILER=OFF -DENABLE_PAGECOMPILER_FILE2PAGE=OFF -DENABLE_DATA=OFF <path to="" sources="">
    or
    cmake -G "Visual Studio 15" -DCMAKE_BUILD_TYPE="Debug" -DENABLE_MONGODB=OFF -DENABLE_ZIP=OFF -DENABLE_PAGECOMPILER=OFF -DENABLE_PAGECOMPILER_FILE2PAGE=OFF -DENABLE_DATA=OFF <path to="" sources=""></path></path>
  4. Open the corresponding VS project and hit build.
  5. Once the build is complete, run the "INSTALL" project, and the poco libraries should be copied to C:\Program Files (x86)\Poco.
    Please note that if you did a 64 bit build, then the location would change to C:\Program Files\Poco
  6. Define an environment variable POCO which points to the path where the binaries are copied.

Tasks TODO

  1. Create a setup script that will download all the prerequisite software, installs it and finally generates project files using CMake. In short, make it trivial to setup project.
  2. Implement Thread pipeline model.
  3. Add recently attended interview questions from Amazon, National Instruments etc into the projects.
  4. Implement Interval Trees and the relevant question from Amazon to solve.
  5. Rename BinaryTrees module to Trees to include all kinds of Tree implementations.
  6. Expand the Trees module to include implementations for the following:
  7. Interval Trees.
  8. Redblack Trees
  9. AVL Trees.
  10. B-Trees
  11. B+ Trees
  12. Suffix Trees
  13. Tries
  14. Finish all the 18 problems in the Linked List module.
  15. Create a wheel file for the python algorithms project, which will allow to import all the algorithm modules.
  16. Figure out a better way to maintain the TODO list if possible.
  17. Simplify CMake build files.
  18. Download and configure Boost, Poco, etc for Linux and Mac.

Tasks Done

  1. Remove unused files from the code base - from Codeland_Solution folder.
  2. Figure out parameter passing in CMake functions and pass only those libraries required to be copied for Qt projects.
  3. Make a CPack installer for windows covering following:
    • Learning_Programming.exe
    • Napa_Solution.exe
    • Client.exe
    • Server.exe
  4. Fix runtime issues in Codeland Solution.
  5. Add all the ui files into its own folder and resource files into their own folders.
  6. Moved all the Interview Questions Solutions files into its own project.
  7. Made the project truly cross-platform (Windows, Linux and Mac) by fixing all the compiler errors and CMake issues.
  8. Since VS 2017 and later supports CMake projects, "Add all the CMakelists files, License file and other text files to the project" is taken care of.
  9. Finished modernizing BinaryTree module. Now BinTree is just a thin wrapper, and the core BinaryTree functions are implemented in BinaryTreeProblems.

Project Members:

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.