xtd 0.2.0
Loading...
Searching...
No Matches
xtd::collections::generic::ienumerable< type_t > Class Template Referenceabstract
Inheritance diagram for xtd::collections::generic::ienumerable< type_t >:
xtd::interface xtd::collections::generic::ienumerable_abstract xtd::collections::generic::extensions::enumerable_iterators< type_t, xtd::collections::generic::ienumerable< type_t > > xtd::collections::generic::extensions::enumerable< ienumerable< type_t >, type_t > xtd::basic_string< char > xtd::basic_string< xtd::char16 > xtd::basic_string< xtd::char32 > xtd::basic_string< xtd::char8 > xtd::basic_string< xtd::wchar > xtd::collections::generic::iset< type_t > xtd::collections::generic::hash_set< type_t, hasher_t, equator_t, allocator_t >

Definition

template<class type_t>
class xtd::collections::generic::ienumerable< type_t >

Exposes the enumerator, which supports a simple iteration over a collection of a specified type.

Definition
template<class type_t>
friend class ienumerable
Exposes an enumerator, which supports a simple iteration over a non-generic collection.
Definition ienumerable_abstract.hpp:38
#define interface_
This keyword is use to represent an interface.
Definition interface.hpp:58
Header
#include <xtd/collections/generic/ienumerable>
Namespace
xtd::collections::generic
Library
xtd.core
Examples
The following example demonstrates how to implement the xtd::collections::generic::ienumerable <type_t> interface. When you implement xtd::collections::generic::ienumerable <type_t>, you must also implement xtd::collections::generic::ienumerator <type_t>.
#include <xtd/xtd>
class program {
public:
static auto main() -> void {
test_stream_reader_enumerable();
test_reading_file();
}
static void test_stream_reader_enumerable() {
// Check the memory before the iterator is used.
auto strings_found = list<string> {};
// Open a file with the stream_reader_enumerable and check for a string.
try {
for (auto line : stream_reader_enumerable {path::combine(path::get_temp_path(), "temp_file.txt")})
if (line.contains("string to search for")) strings_found.add(line);
console::write_line("Found: {}", strings_found.count());
} catch (const file_not_found_exception&) {
console::write_line("This example requires a file named {}.", path::combine(path::get_temp_path(), "temp_file.txt"));
return;
}
// Check the memory after the iterator and output it to the console.
auto memory_after = memory_information::get_used_process_memory();
console::write_line("Memory Used With Iterator = \t{} kb", (memory_after - memory_before) / 1024);
}
static void test_reading_file() {
size memory_before = memory_information::get_used_process_memory();
auto file_contents = list<string> {};
try {
auto sr = stream_reader {path::combine(path::get_temp_path(), "temp_file.txt")};
// Add the file contents to a generic list of strings.
while (!sr.end_of_stream())
file_contents.add(sr.read_line());
sr.close();
} catch (const file_not_found_exception&) {
console::write_line("This example requires a file named {}.", path::combine(path::get_temp_path(), "temp_file.txt"));
return;
}
// Check for the string.
auto strings_found = list<string> {};
for (auto line : file_contents)
if (line.contains("string to search for")) strings_found.add(line);
console::write_line("Found: {}", strings_found.count());
// Check the memory after when the iterator is not used, and output it to the console.
auto memory_after = memory_information::get_used_process_memory();
console::write_line("Memory Used Without Iterator = \t{} kb", (memory_after - memory_before) / 1024);
}
// you must also implement xtd::collections::generic::ienumerable <type_t> and xtd::collections::generic::ienumerator <type_t>
class stream_reader_enumerable : public ienumerable<string> {
private:
string file_path_;
public:
stream_reader_enumerable(const string& file_path) : file_path_ {file_path} {}
// Must implement get_enumerator, which returns a new stream_reader_enumerator.
enumerator<string> get_enumerator() const override {return {new_ptr<stream_reader_enumerator>(file_path_)};}
};
// When you implement xtd::collections::generic::ienumerable <type_t>, you must also implement xtd::collections::generic::ienumerator <type_t>, which will walk through the contents of the file one line at a time.
class stream_reader_enumerator : public object, public ienumerator<string> {
private:
stream_reader sr_;
std::optional<string> current_;
public:
stream_reader_enumerator(const string& file_path) : sr_ {file_path} {}
~stream_reader_enumerator() {sr_.close();}
// Implement current, move_next and reset, which are required by ienumerator.
const string& current() const override {
if (!current_.has_value()) throw invalid_operation_exception {};
return current_.value();
}
bool move_next() override {
if (sr_.end_of_stream()) current_.reset();
else current_ = sr_.read_line();
return current_.has_value();
}
void reset() override {
sr_.base_stream()->get().seekg(0, std::ios_base::beg);
current_.reset();
}
};
};
startup_(program::main);
// This code produces the following output :
//
// Found: 2
// Memory Used With Iterator = 0 kb
// ---
// Found: 2
// Memory Used Without Iterator = 64 kb
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...
static xtd::size get_used_process_memory() noexcept
Gets the used physical memory in bytes.
generic::ienumerator< xtd::any_object > ienumerator
Supports a simple iteration over a non-generic collection.
Definition ienumerator.hpp:38
generic::ienumerable< xtd::any_object > ienumerable
Exposes an enumerator, which supports a simple iteration over a non-generic collection.
Definition ienumerable.hpp:32
#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:168
size_t size
Represents a size of any object in bytes.
Definition size.hpp:23
@ current
Specifies the current position within a stream.
Definition seek_origin.hpp:20
Remarks
xtd::collections::generic::ienumerable <type_t> is the base interface for collections in the xtd::collections::generic namespace such as xtd::collections::generic::list <type_t>, xtd::collections::generic::dictionary <key_t, value_t>, and xtd::collections::generic::stack <type_t> and other generic collections such as xtd::collections::object_model::observable_collection <type_t> and xtd::collections::concurent::concurrent_stack <type_t>. Collections that implement xtd::collections::generic::ienumerable <type_t> can be enumerated by using the for each statement.
For the non-generic version of this interface, see xtd::collections::ienumerable.
xtd::collections::generic::ienumerable <type_t> contains a single method that you must implement when implementing this interface; xtd::collections::generic::ienumerable::get_enumerator, which returns an xtd::collections::generic::enumerator <type_t> object. The returned xtd::collections::generic::enumerator <type_t> provides the ability to iterate through the collection by exposing a xtd::collections::generic::enumerator::current property.

