00001 /*************************************************************************** 00002 * 00003 * Copyright (C) 2009-2010 Cassio Neri Moreira 00004 * 00005 * This file is part of the KeyValue library. 00006 * 00007 * The KeyValue library is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU General Public License as published 00009 * by the Free Software Foundation, either version 3 of the License, or (at 00010 * your option) any later version. 00011 * 00012 * The KeyValue library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 00015 * Public License for more details. 00016 * 00017 * You should have received a copy of the GNU General Public License along 00018 * with KeyValue. If not, see <http://www.gnu.org/licenses/>. 00019 * 00020 * If you modify this library, or any covered work, by linking or combining 00021 * it with Excel (or a modified version of that program), containing parts 00022 * covered by the terms of End-User License Agreement for Microsoft 00023 * Software, the licensors of KeyValue grant you additional permission to 00024 * convey the resulting work. 00025 * 00026 **************************************************************************/ 00027 00035 #ifndef KEYVALUE_PATTERN_PATTERN_H_ 00036 #define KEYVALUE_PATTERN_PATTERN_H_ 00037 00038 #include <utility> 00039 00040 #include <boost/utility.hpp> 00041 00042 #include "keyvalue/extern/String.h" 00043 #include "keyvalue/value/Value.h" 00044 00045 namespace keyvalue { 00046 00047 // Forward declarations 00048 00049 namespace frontend { 00050 class Queue; 00051 } 00052 00057 namespace pattern { 00058 00071 class Pattern : private boost::noncopyable { 00072 00073 public: 00074 00087 virtual bool 00088 parse(frontend::Queue& queue) = 0; 00089 00101 virtual std::pair<string, value::Value> 00102 pop() = 0; 00103 00110 virtual bool 00111 isEmpty() const = 0; 00112 00113 protected: 00114 00124 class QueueRaii { 00125 00126 public: 00127 00134 QueueRaii(frontend::Queue& queue); 00135 ~QueueRaii(); 00136 00137 private: 00138 00139 frontend::Queue& queue_; 00140 00141 }; // class QueueRaii 00142 00143 }; // class Pattern 00144 00161 bool 00162 isKey(const value::Variant& variant); 00163 00187 string 00188 getKey(const value::Variant& variant); 00189 00190 } // namespace pattern 00191 } // namespace keyvalue 00192 00193 #endif // KEYVALUE_PATTERN_PATTERN_H_