26 template<
typename TYPE>
33 enum class opts{AND = 1, OR = 0, NOT = 2, LEFT_BRACKET = 3, RIGHT_BRACKET = 4};
156 template <
typename TYPE>
260 template <
typename TYPE>
263 template <
typename TYPE>
266 this->stream.pushBegin(nullFilter);
267 this->stream.pushEnd(nullFilter);
268 this->ops.pushBegin(opts::LEFT_BRACKET);
269 this->ops.pushEnd(opts::RIGHT_BRACKET);
272 template <
typename TYPE>
275 this->stream.pushEnd(nullFilter);
276 this->ops.pushEnd(opts::AND);
279 template <
typename TYPE>
282 this->stream.pushEnd(nullFilter);
283 this->ops.pushEnd(opts::OR);
286 template <
typename TYPE>
289 this->stream.pushBegin(nullFilter);
290 this->ops.pushBegin(opts::NOT);
293 template <
typename TYPE>
299 template <
typename TYPE>
304 this->stream.pushEnd(
filter);
306 for (
auto&
op:
fs.ops)
308 this->ops.pushEnd(
op);
312 template <
typename TYPE>
321 auto it_ops = this->ops.begins();
326 }
else if (
it_ops->isValid()){
328 case opts::LEFT_BRACKET:
329 ops_tmp.pushEnd(opts::LEFT_BRACKET);
331 case opts::RIGHT_BRACKET:
344 &&
ops_tmp[-1] != opts::LEFT_BRACKET){
366 template <
typename TYPE>
374 template <
typename TYPE>
382 template <
typename TYPE>
390 template <
typename TYPE>
398 template <
typename TYPE>
406 template <
typename TYPE>
415 template <
typename TYPE>
416 auto original::operator&&(
const filter<TYPE> &f,
const filterStream<TYPE> &ofs) -> filterStream<TYPE> {
417 filterStream<TYPE> fs;
424 template<
typename TYPE>
425 auto original::operator&&(
const filterStream<TYPE> &ofs,
const filter<TYPE> &f) -> filterStream<TYPE> {
426 filterStream<TYPE> fs(ofs);
430 template <
typename TYPE>
431 auto original::operator||(
const filter<TYPE> &f1,
const filter<TYPE> &f2) -> filterStream<TYPE> {
432 filterStream<TYPE> fs;
439 template <
typename TYPE>
440 auto original::operator||(
const filter<TYPE> &f,
const filterStream<TYPE> &ofs) -> filterStream<TYPE> {
441 filterStream<TYPE> fs;
448 template<
typename TYPE>
449 auto original::operator||(
const filterStream<TYPE> &ofs,
const filter<TYPE> &f) -> filterStream<TYPE> {
450 filterStream<TYPE> fs(ofs);
454 template <
typename TYPE>
456 filterStream<TYPE> fs;
462 template<
typename TYPE>
464 filterStream<TYPE> fs(ofs);
468 template<
typename TYPE>
469 auto original::group(
const filterStream<TYPE> &ofs) -> filterStream<TYPE> {
470 filterStream<TYPE> fs;
476 template<
typename TYPE>
478 filterStream<TYPE> fs;
483 template <
typename TYPE>
485 if (!this->flag) this->toPostFix();
489 auto it_ops = this->ops.begins();
494 }
else if (
it_ops->isValid()){
Non-cyclic doubly linked list implementation.
const TYPE * get() const
Get managed pointer const version.
Definition autoPtr.h:629
Composite filter builder with logical operator chaining.
Definition filterStream.h:28
friend filterStream< T > operator&&(const filter< T > &f, const filterStream< T > &ofs)
AND operator between filter and filterStream.
void toPostFix() const
Convert infix notation to postfix.
Definition filterStream.h:313
friend filterStream< T > operator!(const filter< T > &f)
Create negated filterStream from filter.
void pushEnd(const filter< TYPE > &f)
Append filter to the stream.
Definition filterStream.h:294
friend filterStream< T > operator!(const filterStream< T > &ofs)
Create negated filterStream from existing stream.
friend filterStream< T > operator||(const filterStream< T > &ofs, const filter< T > &f)
OR operator between filterStream and filter.
void addNotOpt()
Add NOT operator to the stream.
Definition filterStream.h:287
void addBrackets()
Add bracket operators for grouping.
Definition filterStream.h:264
friend filterStream< T > operator||(const filter< T > &f1, const filter< T > &f2)
Create OR filterStream from two filters.
filterStream & operator!()
Logical NOT operator.
Definition filterStream.h:399
void addAndOpt()
Add AND operator to the stream.
Definition filterStream.h:273
friend filterStream< T > operator&&(const filterStream< T > &ofs, const filter< T > &f)
AND operator between filterStream and filter.
bool operator()(const TYPE &t) const
Filter evaluation operator.
Definition filterStream.h:484
friend filterStream< T > operator&&(const filter< T > &f1, const filter< T > &f2)
Create AND filterStream from two filters.
void pushAll(const filterStream &fs)
Merge another filterStream into this one.
Definition filterStream.h:300
friend filterStream< T > group(const filterStream< T > &ofs)
Create grouped filterStream from existing stream.
void addOrOpt()
Add OR operator to the stream.
Definition filterStream.h:280
friend filterStream< T > group(const filter< T > &f)
Create grouped filterStream from single filter.
friend filterStream< T > operator||(const filter< T > &f, const filterStream< T > &ofs)
OR operator between filter and filterStream.
filterStream()
Protected constructor for stream initialization.
Definition filterStream.h:261
Base class for filter operations.
Definition filter.h:31
Unique ownership smart pointer with move semantics.
Definition ownerPtr.h:37
Shared ownership smart pointer with strong references.
Definition refCntPtr.h:108
Filter base class and derived filter classes for various matching operations.
Main namespace for the project Original.
Definition algorithms.h:21
filterStream< T > operator&&(const filter< T > &f1, const filter< T > &f2)
Create AND filterStream from two filters.
filterStream< T > operator!(const filter< T > &f)
Create negated filterStream from filter.
filterStream< T > operator||(const filter< T > &f1, const filter< T > &f2)
Create OR filterStream from two filters.
filterStream< T > group(const filterStream< T > &ofs)
Create grouped filterStream from existing stream.
Reference-counted smart pointer hierarchy.