pianod2
multisource multiuser scriptable networked music player
querylist.h
Go to the documentation of this file.
1 
9 #ifndef __pianod__querylist__
10 #define __pianod__querylist__
11 
12 #include <config.h>
13 
14 #include <cstdint>
15 
16 #include <typeinfo>
17 #include <vector>
18 #include <stdexcept>
19 
20 #include "enumeratedarray.h"
21 #include "querylist.h"
22 #include "filter.h"
23 
25 namespace Query {
27  class impossible : public std::invalid_argument {
28  public:
29  explicit impossible (void) : invalid_argument ("impossible") { };
30  };
31  typedef int8_t Preference;
32 
34  typedef enum search_methods_t {
39  Fuzzy
41 
44  class Constraints {
45  public:
56  bool andCapable = false;
57  };
58 
59  class DetailList;
60  class Queries;
61  class List;
62 
64  class Details {
65  friend class DetailList; // Collection manages quality.
66  private:
67  float quality = 1;
69  public:
72  std::string value;
73 
74  Details (Filter::Field filter_field,
75  Filter::Field field, SearchMethod method, const char *val);
76  };
77 
80  class DetailList : public std::vector<Details> {
81  friend class Queries;
82  unsigned preference (const Constraints &con) const;
83  float quality (void) const;
84 
85  };
86 
87 
90  class Queries: public std::vector<DetailList> {
91  friend class List;
92  unsigned preference (const Constraints &con) const;
93  float quality (void) const;
94  };
95 
97  class List : public Queries {
98  public:
101  Filter::Field field);
103  Queries interpretAnd (const Filter::Operation *filter);
104  Queries interpret (const Filter::Operation *filter);
105  Queries interpretFuzzy (const PermutedFilter &filter);
106  List (const Filter &filter, const Constraints &constraints);
107  };
108 }
109 
110 #endif // defined(__pianod__querylist__)
Nodes for the filter parse tree.
Definition: filter.h:133
Track data filter.
Definition: filter.h:38
Field
Fields on which comparisons can be done by the filter.
Definition: filter.h:44
Permuted filter, like Filter but constructed from a string.
Definition: filter.h:258
Media sources mark the available fields (array index) to true to indicate they are capable of searchi...
Definition: querylist.h:44
bool andCapable
May query with 'AND' semantics.
Definition: querylist.h:56
EnumeratedArray< Filter::Field, bool > fieldInGeneralSearch
Fields that can't be properly searched on, but are part of Field::Search searches.
Definition: querylist.h:52
EnumeratedArray< Filter::Field, bool > canExactCompare
Definition: querylist.h:48
EnumeratedArray< Filter::Field, bool > canMatchBeginning
Definition: querylist.h:49
EnumeratedArray< Filter::Field, bool > canSubstringMatch
Definition: querylist.h:50
EnumeratedArray< Filter::Field, bool > participatesInFuzzy
Fields searched by permuted filters, i.e., 'like'.
Definition: querylist.h:47
EnumeratedArray< Filter::Field, Preference > fieldPreference
Relative field preferences: higher is better.
Definition: querylist.h:54
A list of queries representing a filter expression or portion thereof.
Definition: querylist.h:80
float quality(void) const
Specificity of the collection of searches.
Definition: querylist.cpp:45
unsigned preference(const Constraints &con) const
Field Preference of searches.
Definition: querylist.cpp:35
Information about how a query should be performed by a source.
Definition: querylist.h:64
Filter::Field filterField
Specificity of the search; more is better.
Definition: querylist.h:68
SearchMethod searchMethod
Method of comparison.
Definition: querylist.h:71
Filter::Field searchField
Field filtered on.
Definition: querylist.h:70
float quality
Definition: querylist.h:67
Details(Filter::Field filter_field, Filter::Field field, SearchMethod method, const char *val)
Create a new query and calculate its quality.
Definition: querylist.cpp:18
std::string value
Value to search for.
Definition: querylist.h:72
A adapter to convert filters into a list of queries for a source.
Definition: querylist.h:97
SearchMethod findMethodForField(SearchMethod requestedMethod, Filter::Field field)
Determine the best method of querying for a field, taking into account the source's capabilities.
Definition: querylist.cpp:87
Queries interpretAnd(const Filter::Operation *filter)
Definition: querylist.cpp:158
const Constraints & capabilities
Definition: querylist.h:99
Queries interpret(const Filter::Operation *filter)
Definition: querylist.cpp:188
Queries interpretFuzzy(const PermutedFilter &filter)
Build a query directly from a permuted filter.
Definition: querylist.cpp:224
Details interpretComparison(const Filter::Operation *filter)
Definition: querylist.cpp:109
A list of queries representing a filter expression or portion thereof.
Definition: querylist.h:90
friend class List
Definition: querylist.h:91
float quality(void) const
Specificity of the collection of searches.
Definition: querylist.cpp:74
unsigned preference(const Constraints &con) const
Field Preference of searches.
Definition: querylist.cpp:60
Exception indicating a query is impossible to perform on a source.
Definition: querylist.h:27
impossible(void)
Definition: querylist.h:29
Enumerated array type.
Track filter.
Filter-to-query converter.
Definition: filter.h:29
search_methods_t
Manners in which fields may be queried for a source.
Definition: querylist.h:34
@ SubstringMatch
Definition: querylist.h:38
@ Fuzzy
Definition: querylist.h:39
@ SearchMethodNone
Definition: querylist.h:35
@ ExactCompare
Definition: querylist.h:36
@ MatchBeginning
Definition: querylist.h:37
enum Query::search_methods_t SearchMethod
Manners in which fields may be queried for a source.
int8_t Preference
Definition: querylist.h:31
Convert a filter into a list of queries based on a list of capabilities.