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

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

More modifications to UnicodeSet? class.

File size: 3.4 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        virtual UnicodeSet GetCodepointSet(const std::string value_spec) = 0;
35        };
36       
37        class UnsupportedPropertyObject : public PropertyObject {
38        public:
39        static inline bool classof(const PropertyObject * p) {
40            return p->getClassTypeId() == ClassTypeId::UnsupportedProperty;
41        }
42        static inline bool classof(const void *) {
43            return false;
44        }
45       
46                UnsupportedPropertyObject(property_t p, ClassTypeId k) : PropertyObject(p, k) {}
47        UnicodeSet GetCodepointSet(const std::string value_spec);
48        };
49       
50        class EnumeratedPropertyObject : public PropertyObject {
51        public:
52        static inline bool classof(const PropertyObject * p) {
53            return p->getClassTypeId() == ClassTypeId::EnumeratedProperty;
54        }
55        static inline bool classof(const void *) {
56            return false;
57        }
58               
59                EnumeratedPropertyObject(UCD::property_t p, 
60                                 const std::vector<std::string> enum_names,
61                                 const std::vector<std::string> names,
62                                         const std::unordered_map<std::string, int> aliases,
63                                         const std::vector<UnicodeSet> sets) : 
64                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) {}
65        int GetPropertyValueEnumCode(const std::string s);
66        UnicodeSet GetCodepointSet(const std::string value_spec);
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);
87    private:
88                UnicodeSet the_codepoint_set;       
89        };
90       
91}
92       
93#endif
Note: See TracBrowser for help on using the repository browser.