[SOLVED] OOP345-Workshop 2 Move and Copy Semantics

30.99 $

Category:
Click Category Button to View Your Next Assignment | Homework

You will receive the following solution file(s) instantly after successful payment:

zip file icon WS02-kxiqgv.zip (6364.7 KB)
Assignment Instructions Updated Recently? Submit Below and we will provide new Solution!
Submit New Instructions
🔒 Securely Powered by:
Secure Checkout
5/5 - (1 vote)

In this workshop, you work with a large dynamically allocated array of C++ Standard Library strings and compare the performance of copy and move operations on that collection.

## *In-Lab*

This workshop consists of three modules:
– `w2` (supplied)
– `TimedEvents`
– `Text`

Enclose all your source code within the `sdds` namespace and include the necessary guards in each header file.

### `w2` Module (supplied)

**Do not modify this module!**  Look at the code and make sure you understand it.

### `TimedEvents` Module

Design and code a class named `TimedEvents` that manages a **statically** allocated array of record objects.  Your class predefines the maximum number of record objects at 7. The **instance variables** for your class should include:
– the number of records currently stored
– the start time for the current event (an object of type `std::chrono::steady_clock::time_point`; see documentation [here](https://en.cppreference.com/w/cpp/chrono/time_point))
– the end time for the current event (an object of type `std::chrono::steady_clock::time_point`)
– an array of records of anonymous structure type (the structure has no name). The structure should contain the following fields:
– a string with the event name.
– a string with the predefined units of time
– the duration of the recorded event (an object of type `std::chrono::steady_clock::duration`; see documentation [here](https://en.cppreference.com/w/cpp/chrono/duration))

Your class includes the following member functions:
– a default constructor
– `startClock()`: a modifier that starts the timer for an event
– `stopClock()`: a modifier that stops the timer for an event
– `recordEvent()`: a modifier that receives the address of a C-style null terminated string that holds the name of the event.  This function will update the next time-record in the array:
– stores the parameter into the name attribute
– stores `”nanoseconds”` as the units of time
– calculates and stores the duration of the event (use `std::chrono::duration_cast<std::chrono::nanoseconds>()`, see documentation [here](https://en.cppreference.com/w/cpp/chrono/duration/duration_cast))
– a **friend insertion operator** that receives a reference to an `std::ostream` object and a `TimedEvents` object. This operator should insert in the first parameter the records from the array in the following format:

“`
Execution Times:
————————–
EVENT_NAME DURATION UNITS
EVENT_NAME DURATION UNITS

————————–
“`

The **name** of the event should be a field of size 20, alligned on the left; the **duration** should be a field of size 12, alligned on the right.

Starting and stopping the timer means getting the current time (use `std::chrono::steady_clock::now()`; see documentation [here](https://en.cppreference.com/w/cpp/chrono/steady_clock/now)).

### `Text` Module

Design and code a class named `Text` that manages a **dynamically** allocated array of `std::string`s. Your class keeps track of the number of strings currently stored and defines the following member functions:
– a no-argument default constructor
– a 1-argument constructor that receives the address of a C-style null terminated string containing the name of a file from which this member function populates the current object. This function
1. reads the file to count the number of records present (the record delimiter should be a single space `’ ‘`)
2. allocates memory for that number records in the array
3. re-reads the file and loads the records into the array.
– a copy constructor
– a copy assignment operator
– a destructor
– `size_t size() const`: a query that returns the number of records stored in the current object.

To review the syntax for reading from a text file using an `std::ifstream` object see the chapter in your notes entitled [Custom File Operators](https://scs.senecac.on.ca/~BTP200/pages/content/files.html).

### Sample Output

When the program is started with the command:
“`
w2.exe gutenberg_shakespeare
“`
the output should look like:
“`
Command Line:
————————–
1: w2.exe
2: gutenberg_shakespeare
————————–

0-arg Constructor – a.size =       0 records
1-arg Constructor – b.size = 1293934 records
Copy Constructor  – c.size = 1293934 records
Copy Assignment   – a.size = 1293934 records

————————–
Execution Times:
————————–
0-arg Constructor           790 nanoseconds
1-arg Constructor    4377977955 nanoseconds
Copy Constructor     1976590065 nanoseconds
Copy Assignment      2004531426 nanoseconds
Destructor           3478640044 nanoseconds
————————–
“`

**Note:** The execution times will be different every time you run the program! Everything else should match.

## *At-Home*

For this part of the workshop, upgrade the `Text` class to include a **move constructor** and a **move assignment operator**.  No other modules need to be changed.

### Sample Output

When the program is started with the command:
“`
w2.exe gutenberg_shakespeare
“`
the output should look like:
“`
Command Line:
————————–
1: w2.exe
2: gutenberg_shakespeare
————————–

0-arg Constructor – a.size =       0 records
1-arg Constructor – b.size = 1293934 records
Copy Constructor  – c.size = 1293934 records
Copy Assignment   – a.size = 1293934 records
Move Constructor  – d.size = 1293934 records
Move Assignment   – a.size = 1293934 records

————————–
Execution Times:
————————–
0-arg Constructor           790 nanoseconds
1-arg Constructor    4010433846 nanoseconds
Copy Constructor     2002725409 nanoseconds
Copy Assignment      1926967415 nanoseconds
Move Constructor            790 nanoseconds
Move Assignment             394 nanoseconds
Destructor           3538222832 nanoseconds

  • WS02-kxiqgv.zip