query_params.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2003-2005 Tommi Maekitalo
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * As a special exception, you may use this file as part of a free
10  * software library without restriction. Specifically, if other files
11  * instantiate templates or use macros or inline functions from this
12  * file, or you compile this file and link it with other files to
13  * produce an executable, this file does not by itself cause the
14  * resulting executable to be covered by the GNU General Public
15  * License. This exception does not however invalidate any other
16  * reasons why the executable file might be covered by the GNU Library
17  * General Public License.
18  *
19  * This library is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22  * Lesser General Public License for more details.
23  *
24  * You should have received a copy of the GNU Lesser General Public
25  * License along with this library; if not, write to the Free Software
26  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27  */
28 
29 
30 #ifndef TNT_QUERY_PARAMS_H
31 #define TNT_QUERY_PARAMS_H
32 
33 #include <cxxtools/query_params.h>
34 #include <tnt/scope.h>
35 #include <tnt/convert.h>
36 
37 namespace tnt
38 {
39  class QueryParams;
40 
41  namespace qhelper
42  {
43  template <typename Type>
44  Type arg(const QueryParams& q, const std::string& name, const Type& def);
45 
46  template <>
47  inline bool arg<bool>(const QueryParams& q, const std::string& name, const bool&);
48 
49  }
50 
52  {
53  Scope* paramScope;
54 
55  public:
57  : paramScope(0)
58  { }
60  : cxxtools::QueryParams(src),
61  paramScope(src.paramScope)
62  { if (paramScope) paramScope->addRef(); }
64  {
66  if (paramScope != src.paramScope)
67  {
68  if (paramScope->release() == 0)
69  delete paramScope;
70  paramScope = src.paramScope;
71  if (paramScope)
72  paramScope->addRef();
73  }
74  return *this;
75  }
77  {
78  if (paramScope && paramScope->release() == 0)
79  delete paramScope;
80  }
81 
83  {
84  if (!paramScope)
85  paramScope = new Scope();
86  return *paramScope;
87  }
88 
89  template <typename Type>
90  Type arg(size_type n) const
91  { return cxxtools::convert<Type>(param(n)); }
92 
93  template <typename Type>
94  Type arg(const std::string& name, const Type& def = Type()) const
95  { return qhelper::arg<Type>(*this, name, def); }
96 
97  template <typename Type>
98  Type arg(const std::string& name, const std::locale& loc, const Type& def = Type()) const
99  { return has(name) ? tnt::stringToWithDefault<Type>(param(name), loc) : def; }
100 
101  };
102 
103  namespace qhelper
104  {
105  template <typename Type>
106  Type arg(const QueryParams& q, const std::string& name, const Type& def)
107  {
108  return q.has(name) ? cxxtools::convert<Type>(q.param(name)) : def;
109  }
110 
111  template <>
112  inline bool arg<bool>(const QueryParams& q, const std::string& name, const bool&)
113  {
114  return q.has(name);
115  }
116 
117  }
118 
119 }
120 
121 #endif // TNT_QUERY_PARAMS_H