#include <xtd/xtd>
class program {
public:
static auto main() -> void {
test_stream_reader_enumerable();
test_reading_file();
}
static void test_stream_reader_enumerable() {
try {
if (line.contains("string to search for")) strings_found.push_back(line);
return;
}
console::write_line(
"Memory Used With Iterator = \t{} kb", (memory_after - memory_before) / 1024);
}
static void test_reading_file() {
try {
while (!sr.end_of_stream())
file_contents.add(sr.read_line());
return;
}
for (auto line : file_contents)
if (line.contains("string to search for")) strings_found.push_back(line);
console::write_line(
"Memory Used Without Iterator = \t{} kb", (memory_after - memory_before) / 1024);
}
class stream_reader_enumerable :
public ienumerable<string> {
private:
string file_path_;
public:
stream_reader_enumerable(const string& file_path) : file_path_ {file_path} {}
};
private:
std::optional<string> current_;
public:
stream_reader_enumerator(const string& file_path) : sr_ {file_path} {}
~stream_reader_enumerator() {sr_.
close();}
const string&
current()
const override {
return current_.value();
}
bool move_next() override {
return current_.has_value();
}
void reset() override {
sr_.
base_stream()->get().seekg(0, std::ios_base::seekdir::beg);
current_.reset();
}
};
};
Exposes the enumerator, which supports a simple iteration over a collection of a specified type.
Definition ienumerable.hpp:36
Supports a simple iteration over a generic collection.
Definition ienumerator.hpp:58
Represents a strongly typed list of objects that can be accessed by index. Provides methods to search...
Definition list.hpp:80
static void write_line()
Writes the current line terminator to the standard output stream using the specified format informati...
The exception that is thrown when the format of an argument does not meet the parameter specification...
Definition invalid_operation_exception.hpp:19
The exception that is thrown when an attempt to access a file that does not exist on disk fails.
Definition file_not_found_exception.hpp:30
static xtd::string get_temp_path() noexcept
Returns the path of the current user's temporary folder.
static xtd::string combine(const xtd::string &path1, const xtd::string &path2)
Combines two path strings.
Implements a xtd::io::text_reader that reads characters from a byte stream.
Definition stream_reader.hpp:28
std::optional< xtd::ref< std::istream > > base_stream() const
Returns the underlying stream.
void close() override
Closes the stream_reader object and the underlying stream, and releases any system resources associat...
bool end_of_stream() const
Gets a value that indicates whether the current stream position is at the end of the stream.
virtual xtd::string read_line()
Reads a line of characters from the current stream and returns the data as a string.
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes....
Definition object.hpp:44
#define startup_(main_method)
Defines the entry point to be called when the application loads. Generally this is set either to the ...
Definition startup.hpp:167
size_t size
Represents a size of any object in bytes.
Definition size.hpp:23
ptr< type_t > new_ptr(args_t &&... args)
The xtd::new_ptr operator creates a xtd::ptr object.
Definition new_ptr.hpp:24
@ current
Specifies the current position within a stream.
Definition seek_origin.hpp:20
The xtd::collections::generic namespace contains interfaces and classes that define generic collectio...
Definition comparer.hpp:16
The xtd::io namespace contains types that allow reading and writing to files and data streams,...
Definition binary_reader.hpp:17
The xtd namespace contains all fundamental classes to access Hardware, Os, System,...
Definition abstract_object.hpp:8
Supports a simple iteration over a generic collection.
Definition enumerator.hpp:38