source: icGREP/icgrep-devel/icgrep/UCD/PropertyObjects.h @ 4626

Last change on this file since 4626 was 4626, checked in by nmedfort, 4 years ago

Temporary check-in for dynamic unicode class compilation.

File size: 3.5 KB
Line 
1#ifndef PROPERTYOBJECTS_H
2#define PROPERTYOBJECTS_H
3/*
4 *  Copyright (c) 2014 International Characters, Inc.
5 *  This software is licensed to the public under the Open Software License 3.0.
6 *  icgrep is a trademark of International Characters, Inc.
7 *
8 */
9
10#include "PropertyAliases.h"
11#include "PropertyValueAliases.h"
12#include "unicode_set.h"
13#include <string>
14#include <vector>
15#include <unordered_map>
16
17namespace UCD {
18
19    std::string canonicalize_value_name(const std::string & prop_or_val);
20
21        class PropertyObject {
22        public:
23        enum class ClassTypeId : unsigned {
24            NumericProperty, CodepointProperty, StringProperty, MiscellaneousProperty, EnumeratedProperty, CatalogProperty, BinaryProperty,  UnsupportedProperty
25        };
26        inline ClassTypeId getClassTypeId() const {
27            return the_kind;
28        }
29                PropertyObject(property_t p, ClassTypeId k) : the_property(p), the_kind(k) {}
30       
31                property_t the_property;
32                ClassTypeId the_kind;
33        };
34       
35        class UnsupportedPropertyObject : public PropertyObject {
36        public:
37        static inline bool classof(const PropertyObject * p) {
38            return p->getClassTypeId() == ClassTypeId::UnsupportedProperty;
39        }
40        static inline bool classof(const void *) {
41            return false;
42        }
43       
44                UnsupportedPropertyObject(property_t p, ClassTypeId k) : PropertyObject(p, k) {}
45        UnicodeSet GetCodepointSet(const std::string &);
46        UnicodeSet GetCodepointSet(const int);
47        };
48       
49        class EnumeratedPropertyObject : public PropertyObject {
50        public:
51        static inline bool classof(const PropertyObject * p) {
52            return p->getClassTypeId() == ClassTypeId::EnumeratedProperty;
53        }
54        static inline bool classof(const void *) {
55            return false;
56        }
57               
58                EnumeratedPropertyObject(UCD::property_t p, 
59                                 const std::vector<std::string> enum_names,
60                                 const std::vector<std::string> names,
61                                         const std::unordered_map<std::string, int> aliases,
62                                         const std::vector<UnicodeSet> sets) : 
63                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) {}
64        int GetPropertyValueEnumCode(const std::string & value_spec);
65        UnicodeSet GetCodepointSet(const std::string & value_spec);
66        UnicodeSet GetCodepointSet(const int property_enum_val) const;
67               
68        private:
69        const std::vector<std::string> property_value_enum_names;  // never changes
70        const std::vector<std::string> property_value_full_names;  // never changes
71                std::unordered_map<std::string, int> property_value_aliases;
72                bool aliases_initialized; // full names must be added dynamically.
73                std::vector<UnicodeSet> property_value_sets;                 
74        };
75       
76        class BinaryPropertyObject : public PropertyObject {
77        public:
78        static inline bool classof(const PropertyObject * p) {
79            return p->getClassTypeId() == ClassTypeId::BinaryProperty;
80        }
81        static inline bool classof(const void *) {
82            return false;
83        }
84               
85                BinaryPropertyObject(UCD::property_t p, UnicodeSet s) : PropertyObject(p, ClassTypeId::BinaryProperty), the_codepoint_set(s) {}
86        UnicodeSet GetCodepointSet(const std::string & value_spec) const;
87        UnicodeSet GetCodepointSet(const int property_enum_val) const;
88    private:
89                UnicodeSet the_codepoint_set;       
90        };
91       
92}
93       
94#endif
Note: See TracBrowser for help on using the repository browser.