Changeset 4435 for icGREP


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

Switch to dyn_cast system for PropertyObjects?

Location:
icGREP/icgrep-devel/icgrep
Files:
3 edited

Legend:

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

    r4388 r4435  
    2424
    2525  PropertyObject* property_object_table[] = {
    26     new UnsupportedPropertyObject(cjkAccountingNumeric, NumericProperty),
    27     new UnsupportedPropertyObject(cjkOtherNumeric, NumericProperty),
    28     new UnsupportedPropertyObject(cjkPrimaryNumeric, NumericProperty),
    29     new UnsupportedPropertyObject(nv, NumericProperty),
    30     new UnsupportedPropertyObject(cf, StringProperty),
    31     new UnsupportedPropertyObject(cjkCompatibilityVariant, StringProperty),
    32     new UnsupportedPropertyObject(dm, StringProperty),
    33     new UnsupportedPropertyObject(FC_NFKC, StringProperty),
    34     new UnsupportedPropertyObject(lc, StringProperty),
    35     new UnsupportedPropertyObject(NFKC_CF, StringProperty),
    36     new UnsupportedPropertyObject(scf, CodepointProperty),
    37     new UnsupportedPropertyObject(slc, CodepointProperty),
    38     new UnsupportedPropertyObject(stc, CodepointProperty),
    39     new UnsupportedPropertyObject(suc, CodepointProperty),
    40     new UnsupportedPropertyObject(tc, StringProperty),
    41     new UnsupportedPropertyObject(uc, StringProperty),
    42     new UnsupportedPropertyObject(bmg, MiscellaneousProperty),
    43     new UnsupportedPropertyObject(bpb, MiscellaneousProperty),
    44     new UnsupportedPropertyObject(cjkIICore, MiscellaneousProperty),
    45     new UnsupportedPropertyObject(cjkIRG_GSource, MiscellaneousProperty),
    46     new UnsupportedPropertyObject(cjkIRG_HSource, MiscellaneousProperty),
    47     new UnsupportedPropertyObject(cjkIRG_JSource, MiscellaneousProperty),
    48     new UnsupportedPropertyObject(cjkIRG_KPSource, MiscellaneousProperty),
    49     new UnsupportedPropertyObject(cjkIRG_KSource, MiscellaneousProperty),
    50     new UnsupportedPropertyObject(cjkIRG_MSource, MiscellaneousProperty),
    51     new UnsupportedPropertyObject(cjkIRG_TSource, MiscellaneousProperty),
    52     new UnsupportedPropertyObject(cjkIRG_USource, MiscellaneousProperty),
    53     new UnsupportedPropertyObject(cjkIRG_VSource, MiscellaneousProperty),
    54     new UnsupportedPropertyObject(cjkRSUnicode, MiscellaneousProperty),
    55     new UnsupportedPropertyObject(isc, MiscellaneousProperty),
    56     new UnsupportedPropertyObject(JSN, MiscellaneousProperty),
    57     new UnsupportedPropertyObject(na, MiscellaneousProperty),
    58     new UnsupportedPropertyObject(na1, MiscellaneousProperty),
    59     new UnsupportedPropertyObject(Name_Alias, MiscellaneousProperty),
    60     new UnsupportedPropertyObject(scx, MiscellaneousProperty),
    61     new UnsupportedPropertyObject(age, CatalogProperty),
     26      new UnsupportedPropertyObject(cjkAccountingNumeric, PropertyObject::ClassTypeId::NumericProperty),
     27    new UnsupportedPropertyObject(cjkOtherNumeric, PropertyObject::ClassTypeId::NumericProperty),
     28    new UnsupportedPropertyObject(cjkPrimaryNumeric, PropertyObject::ClassTypeId::NumericProperty),
     29    new UnsupportedPropertyObject(nv, PropertyObject::ClassTypeId::NumericProperty),
     30    new UnsupportedPropertyObject(cf, PropertyObject::ClassTypeId::StringProperty),
     31    new UnsupportedPropertyObject(cjkCompatibilityVariant, PropertyObject::ClassTypeId::StringProperty),
     32    new UnsupportedPropertyObject(dm, PropertyObject::ClassTypeId::StringProperty),
     33    new UnsupportedPropertyObject(FC_NFKC, PropertyObject::ClassTypeId::StringProperty),
     34    new UnsupportedPropertyObject(lc, PropertyObject::ClassTypeId::StringProperty),
     35    new UnsupportedPropertyObject(NFKC_CF, PropertyObject::ClassTypeId::StringProperty),
     36    new UnsupportedPropertyObject(scf, PropertyObject::ClassTypeId::CodepointProperty),
     37    new UnsupportedPropertyObject(slc, PropertyObject::ClassTypeId::CodepointProperty),
     38    new UnsupportedPropertyObject(stc, PropertyObject::ClassTypeId::CodepointProperty),
     39    new UnsupportedPropertyObject(suc, PropertyObject::ClassTypeId::CodepointProperty),
     40    new UnsupportedPropertyObject(tc, PropertyObject::ClassTypeId::StringProperty),
     41    new UnsupportedPropertyObject(uc, PropertyObject::ClassTypeId::StringProperty),
     42    new UnsupportedPropertyObject(bmg, PropertyObject::ClassTypeId::MiscellaneousProperty),
     43    new UnsupportedPropertyObject(bpb, PropertyObject::ClassTypeId::MiscellaneousProperty),
     44    new UnsupportedPropertyObject(cjkIICore, PropertyObject::ClassTypeId::MiscellaneousProperty),
     45    new UnsupportedPropertyObject(cjkIRG_GSource, PropertyObject::ClassTypeId::MiscellaneousProperty),
     46    new UnsupportedPropertyObject(cjkIRG_HSource, PropertyObject::ClassTypeId::MiscellaneousProperty),
     47    new UnsupportedPropertyObject(cjkIRG_JSource, PropertyObject::ClassTypeId::MiscellaneousProperty),
     48    new UnsupportedPropertyObject(cjkIRG_KPSource, PropertyObject::ClassTypeId::MiscellaneousProperty),
     49    new UnsupportedPropertyObject(cjkIRG_KSource, PropertyObject::ClassTypeId::MiscellaneousProperty),
     50    new UnsupportedPropertyObject(cjkIRG_MSource, PropertyObject::ClassTypeId::MiscellaneousProperty),
     51    new UnsupportedPropertyObject(cjkIRG_TSource, PropertyObject::ClassTypeId::MiscellaneousProperty),
     52    new UnsupportedPropertyObject(cjkIRG_USource, PropertyObject::ClassTypeId::MiscellaneousProperty),
     53    new UnsupportedPropertyObject(cjkIRG_VSource, PropertyObject::ClassTypeId::MiscellaneousProperty),
     54    new UnsupportedPropertyObject(cjkRSUnicode, PropertyObject::ClassTypeId::MiscellaneousProperty),
     55    new UnsupportedPropertyObject(isc, PropertyObject::ClassTypeId::MiscellaneousProperty),
     56    new UnsupportedPropertyObject(JSN, PropertyObject::ClassTypeId::MiscellaneousProperty),
     57    new UnsupportedPropertyObject(na, PropertyObject::ClassTypeId::MiscellaneousProperty),
     58    new UnsupportedPropertyObject(na1, PropertyObject::ClassTypeId::MiscellaneousProperty),
     59    new UnsupportedPropertyObject(Name_Alias, PropertyObject::ClassTypeId::MiscellaneousProperty),
     60    new UnsupportedPropertyObject(scx, PropertyObject::ClassTypeId::MiscellaneousProperty),
     61    new UnsupportedPropertyObject(age, PropertyObject::ClassTypeId::CatalogProperty),
    6262    &BLK_ns::property_object,
    6363    &SC_ns::property_object,
    64     new UnsupportedPropertyObject(bc, EnumeratedProperty),
    65     new UnsupportedPropertyObject(bpt, EnumeratedProperty),
    66     new UnsupportedPropertyObject(ccc, EnumeratedProperty),
    67     new UnsupportedPropertyObject(dt, EnumeratedProperty),
     64    new UnsupportedPropertyObject(bc, PropertyObject::ClassTypeId::EnumeratedProperty),
     65    new UnsupportedPropertyObject(bpt, PropertyObject::ClassTypeId::EnumeratedProperty),
     66    new UnsupportedPropertyObject(ccc, PropertyObject::ClassTypeId::EnumeratedProperty),
     67    new UnsupportedPropertyObject(dt, PropertyObject::ClassTypeId::EnumeratedProperty),
    6868    &EA_ns::property_object,
    6969    &GC_ns::property_object,
    70     new UnsupportedPropertyObject(GCB, EnumeratedProperty),
     70    new UnsupportedPropertyObject(GCB, PropertyObject::ClassTypeId::EnumeratedProperty),
    7171    &HST_ns::property_object,
    72     new UnsupportedPropertyObject(InMC, EnumeratedProperty),
    73     new UnsupportedPropertyObject(InSC, EnumeratedProperty),
    74     new UnsupportedPropertyObject(jg, EnumeratedProperty),
    75     new UnsupportedPropertyObject(jt, EnumeratedProperty),
     72    new UnsupportedPropertyObject(InMC, PropertyObject::ClassTypeId::EnumeratedProperty),
     73    new UnsupportedPropertyObject(InSC, PropertyObject::ClassTypeId::EnumeratedProperty),
     74    new UnsupportedPropertyObject(jg, PropertyObject::ClassTypeId::EnumeratedProperty),
     75    new UnsupportedPropertyObject(jt, PropertyObject::ClassTypeId::EnumeratedProperty),
    7676    &LB_ns::property_object,
    77     new UnsupportedPropertyObject(NFC_QC, EnumeratedProperty),
    78     new UnsupportedPropertyObject(NFD_QC, EnumeratedProperty),
    79     new UnsupportedPropertyObject(NFKC_QC, EnumeratedProperty),
    80     new UnsupportedPropertyObject(NFKD_QC, EnumeratedProperty),
    81     new UnsupportedPropertyObject(nt, EnumeratedProperty),
    82     new UnsupportedPropertyObject(SB, EnumeratedProperty),
    83     new UnsupportedPropertyObject(WB, EnumeratedProperty),
     77    new UnsupportedPropertyObject(NFC_QC, PropertyObject::ClassTypeId::EnumeratedProperty),
     78    new UnsupportedPropertyObject(NFD_QC, PropertyObject::ClassTypeId::EnumeratedProperty),
     79    new UnsupportedPropertyObject(NFKC_QC, PropertyObject::ClassTypeId::EnumeratedProperty),
     80    new UnsupportedPropertyObject(NFKD_QC, PropertyObject::ClassTypeId::EnumeratedProperty),
     81    new UnsupportedPropertyObject(nt, PropertyObject::ClassTypeId::EnumeratedProperty),
     82    new UnsupportedPropertyObject(SB, PropertyObject::ClassTypeId::EnumeratedProperty),
     83    new UnsupportedPropertyObject(WB, PropertyObject::ClassTypeId::EnumeratedProperty),
    8484    &AHEX_ns::property_object,
    8585    &ALPHA_ns::property_object,
    8686    &BIDI_C_ns::property_object,
    87     new UnsupportedPropertyObject(Bidi_M, BinaryProperty),
     87    new UnsupportedPropertyObject(Bidi_M, PropertyObject::ClassTypeId::BinaryProperty),
    8888    &CASED_ns::property_object,
    89     new UnsupportedPropertyObject(CE, BinaryProperty),
     89    new UnsupportedPropertyObject(CE, PropertyObject::ClassTypeId::BinaryProperty),
    9090    &CI_ns::property_object,
    91     new UnsupportedPropertyObject(Comp_Ex, BinaryProperty),
     91    new UnsupportedPropertyObject(Comp_Ex, PropertyObject::ClassTypeId::BinaryProperty),
    9292    &CWCF_ns::property_object,
    9393    &CWCM_ns::property_object,
    94     new UnsupportedPropertyObject(CWKCF, BinaryProperty),
     94    new UnsupportedPropertyObject(CWKCF, PropertyObject::ClassTypeId::BinaryProperty),
    9595    &CWL_ns::property_object,
    9696    &CWT_ns::property_object,
     
    137137    &XIDC_ns::property_object,
    138138    &XIDS_ns::property_object,
    139     new UnsupportedPropertyObject(XO_NFC, BinaryProperty),
    140     new UnsupportedPropertyObject(XO_NFD, BinaryProperty),
    141     new UnsupportedPropertyObject(XO_NFKC, BinaryProperty),
    142     new UnsupportedPropertyObject(XO_NFKD, BinaryProperty)  };
     139    new UnsupportedPropertyObject(XO_NFC, PropertyObject::ClassTypeId::BinaryProperty),
     140    new UnsupportedPropertyObject(XO_NFD, PropertyObject::ClassTypeId::BinaryProperty),
     141    new UnsupportedPropertyObject(XO_NFKC, PropertyObject::ClassTypeId::BinaryProperty),
     142    new UnsupportedPropertyObject(XO_NFKD, PropertyObject::ClassTypeId::BinaryProperty)  };
    143143}
    144144
  • 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       
  • icGREP/icgrep-devel/icgrep/resolve_properties.cpp

    r4406 r4435  
    9696                if (theprop == UCD::gc) {
    9797                    // General Category
    98                     int valcode = dynamic_cast<UCD::EnumeratedPropertyObject *> (UCD::property_object_table[UCD::gc])->GetPropertyValueEnumCode(v);                   
     98                    int valcode = dyn_cast<UCD::EnumeratedPropertyObject> (UCD::property_object_table[UCD::gc])->GetPropertyValueEnumCode(v);                   
    9999                    if (valcode > 0) {
    100100                        name->setName("__get_gc_" + UCD::GC_ns::enum_names[valcode]);
     
    104104                else if (theprop == UCD::sc) {
    105105                    // Script property identified
    106                     int valcode = dynamic_cast<UCD::EnumeratedPropertyObject *> (UCD::property_object_table[UCD::sc])->GetPropertyValueEnumCode(v);                   
     106                    int valcode = dyn_cast<UCD::EnumeratedPropertyObject> (UCD::property_object_table[UCD::sc])->GetPropertyValueEnumCode(v);                   
    107107                    if (valcode > 0) {
    108108                        name->setName("__get_sc_" + UCD::SC_ns::enum_names[valcode]);
     
    112112                else if (theprop == UCD::scx) {
    113113                    // Script extension property identified
    114                     int valcode = dynamic_cast<UCD::EnumeratedPropertyObject *> (UCD::property_object_table[UCD::sc])->GetPropertyValueEnumCode(v);                   
     114                    int valcode = dyn_cast<UCD::EnumeratedPropertyObject> (UCD::property_object_table[UCD::sc])->GetPropertyValueEnumCode(v);                   
    115115                    if (valcode > 0) {
    116116                        name->setName("__get_scx_" + UCD::SC_ns::enum_names[valcode]);
     
    120120                else if (theprop == UCD::blk) {
    121121                    // Block property identified
    122                     int valcode = dynamic_cast<UCD::EnumeratedPropertyObject *> (UCD::property_object_table[UCD::blk])->GetPropertyValueEnumCode(v);                   
     122                    int valcode = dyn_cast<UCD::EnumeratedPropertyObject> (UCD::property_object_table[UCD::blk])->GetPropertyValueEnumCode(v);                   
    123123                    if (valcode > 0) {
    124124                        name->setName("__get_blk_" + UCD::BLK_ns::enum_names[valcode]);
     
    126126                    else throw UnicodePropertyExpressionError("Erroneous property value for block property");
    127127                }
    128                 else if (UCD::property_object_table[theprop]->the_kind == UCD::BinaryProperty){
     128                else if (UCD::property_object_table[theprop]->the_kind == UCD::PropertyObject::ClassTypeId::BinaryProperty){
    129129                    auto valit = UCD::Binary_ns::aliases_only_map.find(v);
    130130                    if (valit == UCD::Binary_ns::aliases_only_map.end()) {
     
    147147            else {
    148148                // No namespace (property) name.   Try as a general category.
    149                 int valcode = dynamic_cast<UCD::EnumeratedPropertyObject *> (UCD::property_object_table[UCD::gc])->GetPropertyValueEnumCode(v);
     149                int valcode = dyn_cast<UCD::EnumeratedPropertyObject> (UCD::property_object_table[UCD::gc])->GetPropertyValueEnumCode(v);
    150150                if (valcode > 0) {
    151151                    theprop = UCD::gc;
     
    153153                    return;
    154154                }
    155                 valcode = dynamic_cast<UCD::EnumeratedPropertyObject *> (UCD::property_object_table[UCD::sc])->GetPropertyValueEnumCode(v);
     155                valcode = dyn_cast<UCD::EnumeratedPropertyObject> (UCD::property_object_table[UCD::sc])->GetPropertyValueEnumCode(v);
    156156                if (valcode > 0) {
    157157                    theprop = UCD::sc;
     
    163163                if (propit != UCD::alias_map.end()) {
    164164                    theprop = propit->second;
    165                     if (UCD::property_object_table[theprop]->the_kind == UCD::BinaryProperty) {
     165                    if (UCD::property_object_table[theprop]->the_kind == UCD::PropertyObject::ClassTypeId::BinaryProperty) {
    166166                        name->setName("__get_" + lowercase(UCD::property_enum_name[theprop]) + "_Y");
    167167                        return;
Note: See TracChangeset for help on using the changeset viewer.