Skip to content

Commit

Permalink
feat: implement the fourth lab
Browse files Browse the repository at this point in the history
  • Loading branch information
MrKonstantinSh committed Dec 24, 2020
1 parent 4e2c47f commit d322785
Show file tree
Hide file tree
Showing 8 changed files with 465 additions and 0 deletions.
31 changes: 31 additions & 0 deletions Lab_4/Lab_4.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30711.63
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lab_4", "Lab_4\Lab_4.vcxproj", "{2AF82599-EFCF-468C-81C4-8B1135E26614}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{2AF82599-EFCF-468C-81C4-8B1135E26614}.Debug|x64.ActiveCfg = Debug|x64
{2AF82599-EFCF-468C-81C4-8B1135E26614}.Debug|x64.Build.0 = Debug|x64
{2AF82599-EFCF-468C-81C4-8B1135E26614}.Debug|x86.ActiveCfg = Debug|Win32
{2AF82599-EFCF-468C-81C4-8B1135E26614}.Debug|x86.Build.0 = Debug|Win32
{2AF82599-EFCF-468C-81C4-8B1135E26614}.Release|x64.ActiveCfg = Release|x64
{2AF82599-EFCF-468C-81C4-8B1135E26614}.Release|x64.Build.0 = Release|x64
{2AF82599-EFCF-468C-81C4-8B1135E26614}.Release|x86.ActiveCfg = Release|Win32
{2AF82599-EFCF-468C-81C4-8B1135E26614}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0A454C93-4230-4618-9640-AA9FD50C8421}
EndGlobalSection
EndGlobal
145 changes: 145 additions & 0 deletions Lab_4/Lab_4/Lab_4.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <functional>

#include "TaskQueue.h"
#include "TaskExecutor.h"

using namespace std;

constexpr auto PATH_TO_FILE = "D:\\1.txt";
constexpr auto THREAD_COUNT = 10;

vector<string>* vectorOfStrings = new vector<string>();
vector<vector<string>*>* vectorOfParts = new vector<vector<string>*>();

bool getFileContent(string, vector<string>*);
void splitVectors(TaskQueue, int);
void addVector(vector<string>*, TaskQueue);
vector<string> mergeTwoVectors(vector<string>, vector<string>);
vector<string> mergeVectors(void);
void printVectors(vector<string>);

int main()
{
bool isFileContentReceived = getFileContent(PATH_TO_FILE, vectorOfStrings);

if (!isFileContentReceived)
{
cout << "File isn't exist" << endl;
return -1;
}

TaskQueue taskQueue;
TaskExecutor taskExecutor(taskQueue);

int threadsCount = THREAD_COUNT > vectorOfStrings->size()
? vectorOfStrings->size() : THREAD_COUNT;

splitVectors(taskQueue, threadsCount);
taskExecutor.startExecution(threadsCount);

vector<string> sortedVectors = mergeVectors();
printVectors(sortedVectors);

return 0;
}

bool getFileContent(string pathToFile, vector<string>* vectorOfStrings)
{
ifstream file(pathToFile);
string line;

if (!file.good())
return false;

while (getline(file, line))
{
string new_line;
new_line = line + "\n";

if (new_line.size() != 0)
vectorOfStrings->push_back(new_line);
}

return true;
}

void splitVectors(TaskQueue taskQueue, int threadCount)
{
size_t onePartCount = (size_t)floor(((vectorOfStrings->size()) / threadCount));

for (size_t i = 0; i < vectorOfStrings->size(); i += onePartCount)
{
vector<string>* newVector = new vector<string>();
vectorOfParts->push_back(newVector);

for (size_t j = i; j < i + onePartCount; j++)
{
if (j < vectorOfStrings->size())
{
string str = (*vectorOfStrings)[j];
newVector->push_back(str);
}
}

addVector(newVector, taskQueue);
}
}

void addVector(vector<string>* vect, TaskQueue queue)
{
queue.push([vect]() {
std::vector<std::string>* copy = vect;
std::sort(vect->begin(), vect->end());
});
}

vector<string> mergeTwoVectors(vector<string> firstVector, vector<string> secondVector)
{
size_t firstVectorSize = firstVector.size();
size_t secondVectorSize = secondVector.size();

vector<string> resultVector;
resultVector.reserve(firstVectorSize + secondVectorSize);

size_t i = 0;
size_t j = 0;

while (i < firstVectorSize && j < secondVectorSize)
{
if (firstVector[i] <= secondVector[j])
resultVector.push_back(firstVector[i++]);
else
resultVector.push_back(secondVector[j++]);
}

while (i < firstVectorSize)
resultVector.push_back(firstVector[i++]);

while (j < secondVectorSize)
resultVector.push_back(secondVector[j++]);

return resultVector;
}

vector<string> mergeVectors()
{
vector<string> tmpVector;

if (vectorOfParts->size() > 0)
tmpVector = *(*vectorOfParts)[0];

for (size_t i = 1; i < vectorOfParts->size(); i++)
tmpVector = mergeTwoVectors(tmpVector, *(*vectorOfParts)[i]);

return tmpVector;
}

void printVectors(vector<string> vector)
{
for (size_t i = 0; i < vector.size(); i++)
cout << vector[i] << endl;
}
153 changes: 153 additions & 0 deletions Lab_4/Lab_4/Lab_4.vcxproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{2af82599-efcf-468c-81c4-8b1135e26614}</ProjectGuid>
<RootNamespace>Lab4</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="Lab_4.cpp" />
<ClCompile Include="TaskExecutor.cpp" />
<ClCompile Include="TaskQueue.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="TaskExecutor.h" />
<ClInclude Include="TaskQueue.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
36 changes: 36 additions & 0 deletions Lab_4/Lab_4/Lab_4.vcxproj.filters
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Lab_4.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TaskQueue.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="TaskExecutor.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="TaskQueue.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="TaskExecutor.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>
Loading

0 comments on commit d322785

Please sign in to comment.