Home | History | Annotate | Download | only in parameter
      1 /*
      2  * Copyright (c) 2011-2014, Intel Corporation
      3  * All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without modification,
      6  * are permitted provided that the following conditions are met:
      7  *
      8  * 1. Redistributions of source code must retain the above copyright notice, this
      9  * list of conditions and the following disclaimer.
     10  *
     11  * 2. Redistributions in binary form must reproduce the above copyright notice,
     12  * this list of conditions and the following disclaimer in the documentation and/or
     13  * other materials provided with the distribution.
     14  *
     15  * 3. Neither the name of the copyright holder nor the names of its contributors
     16  * may be used to endorse or promote products derived from this software without
     17  * specific prior written permission.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
     20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     22  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
     23  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     24  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     26  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     28  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 #pragma once
     31 
     32 #include <string>
     33 #include <stdint.h>
     34 
     35 class CCompoundRule;
     36 class CSelectionCriteriaDefinition;
     37 
     38 class CRuleParser
     39 {
     40 public:
     41     enum Status
     42     {
     43         EInit,
     44         EBeginCompoundRule,
     45         EEndCompoundRule,
     46         ECriterionRule,
     47         EContinue,
     48         EDone,
     49 
     50         ENbStatuses
     51     };
     52 
     53     CRuleParser(const std::string &strApplicationRule,
     54                 const CSelectionCriteriaDefinition *pSelectionCriteriaDefinition);
     55     ~CRuleParser();
     56 
     57     // Parse
     58     bool parse(CCompoundRule *pParentRule, std::string &strError);
     59 
     60     // Iterate
     61     bool iterate(std::string &strError);
     62 
     63     // Next word
     64     bool next(std::string &strNext, std::string &strError);
     65 
     66     // Rule type
     67     const std::string &getType() const;
     68 
     69     // Criteria defintion
     70     const CSelectionCriteriaDefinition *getSelectionCriteriaDefinition() const;
     71 
     72     // Root rule
     73     CCompoundRule *grabRootRule();
     74 
     75 private:
     76     CRuleParser(const CRuleParser &);
     77     CRuleParser &operator=(const CRuleParser &);
     78 
     79     // Rule definition
     80     std::string _strApplicationRule;
     81     // Criteria defintion
     82     const CSelectionCriteriaDefinition *_pSelectionCriteriaDefinition;
     83     /** String iterator */
     84     std::string::size_type _uiCurrentPos{0};
     85     // Deepness
     86     size_t _currentDeepness{0};
     87     // Current Type
     88     std::string _strRuleType;
     89     // Status
     90     Status _eStatus{EInit};
     91     // Root rule
     92     CCompoundRule *_pRootRule{nullptr};
     93     // Matches
     94     static const char *_acDelimiters[ENbStatuses];
     95 };
     96