1
1
/*
2
- * Copyright (C) 2019-2021 HERE Europe B.V.
2
+ * Copyright (C) 2019-2024 HERE Europe B.V.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
19
19
20
20
#include " olp/core/client/HRN.h"
21
21
22
- #include < sstream >
22
+ #include < cstring >
23
23
24
24
#include < olp/core/logging/Log.h>
25
25
#include < olp/core/porting/make_unique.h>
@@ -38,45 +38,103 @@ namespace olp {
38
38
namespace client {
39
39
40
40
std::string HRN::ToString () const {
41
- std::ostringstream ret;
42
- const auto generic_part =
43
- kSeparator + region_ + kSeparator + account_ + kSeparator ;
44
- ret << kHrnTag << partition_ << kSeparator ;
41
+ std::string ret;
45
42
46
43
switch (service_) {
47
44
case ServiceType::Data: {
48
- ret << kDataTag << generic_part << catalog_id_;
45
+ ret.reserve (std::strlen (kHrnTag ) + std::strlen (kDataTag ) +
46
+ 5 * sizeof (kSeparator ) + partition_.size () + region_.size () +
47
+ account_.size () + catalog_id_.size () + layer_id_.size ());
48
+ ret.append (kHrnTag )
49
+ .append (partition_)
50
+ .append (1 , kSeparator )
51
+ .append (kDataTag )
52
+ .append (1 , kSeparator )
53
+ .append (region_)
54
+ .append (1 , kSeparator )
55
+ .append (account_)
56
+ .append (1 , kSeparator )
57
+ .append (catalog_id_);
49
58
if (!layer_id_.empty ()) {
50
- ret << kSeparator << layer_id_;
59
+ ret. append ( 1 , kSeparator ). append ( layer_id_) ;
51
60
}
52
61
break ;
53
62
}
54
63
case ServiceType::Schema: {
55
- ret << kSchemaTag << generic_part << group_id_ << kSeparator
56
- << schema_name_ << kSeparator << version_;
64
+ ret.reserve (std::strlen (kHrnTag ) + std::strlen (kSchemaTag ) +
65
+ 6 * sizeof (kSeparator ) + partition_.size () + region_.size () +
66
+ account_.size () + group_id_.size () + schema_name_.size () +
67
+ version_.size ());
68
+ ret.append (kHrnTag )
69
+ .append (partition_)
70
+ .append (1 , kSeparator )
71
+ .append (kSchemaTag )
72
+ .append (1 , kSeparator )
73
+ .append (region_)
74
+ .append (1 , kSeparator )
75
+ .append (account_)
76
+ .append (1 , kSeparator )
77
+ .append (group_id_)
78
+ .append (1 , kSeparator )
79
+ .append (schema_name_)
80
+ .append (1 , kSeparator )
81
+ .append (version_);
57
82
break ;
58
83
}
59
84
case ServiceType::Pipeline: {
60
- ret << kPipelineTag << generic_part << pipeline_id_;
85
+ ret.reserve (std::strlen (kHrnTag ) + std::strlen (kPipelineTag ) +
86
+ 4 * sizeof (kSeparator ) + partition_.size () + region_.size () +
87
+ account_.size () + pipeline_id_.size ());
88
+ ret.append (kHrnTag )
89
+ .append (partition_)
90
+ .append (1 , kSeparator )
91
+ .append (kPipelineTag )
92
+ .append (1 , kSeparator )
93
+ .append (region_)
94
+ .append (1 , kSeparator )
95
+ .append (account_)
96
+ .append (1 , kSeparator )
97
+ .append (pipeline_id_);
61
98
break ;
62
99
}
63
100
default : {
64
- ret << generic_part;
101
+ ret.reserve (std::strlen (kHrnTag ) + 4 * sizeof (kSeparator ) +
102
+ partition_.size () + region_.size () + account_.size ());
103
+ ret.append (kHrnTag )
104
+ .append (partition_)
105
+ .append (1 , kSeparator )
106
+ .append (1 , kSeparator )
107
+ .append (region_)
108
+ .append (1 , kSeparator )
109
+ .append (account_)
110
+ .append (1 , kSeparator );
65
111
break ;
66
112
}
67
113
}
68
114
69
- return ret. str () ;
115
+ return ret;
70
116
}
71
117
72
118
std::string HRN::ToCatalogHRNString () const {
119
+ std::string ret;
73
120
if (service_ != ServiceType::Data) {
74
121
OLP_SDK_LOG_WARNING_F (kLogTag , " ToCatalogHRNString: ServiceType != Data" );
75
- return {} ;
122
+ return ret ;
76
123
}
77
-
78
- return kHrnTag + partition_ + kSeparator + kDataTag + kSeparator + region_ +
79
- kSeparator + account_ + kSeparator + catalog_id_;
124
+ ret.reserve (std::strlen (kHrnTag ) + std::strlen (kDataTag ) +
125
+ 4 * sizeof (kSeparator ) + partition_.size () + region_.size () +
126
+ account_.size () + catalog_id_.size ());
127
+ ret.append (kHrnTag )
128
+ .append (partition_)
129
+ .append (1 , kSeparator )
130
+ .append (kDataTag )
131
+ .append (1 , kSeparator )
132
+ .append (region_)
133
+ .append (1 , kSeparator )
134
+ .append (account_)
135
+ .append (1 , kSeparator )
136
+ .append (catalog_id_);
137
+ return ret;
80
138
}
81
139
82
140
HRN::HRN (const std::string& input) {
0 commit comments