Ignore:
Timestamp:
Jun 26, 2015, 3:27:40 PM (4 years ago)
Author:
nmedfort
Message:

More modifications to UnicodeSet? class.

File:
1 edited

Legend:

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

    r4538 r4618  
    88 */
    99
     10#include "PropertyAliases.h"
     11#include "PropertyValueAliases.h"
     12#include "unicode_set.h"
    1013#include <string>
    1114#include <vector>
    12 #include <iostream>
    1315#include <unordered_map>
    14 #include <stdexcept>
    15 #include "unicode_set.h"
    16 #include "PropertyAliases.h"
    17 #include "PropertyValueAliases.h"
    18 
    19 std::string canonicalize_value_name(std::string prop_or_val) {
    20         std::locale loc;
    21         std::string s = "";
    22         for (unsigned int i = 0; i < prop_or_val.length(); ++i) {
    23                 char c = prop_or_val.at(i);
    24                 if ((c != '_') && (c != ' ') && (c != '-')) {
    25                         s += std::tolower(c, loc);
    26                 }
    27         }
    28         return s;
    29 }
    30 
    3116
    3217namespace UCD {
    33    
     18
     19    std::string canonicalize_value_name(const std::string prop_or_val);
     20
    3421        class PropertyObject {
    3522        public:
     
    4532                ClassTypeId the_kind;
    4633               
    47                 virtual UnicodeSet GetCodepointSet(std::string value_spec) = 0;
     34        virtual UnicodeSet GetCodepointSet(const std::string value_spec) = 0;
    4835        };
    4936       
     
    5845       
    5946                UnsupportedPropertyObject(property_t p, ClassTypeId k) : PropertyObject(p, k) {}
    60                 UnicodeSet GetCodepointSet(std::string value_spec);     
     47        UnicodeSet GetCodepointSet(const std::string value_spec);
    6148        };
    62        
    63         UnicodeSet UnsupportedPropertyObject::GetCodepointSet(std::string value_spec) {
    64                 throw std::runtime_error("Property " + UCD::property_full_name[the_property] + " unsupported.");
    65         }
    6649       
    6750        class EnumeratedPropertyObject : public PropertyObject {
     
    8063                                         const std::vector<UnicodeSet> sets) :
    8164                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) {}
    82                 int GetPropertyValueEnumCode(std::string s);
    83                 UnicodeSet GetCodepointSet(std::string value_spec);     
     65        int GetPropertyValueEnumCode(const std::string s);
     66        UnicodeSet GetCodepointSet(const std::string value_spec);
    8467               
    8568        private:
     
    9073                std::vector<UnicodeSet> property_value_sets;                 
    9174        };
    92        
    93         UnicodeSet EnumeratedPropertyObject::GetCodepointSet(std::string value_spec) {
    94                 int property_enum_val = GetPropertyValueEnumCode(value_spec);
    95                 if (property_enum_val == -1) {
    96                         throw std::runtime_error("Enumerated Property " + UCD::property_full_name[the_property] +  ": unknown value: " + value_spec);
    97                 }
    98                 else {
    99                         //std::cout << "Enumerated Property: " << UCD::property_full_name[the_property] << ", value: " << property_value_full_names[property_enum_val] << "(" << property_enum_val << ").\n";
    100                         return property_value_sets[property_enum_val];
    101                 }
    102         }
    103        
    104         int EnumeratedPropertyObject::GetPropertyValueEnumCode(std::string s) {
    105                 // The canonical full names are not stored in the precomputed alias map,
    106                 // to save space in the executable.   Add them if the property is used.
    107                 if (!aliases_initialized) {
    108             for (auto v = 0; v < property_value_full_names.size(); v++) {
    109                 property_value_aliases.insert({canonicalize_value_name(property_value_full_names[v]), v});
    110             }
    111             for (auto v = 0; v < property_value_enum_names.size(); v++) {
    112                 property_value_aliases.insert({canonicalize_value_name(property_value_enum_names[v]), v});
    113             }
    114                         aliases_initialized = true;
    115                 }
    116                 auto valit = property_value_aliases.find(s);
    117                 if (valit == property_value_aliases.end()) return -1;
    118                 else return valit->second;
    119         }
    12075       
    12176        class BinaryPropertyObject : public PropertyObject {
     
    12984               
    13085                BinaryPropertyObject(UCD::property_t p, UnicodeSet s) : PropertyObject(p, ClassTypeId::BinaryProperty), the_codepoint_set(s) {}
    131                 UnicodeSet GetCodepointSet(std::string value_spec);     
     86        UnicodeSet GetCodepointSet(const std::string value_spec);
    13287    private:
    13388                UnicodeSet the_codepoint_set;       
    13489        };
    13590       
    136         UnicodeSet BinaryPropertyObject::GetCodepointSet(std::string value_spec) {
    137                 int property_enum_val = Binary_ns::Y; // default value
    138                 if (value_spec != "") {
    139                         auto valit = Binary_ns::aliases_only_map.find(value_spec);
    140                         if (valit == Binary_ns::aliases_only_map.end()) {
    141                                 throw std::runtime_error("Binary Property " + UCD::property_full_name[the_property] +  ": bad value: " + value_spec);
    142                         }
    143                         else property_enum_val = valit->second;
    144                         if (property_enum_val == Binary_ns::Y) return the_codepoint_set;
    145                         else return uset_complement(the_codepoint_set);
    146                 }
    147         else return the_codepoint_set;
    148         }
    14991}
    15092       
Note: See TracChangeset for help on using the changeset viewer.