26 template<
typename TYPE>
31 enum class opts{AND = 1, OR = 0, NOT = 2, LEFT_BRACKET = 3, RIGHT_BRACKET = 4};
157 template <
typename TYPE>
261 template <
typename TYPE>
264 template <
typename TYPE>
267 this->stream.pushBegin(nullFilter);
268 this->stream.pushEnd(nullFilter);
269 this->ops.pushBegin(opts::LEFT_BRACKET);
270 this->ops.pushEnd(opts::RIGHT_BRACKET);
273 template <
typename TYPE>
276 this->stream.pushEnd(nullFilter);
277 this->ops.pushEnd(opts::AND);
280 template <
typename TYPE>
283 this->stream.pushEnd(nullFilter);
284 this->ops.pushEnd(opts::OR);
287 template <
typename TYPE>
290 this->stream.pushBegin(nullFilter);
291 this->ops.pushBegin(opts::NOT);
294 template <
typename TYPE>
300 template <
typename TYPE>
305 this->stream.pushEnd(
filter);
307 for (
auto&
op:
fs.ops)
309 this->ops.pushEnd(
op);
313 template <
typename TYPE>
322 auto it_ops = this->ops.begins();
327 }
else if (
it_ops->isValid()){
329 case opts::LEFT_BRACKET:
330 ops_tmp.pushEnd(opts::LEFT_BRACKET);
332 case opts::RIGHT_BRACKET:
345 &&
ops_tmp[-1] != opts::LEFT_BRACKET){
367 template <
typename TYPE>
375 template <
typename TYPE>
383 template <
typename TYPE>
391 template <
typename TYPE>
399 template <
typename TYPE>
407 template <
typename TYPE>
416 template <
typename TYPE>
417 auto original::operator&&(
const filter<TYPE> &f,
const filterStream<TYPE> &ofs) -> filterStream<TYPE> {
418 filterStream<TYPE> fs;
425 template<
typename TYPE>
426 auto original::operator&&(
const filterStream<TYPE> &ofs,
const filter<TYPE> &f) -> filterStream<TYPE> {
427 filterStream<TYPE> fs(ofs);
431 template <
typename TYPE>
432 auto original::operator||(
const filter<TYPE> &f1,
const filter<TYPE> &f2) -> filterStream<TYPE> {
433 filterStream<TYPE> fs;
440 template <
typename TYPE>
441 auto original::operator||(
const filter<TYPE> &f,
const filterStream<TYPE> &ofs) -> filterStream<TYPE> {
442 filterStream<TYPE> fs;
449 template<
typename TYPE>
450 auto original::operator||(
const filterStream<TYPE> &ofs,
const filter<TYPE> &f) -> filterStream<TYPE> {
451 filterStream<TYPE> fs(ofs);
455 template <
typename TYPE>
457 filterStream<TYPE> fs;
463 template<
typename TYPE>
465 filterStream<TYPE> fs(ofs);
469 template<
typename TYPE>
470 auto original::group(
const filterStream<TYPE> &ofs) -> filterStream<TYPE> {
471 filterStream<TYPE> fs;
477 template<
typename TYPE>
479 filterStream<TYPE> fs;
484 template <
typename TYPE>
486 if (!this->flag) this->toPostFix();
490 auto it_ops = this->ops.begins();
495 }
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:314
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:295
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:288
void addBrackets()
Add bracket operators for grouping.
Definition filterStream.h:265
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:400
void addAndOpt()
Add AND operator to the stream.
Definition filterStream.h:274
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:485
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:301
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:281
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:262
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.