🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
Identifier.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstUtil/IdentifierAPI.hpp"
25#include "AstUtil/StringView.hpp"
26#include <string>
27#include <memory.h>
28#include <cstring>
29
30AST_NAMESPACE_BEGIN
31
32
38private:
39 uint32_t length_; // 字符串长度(字节数)
40 char data_[1]; // 内联数据(柔性数组)
41
42 // 禁止拷贝和赋值
43 Identifier(const Identifier&) = delete;
44 Identifier& operator=(const Identifier&) = delete;
45
46 // 私有构造函数,只能通过IdentifierTable创建
47 Identifier(uint32_t len) : length_(len) {}
48
49public:
50 // 获取数据指针
51 const char* data() const { return data_; }
52 char* data() { return data_; }
53
54
55 // 获取长度
56 uint32_t length() const { return length_; }
57
58 // 转换为C字符串
59 const char* c_str() const {
60 return data_;
61 }
62
63 // 转换为std::string
64 std::string toString() const {
65 return std::string(data_, length_);
66 }
67
68 // 比较操作
69 bool equals(const char* str, size_t len) const {
70 if (len != length_) return false;
71 return memcmp(data_, str, len) == 0;
72 }
73
74 bool equals(const char* str) const {
75 return equals(str, std::char_traits<char>::length(str));
76 }
77
78 bool equals(const std::string& str) const {
79 return equals(str.c_str(), str.length());
80 }
81
82 bool equals(StringView sv) const {
83 return equals(sv.data(), sv.size());
84 }
85
87 static size_t hash(const char* data, size_t len) {
88 // DJB2哈希算法
89 size_t h = 5381;
90 for (size_t i = 0; i < len; ++i) {
91 h = ((h << 5) + h) + static_cast<unsigned char>(data[i]);
92 }
93 return h;
94 }
95
96 // 计算哈希值
97 size_t hash() const {
98 // DJB2哈希算法
99 return hash(data_, length_);
100 }
101
102
103 // 检查是否以特定前缀开头
104 bool starts_with(const char* prefix) const {
105 size_t prefix_len = strlen(prefix);
106 if (static_cast<size_t>(length_) < prefix_len) return false;
107 return memcmp(data_, prefix, prefix_len) == 0;
108 }
109
110 bool starts_with(const std::string& prefix) const {
111 return starts_with(prefix.c_str());
112 }
113
114 // 检查是否以特定后缀结尾
115 bool ends_with(const char* suffix) const {
116 size_t suffix_len = strlen(suffix);
117 if (static_cast<size_t>(length_) < suffix_len) return false;
118 return memcmp(data_ + length_ - suffix_len, suffix, suffix_len) == 0;
119 }
120
121 bool ends_with(const std::string& suffix) const {
122 return ends_with(suffix.c_str());
123 }
124
125 // 友元类,允许IdentifierTable访问私有构造函数
126 friend class IdentifierTable;
127};
128
129
130AST_NAMESPACE_END
Unit h
小时
定义 Unit.cpp:429
标识符类
定义 Identifier.hpp:37
static size_t hash(const char *data, size_t len)
计算哈希值
定义 Identifier.hpp:87