Skip to content

Commit 43de722

Browse files
committed
Add pcommon.Map helper to add a key to the map if does not exists
Signed-off-by: Bogdan Drutu <[email protected]>
1 parent 2335ec7 commit 43de722

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

.chloggen/get-or-put-empty.yaml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: enhancement
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. otlpreceiver)
7+
component: pdata
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Add pcommon.Map helper to add a key to the map if does not exists
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: [14023]
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext:
19+
20+
# Optional: The change log or logs in which this entry should be included.
21+
# e.g. '[user]' or '[user, api]'
22+
# Include 'user' if the change is relevant to end users.
23+
# Include 'api' if there is a change to a library API.
24+
# Default: '[user]'
25+
change_logs: [api]

pdata/pcommon/map.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,18 @@ func (m Map) PutEmpty(k string) Value {
121121
return newValue(&(*m.getOrig())[len(*m.getOrig())-1].Value, m.getState())
122122
}
123123

124+
// GetOrPutEmpty returns the Value associated with the key and true (loaded) if the key exists in the map,
125+
// otherwise inserts an empty value to the map under the given key and returns the inserted value
126+
// and false (loaded).
127+
func (m Map) GetOrPutEmpty(k string) (Value, bool) {
128+
m.getState().AssertMutable()
129+
if av, existing := m.Get(k); existing {
130+
return av, true
131+
}
132+
*m.getOrig() = append(*m.getOrig(), otlpcommon.KeyValue{Key: k})
133+
return newValue(&(*m.getOrig())[len(*m.getOrig())-1].Value, m.getState()), false
134+
}
135+
124136
// PutStr performs the Insert or Update action. The Value is
125137
// inserted to the map that did not originally have the key. The key/value is
126138
// updated to the map where the key already existed.

0 commit comments

Comments
 (0)