Ignore:
Timestamp:
Jan 23, 2015, 6:47:19 AM (4 years ago)
Author:
cameron
Message:

Switch to dyn_cast system for PropertyObjects?

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/UCD/PropertyObjects.h

    r4431 r4435  
    3131
    3232namespace UCD {
    33         enum property_kind_t {
    34                 NumericProperty, CodepointProperty, StringProperty, MiscellaneousProperty, EnumeratedProperty, CatalogProperty, BinaryProperty
    35         };
    36        
     33   
    3734        class PropertyObject {
    3835        public:
    39 //        enum class ClassTypeId : unsigned {
    40 //            NumericProperty, CodepointProperty, StringProperty, MiscellaneousProperty, EnumeratedProperty, CatalogProperty, BinaryProperty
    41 //        };
    42 //        inline ClassTypeId getClassTypeId() const {
    43 //            return mClassTypeId;
    44 //        }
    45                 PropertyObject(property_t p, property_kind_t k) : the_property(p), the_kind(k) {}
    46                
     36        enum class ClassTypeId : unsigned {
     37            NumericProperty, CodepointProperty, StringProperty, MiscellaneousProperty, EnumeratedProperty, CatalogProperty, BinaryProperty,  UnsupportedProperty
     38        };
     39        inline ClassTypeId getClassTypeId() const {
     40            return the_kind;
     41        }
     42                PropertyObject(property_t p, ClassTypeId k) : the_property(p), the_kind(k) {}
     43       
    4744                property_t the_property;
    48                 property_kind_t the_kind;
     45                ClassTypeId the_kind;
    4946               
    5047                virtual UnicodeSet GetCodepointSet(std::string value_spec) = 0;
     
    5350        class UnsupportedPropertyObject : public PropertyObject {
    5451        public:
    55                 UnsupportedPropertyObject(property_t p, property_kind_t k) : PropertyObject(p, k) {}
     52        static inline bool classof(const PropertyObject * p) {
     53            return p->getClassTypeId() == ClassTypeId::UnsupportedProperty;
     54        }
     55        static inline bool classof(const void *) {
     56            return false;
     57        }
     58       
     59                UnsupportedPropertyObject(property_t p, ClassTypeId k) : PropertyObject(p, k) {}
    5660                UnicodeSet GetCodepointSet(std::string value_spec);     
    5761        };
     
    6367        class EnumeratedPropertyObject : public PropertyObject {
    6468        public:
     69        static inline bool classof(const PropertyObject * p) {
     70            return p->getClassTypeId() == ClassTypeId::EnumeratedProperty;
     71        }
     72        static inline bool classof(const void *) {
     73            return false;
     74        }
    6575               
    6676                EnumeratedPropertyObject(UCD::property_t p,
     
    6979                                         const std::unordered_map<std::string, int> aliases,
    7080                                         const std::vector<UnicodeSet> sets) :
    71                 PropertyObject(p, EnumeratedProperty), property_value_enum_names(enum_names), property_value_full_names(names), property_value_aliases(aliases), aliases_initialized(false), property_value_sets(sets) {}
     81                PropertyObject(p, ClassTypeId::EnumeratedProperty), property_value_enum_names(enum_names), property_value_full_names(names), property_value_aliases(aliases), aliases_initialized(false), property_value_sets(sets) {}
    7282                int GetPropertyValueEnumCode(std::string s);
    7383                UnicodeSet GetCodepointSet(std::string value_spec);     
     
    111121        class BinaryPropertyObject : public PropertyObject {
    112122        public:
    113                 UnicodeSet the_codepoint_set;
    114                 BinaryPropertyObject(UCD::property_t p, UnicodeSet s) : PropertyObject(p, BinaryProperty), the_codepoint_set(s) {}
     123        static inline bool classof(const PropertyObject * p) {
     124            return p->getClassTypeId() == ClassTypeId::BinaryProperty;
     125        }
     126        static inline bool classof(const void *) {
     127            return false;
     128        }
     129               
     130                BinaryPropertyObject(UCD::property_t p, UnicodeSet s) : PropertyObject(p, ClassTypeId::BinaryProperty), the_codepoint_set(s) {}
    115131                UnicodeSet GetCodepointSet(std::string value_spec);     
     132    private:
     133                UnicodeSet the_codepoint_set;       
    116134        };
    117135       
Note: See TracChangeset for help on using the changeset viewer.