LCOV - code coverage report
Current view: top level - root/contrail/src/contrail-common/sandesh/compiler/parse - t_enum.h (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 29 37 78.4 %
Date: 2026-08-03 02:19:58 Functions: 8 9 88.9 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Licensed to the Apache Software Foundation (ASF) under one
       3             :  * or more contributor license agreements. See the NOTICE file
       4             :  * distributed with this work for additional information
       5             :  * regarding copyright ownership. The ASF licenses this file
       6             :  * to you under the Apache License, Version 2.0 (the
       7             :  * "License"); you may not use this file except in compliance
       8             :  * with the License. You may obtain a copy of the License at
       9             :  *
      10             :  *   http://www.apache.org/licenses/LICENSE-2.0
      11             :  *
      12             :  * Unless required by applicable law or agreed to in writing,
      13             :  * software distributed under the License is distributed on an
      14             :  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
      15             :  * KIND, either express or implied. See the License for the
      16             :  * specific language governing permissions and limitations
      17             :  * under the License.
      18             :  */
      19             : 
      20             : #ifndef T_ENUM_H
      21             : #define T_ENUM_H
      22             : 
      23             : #include "t_enum_value.h"
      24             : #include <vector>
      25             : 
      26             : /**
      27             :  * An enumerated type. A list of constant objects with a name for the type.
      28             :  *
      29             :  */
      30             : class t_enum : public t_type {
      31             :  public:
      32        1010 :   t_enum(t_program* program) :
      33        1010 :     t_type(program) {}
      34             : 
      35        1010 :   void set_name(const std::string& name) {
      36        1010 :     name_ = name;
      37        1010 :   }
      38             : 
      39        8042 :   void append(t_enum_value* constant) {
      40        8042 :     constants_.push_back(constant);
      41        8042 :   }
      42             : 
      43        9748 :   const std::vector<t_enum_value*>& get_constants() {
      44        9748 :     return constants_;
      45             :   }
      46             : 
      47        3029 :   t_enum_value* get_constant_by_name(const std::string name) {
      48        3029 :     const std::vector<t_enum_value*>& enum_values = get_constants();
      49        3029 :     std::vector<t_enum_value*>::const_iterator c_iter;
      50       27812 :     for (c_iter = enum_values.begin(); c_iter != enum_values.end(); ++c_iter) {
      51       27812 :       if ((*c_iter)->get_name() == name) {
      52        3029 :         return *c_iter;
      53             :       }
      54             :     }
      55           0 :     return NULL;
      56             :   }
      57             : 
      58           0 :   t_enum_value* get_constant_by_value(int64_t value) {
      59           0 :     const std::vector<t_enum_value*>& enum_values = get_constants();
      60           0 :     std::vector<t_enum_value*>::const_iterator c_iter;
      61           0 :     for (c_iter = enum_values.begin(); c_iter != enum_values.end(); ++c_iter) {
      62           0 :       if ((*c_iter)->get_value() == value) {
      63           0 :         return *c_iter;
      64             :       }
      65             :     }
      66           0 :     return NULL;
      67             :   }
      68             : 
      69       16854 :   bool is_enum() const {
      70       16854 :     return true;
      71             :   }
      72             : 
      73         752 :   virtual std::string get_fingerprint_material() const {
      74         752 :     return "enum";
      75             :   }
      76             : 
      77        1010 :   void resolve_values() {
      78        1010 :     const std::vector<t_enum_value*>& enum_values = get_constants();
      79        1010 :     std::vector<t_enum_value*>::const_iterator c_iter;
      80        1010 :     int lastValue = -1;
      81        9052 :     for (c_iter = enum_values.begin(); c_iter != enum_values.end(); ++c_iter) {
      82        8042 :       if (! (*c_iter)->has_value()) {
      83        6518 :         (*c_iter)->set_value(++lastValue);
      84             :       } else {
      85        1524 :         lastValue = (*c_iter)->get_value();
      86             :       }
      87             :     }
      88        1010 :   }
      89             : 
      90             :  private:
      91             :   std::vector<t_enum_value*> constants_;
      92             : };
      93             : 
      94             : #endif

Generated by: LCOV version 1.14