Public Aliases

using value_type
 Represents the xtd::collections::generic::ienumerable value type.
 
using iterator
 Represents the iterator of xtd::collections::generic::ienumerable value type.
 
using const_iterator
 Represents the const iterator of xtd::collections::generic::ienumerable value type.
 

Public Methods

virtual auto get_enumerator () const -> xtd::collections::generic::enumerator< type_t >=0
 Returns an enumerator that iterates through a collection.
 

Additional Inherited Members

using iterator
 Represents the iterator of enumerable value type.
 
using const_iterator
 Represents the const iterator of enumerable value type.
 
using enumerable_type
 Represents the ienumerable enumerable type.
 
using source_type
 Represents the ienumerable source type.
 
using ienumerable
 Represents the ienumerable value type.
 
using list
 Represents the list value type.
 
virtual auto begin () const -> const_iterator
 Returns an iterator to the first element of the enumerable.
 
virtual auto begin () -> iterator
 Returns an iterator to the first element of the enumerable.
 
virtual auto cbegin () const -> const_iterator
 Returns an iterator to the first element of the enumerable.
 
virtual auto cend () const -> const_iterator
 Returns an iterator to the element following the last element of the enumerable.
 
virtual auto end () const -> const_iterator
 Returns an iterator to the element following the last element of the enumerable.
 
virtual auto end () -> iterator
 Returns an iterator to the element following the last element of the enumerable.
 
auto aggregate (const std::function< type_t(const type_t &, const type_t &)> &func) const -> type_t
 Applies an accumulator function over a sequence.
 
auto aggregate (const type_t &seed, const std::function< type_t(const type_t &, const type_t &)> &func) const -> type_t
 Applies an accumulator function over a sequence. The specified seed value is used as the initial accumulator value.
 
auto aggregate (const accumulate_t &seed, const std::function< accumulate_t(const accumulate_t &, const type_t &)> &func) const -> accumulate_t
 Applies an accumulator function over a sequence. The specified seed value is used as the initial accumulator value.
 
auto aggregate (const type_t &seed, const std::function< type_t(const type_t &, const type_t &)> &func, const std::function< type_t(const type_t &)> &result_selector) const -> type_t
 Applies an accumulator function over a sequence. The specified seed value is used as the initial accumulator value, and the specified function is used to select the result value.
 
auto aggregate (const accumulate_t &seed, const std::function< accumulate_t(const accumulate_t &, const type_t &)> &func, const std::function< result_t(const accumulate_t &)> &result_selector) const -> result_t
 Applies an accumulator function over a sequence. The specified seed value is used as the initial accumulator value, and the specified function is used to select the result value.
 
auto all (const std::function< bool(const type_t &)> &predicate) const -> bool
 Determines whether all elements of a sequence satisfy a condition.
 
auto any () const noexcept -> bool
 Determines whether a sequence contains any elements.
 
auto any (const std::function< bool(const type_t &)> &predicate) const -> bool
 Determines whether any element of a sequence satisfies a condition.
 
auto append (const type_t &element) const noexcept
 Appends a value to the end of the sequence.
 
auto as_enumerable () const noexcept
 Returns the input typed as xtd::collections::generic::ienumerable <type_t>.
 
auto average () const noexcept
 Computes the average of a sequence of source_t values.
 
auto cast () const noexcept
 Casts the elements of an xtd::collections::generic::ienumerable to the specified type.
 
auto chunk (size_t size) const
 Splits the elements of a sequence into chunks of size at most size.
 
auto concat (const ienumerable< type_t > &second) const noexcept
 Concatenates two sequences.
 
auto contains (const type_t &value) const noexcept -> bool
 Determines whether a sequence contains a specified element by using the default equality comparer.
 
auto contains (const type_t &value, const xtd::collections::generic::iequality_comparer< type_t > &comparer) const noexcept -> bool
 Determines whether a sequence contains a specified element by using a specified equality comparer.
 
auto count () const noexcept -> xtd::size
 Returns the number of elements in current sequence.
 
auto count (const std::function< bool(const type_t &)> &predicate) const noexcept -> xtd::size
 Returns a number that represents how many elements in the specified sequence satisfy a condition.
 
auto count (const type_t &value) const noexcept -> xtd::size
 Returns the number of elements with the specified value.
 
auto count_by (const std::function< key_t(const type_t &)> &key_selector) const noexcept
 Returns the count of elements in the current sequence grouped by key.
 
auto count_by (const std::function< key_t(const type_t &)> &key_selector, const iequality_comparer< key_t > &key_comparer) const noexcept
 Returns the count of elements in the current sequence grouped by key.
 
auto default_if_empty () const noexcept
 Returns the elements of the specified sequence or the type parameter's default value in a singleton collection if the current sequence is empty.
 
auto default_if_empty (const type_t &default_value) const noexcept
 Returns the elements of the specified sequence or the specified value in a singleton collection if the current sequence is empty.
 
auto distinct () const noexcept
 Returns distinct elements from a sequence by using the default equality comparer to compare values.
 
auto distinct (const xtd::collections::generic::iequality_comparer< type_t > &comparer) const noexcept
 Returns distinct elements from a sequence by using a specified xtd::collections::generic::iequality_comparer <type_t> to compare values.
 
auto first_or_default (const std::function< bool(const type_t &)> &predicate, const type_t &default_value) const noexcept -> type_t
 Returns the first element of the sequence that satisfies a condition, or a specified default value if no such element is found.
 
auto first_or_default (const std::function< bool(const type_t &)> &predicate) const noexcept -> type_t
 Returns the first element of the sequence that satisfies a condition or a default value if no such element is found.
 
auto first_or_default (const type_t default_value) const noexcept -> type_t
 Returns the first element of the sequence that satisfies a condition or a default value if no such element is found.
 
auto first_or_default () const noexcept -> type_t
 Returns the first element of the sequence that satisfies a condition or a default value if no such element is found.
 
auto order ()
 Sorts the elements of a sequence in ascending order.
 
auto order (const xtd::collections::generic::icomparer< type_t > &comparer)
 Sorts the elements of a sequence in ascending order.
 
auto order_by (const std::function< type_t(const type_t &)> &key_selector) const
 Sorts the elements of a sequence in ascending order according to a key.
 
auto order_by (const std::function< key_t(const type_t &)> &key_selector) const
 Sorts the elements of a sequence in ascending order according to a key.
 
auto order_by_descending (const std::function< key_t(const type_t &)> &key_selector) const
 Sorts the elements of a sequence in descending order according to a key.
 
auto order_by_descending (const std::function< type_t(const type_t &)> &key_selector) const
 Sorts the elements of a sequence in descending order according to a key.
 
auto select (const std::function< result_t(const type_t &)> &selector) const
 Projects each element of a sequence into a new form.
 
auto select (const std::function< type_t(const type_t &)> &selector) const
 Projects each element of a sequence into a new form.
 
auto select (const std::function< result_t(const type_t &, size_t index)> &selector) const
 Projects each element of a sequence into a new form by incorporating the element's index.
 
auto select (const std::function< type_t(const type_t &, size_t index)> &selector) const
 Projects each element of a sequence into a new form by incorporating the element's index.
 
auto to_array () const noexcept -> xtd::array< type_t >
 Creates a xtd::array <type_t> from an xtd::collections::generic::ienumerable <type_t>.
 
auto to_list () const noexcept -> list< type_t >
 Creates a xtd::collections::generic::list <type_t> from an xtd::collections::generic::ienumerable <type_t>.
 
auto where (const std::function< bool(const type_t &)> &predicate) const
 Filters a sequence of values based on a predicate.
 
auto where (const std::function< bool(const type_t &, size_t)> &predicate) const
 Filters a sequence of values based on a predicate. Each element's index is used in the logic of the predicate function.
 
static auto to_const_iterator (typename source_collection_t::const_iterator &value, const source_collection_t &source_collection, const target_collection_t &target_collection) noexcept -> typename target_collection_t::const_iterator
 Converts source iterator to target iterator.
 
static auto to_const_iterator (typename source_collection_t::const_iterator &value, source_collection_t &source_collection, target_collection_t &target_collection) noexcept -> typename target_collection_t::const_iterator
 Converts source iterator to target iterator.
 
static auto to_iterator (typename source_collection_t::const_iterator &value, const source_collection_t &source_collection, const target_collection_t &target_collection) noexcept -> typename target_collection_t::const_iterator
 Converts source iterator to target iterator.
 
static auto to_iterator (typename source_collection_t::iterator &value, const source_collection_t &source_collection, const target_collection_t &target_collection) noexcept -> typename target_collection_t::iterator
 Converts source iterator to target iterator.
 
static auto to_iterator (typename source_collection_t::const_iterator &value, source_collection_t &source_collection, target_collection_t &target_collection) noexcept -> typename target_collection_t::const_iterator
 Converts source iterator to target iterator.
 
static auto to_iterator (typename source_collection_t::iterator &value, source_collection_t &source_collection, target_collection_t &target_collection) noexcept -> typename target_collection_t::iterator
 Converts source iterator to target iterator.
 

Member Typedef Documentation

◆ value_type

template<class type_t>
using xtd::collections::generic::ienumerable< type_t >::value_type

Represents the xtd::collections::generic::ienumerable value type.

◆ iterator

template<class type_t>
using xtd::collections::generic::ienumerable< type_t >::iterator

Represents the iterator of xtd::collections::generic::ienumerable value type.

◆ const_iterator

template<class type_t>
using xtd::collections::generic::ienumerable< type_t >::const_iterator

Represents the const iterator of xtd::collections::generic::ienumerable value type.

Member Function Documentation

◆ get_enumerator()


The documentation for this class was generated from the following file: