Skip to content

Commit

Permalink
Wrapper for std::set<> that overrides the allocator.
Browse files Browse the repository at this point in the history
  • Loading branch information
markdroth committed Oct 3, 2019
1 parent c8c755a commit 9a77a11
Show file tree
Hide file tree
Showing 12 changed files with 49 additions and 4 deletions.
1 change: 1 addition & 0 deletions BUILD
Expand Up @@ -521,6 +521,7 @@ grpc_cc_library(
"src/core/lib/gprpp/map.h",
"src/core/lib/gprpp/memory.h",
"src/core/lib/gprpp/mpscq.h",
"src/core/lib/gprpp/set.h",
"src/core/lib/gprpp/string_view.h",
"src/core/lib/gprpp/sync.h",
"src/core/lib/gprpp/thd.h",
Expand Down
2 changes: 2 additions & 0 deletions BUILD.gn
Expand Up @@ -149,6 +149,7 @@ config("grpc_config") {
"src/core/lib/gprpp/memory.h",
"src/core/lib/gprpp/mpscq.cc",
"src/core/lib/gprpp/mpscq.h",
"src/core/lib/gprpp/set.h",
"src/core/lib/gprpp/sync.h",
"src/core/lib/gprpp/thd.h",
"src/core/lib/gprpp/thd_posix.cc",
Expand Down Expand Up @@ -1253,6 +1254,7 @@ config("grpc_config") {
"src/core/lib/gprpp/orphanable.h",
"src/core/lib/gprpp/ref_counted.h",
"src/core/lib/gprpp/ref_counted_ptr.h",
"src/core/lib/gprpp/set.h",
"src/core/lib/gprpp/string_view.h",
"src/core/lib/gprpp/sync.h",
"src/core/lib/gprpp/thd.h",
Expand Down
1 change: 1 addition & 0 deletions build.yaml
Expand Up @@ -291,6 +291,7 @@ filegroups:
- src/core/lib/gprpp/map.h
- src/core/lib/gprpp/memory.h
- src/core/lib/gprpp/mpscq.h
- src/core/lib/gprpp/set.h
- src/core/lib/gprpp/sync.h
- src/core/lib/gprpp/thd.h
- src/core/lib/profiling/timers.h
Expand Down
1 change: 1 addition & 0 deletions gRPC-C++.podspec
Expand Up @@ -311,6 +311,7 @@ Pod::Spec.new do |s|
'src/core/lib/gprpp/map.h',
'src/core/lib/gprpp/memory.h',
'src/core/lib/gprpp/mpscq.h',
'src/core/lib/gprpp/set.h',
'src/core/lib/gprpp/sync.h',
'src/core/lib/gprpp/thd.h',
'src/core/lib/profiling/timers.h',
Expand Down
2 changes: 2 additions & 0 deletions gRPC-Core.podspec
Expand Up @@ -214,6 +214,7 @@ Pod::Spec.new do |s|
'src/core/lib/gprpp/map.h',
'src/core/lib/gprpp/memory.h',
'src/core/lib/gprpp/mpscq.h',
'src/core/lib/gprpp/set.h',
'src/core/lib/gprpp/sync.h',
'src/core/lib/gprpp/thd.h',
'src/core/lib/profiling/timers.h',
Expand Down Expand Up @@ -988,6 +989,7 @@ Pod::Spec.new do |s|
'src/core/lib/gprpp/map.h',
'src/core/lib/gprpp/memory.h',
'src/core/lib/gprpp/mpscq.h',
'src/core/lib/gprpp/set.h',
'src/core/lib/gprpp/sync.h',
'src/core/lib/gprpp/thd.h',
'src/core/lib/profiling/timers.h',
Expand Down
1 change: 1 addition & 0 deletions grpc.gemspec
Expand Up @@ -108,6 +108,7 @@ Gem::Specification.new do |s|
s.files += %w( src/core/lib/gprpp/map.h )
s.files += %w( src/core/lib/gprpp/memory.h )
s.files += %w( src/core/lib/gprpp/mpscq.h )
s.files += %w( src/core/lib/gprpp/set.h )
s.files += %w( src/core/lib/gprpp/sync.h )
s.files += %w( src/core/lib/gprpp/thd.h )
s.files += %w( src/core/lib/profiling/timers.h )
Expand Down
1 change: 1 addition & 0 deletions package.xml
Expand Up @@ -113,6 +113,7 @@
<file baseinstalldir="/" name="src/core/lib/gprpp/map.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/memory.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/mpscq.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/set.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/sync.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/gprpp/thd.h" role="src" />
<file baseinstalldir="/" name="src/core/lib/profiling/timers.h" role="src" />
Expand Down
6 changes: 2 additions & 4 deletions src/core/ext/filters/client_channel/client_channel.cc
Expand Up @@ -26,9 +26,6 @@
#include <stdio.h>
#include <string.h>

#include <map>
#include <set>

#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
Expand Down Expand Up @@ -56,6 +53,7 @@
#include "src/core/lib/gprpp/inlined_vector.h"
#include "src/core/lib/gprpp/manual_constructor.h"
#include "src/core/lib/gprpp/map.h"
#include "src/core/lib/gprpp/set.h"
#include "src/core/lib/gprpp/sync.h"
#include "src/core/lib/iomgr/combiner.h"
#include "src/core/lib/iomgr/iomgr.h"
Expand Down Expand Up @@ -297,7 +295,7 @@ class ChannelData {
// The set of SubchannelWrappers that currently exist.
// No need to hold a ref, since the map is updated in the control-plane
// combiner when the SubchannelWrappers are created and destroyed.
std::set<SubchannelWrapper*> subchannel_wrappers_;
Set<SubchannelWrapper*> subchannel_wrappers_;
// Pending ConnectedSubchannel updates for each SubchannelWrapper.
// Updates are queued here in the control plane combiner and then applied
// in the data plane mutex when the picker is updated.
Expand Down
3 changes: 3 additions & 0 deletions src/core/lib/gprpp/memory.h
Expand Up @@ -103,6 +103,9 @@ class Allocator {
};
typedef std::true_type is_always_equal;

template <class U>
Allocator(const Allocator<U>&) {}

pointer address(reference x) const { return &x; }
const_pointer address(const_reference x) const { return &x; }
pointer allocate(std::size_t n,
Expand Down
33 changes: 33 additions & 0 deletions src/core/lib/gprpp/set.h
@@ -0,0 +1,33 @@
//
// Copyright 2017 gRPC authors.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

#ifndef GRPC_CORE_LIB_GPRPP_SET_H
#define GRPC_CORE_LIB_GPRPP_SET_H

#include <grpc/support/port_platform.h>

#include <set>

#include "src/core/lib/gprpp/memory.h"

namespace grpc_core {

template <typename T, typename Compare = std::less<T>>
using Set = std::set<T, Compare, Allocator<T>>;

} // namespace grpc_core

#endif /* GRPC_CORE_LIB_GPRPP_SET_H */
1 change: 1 addition & 0 deletions tools/doxygen/Doxyfile.c++.internal
Expand Up @@ -1119,6 +1119,7 @@ src/core/lib/gprpp/optional.h \
src/core/lib/gprpp/orphanable.h \
src/core/lib/gprpp/ref_counted.h \
src/core/lib/gprpp/ref_counted_ptr.h \
src/core/lib/gprpp/set.h \
src/core/lib/gprpp/string_view.h \
src/core/lib/gprpp/sync.h \
src/core/lib/gprpp/thd.h \
Expand Down
1 change: 1 addition & 0 deletions tools/doxygen/Doxyfile.core.internal
Expand Up @@ -1255,6 +1255,7 @@ src/core/lib/gprpp/optional.h \
src/core/lib/gprpp/orphanable.h \
src/core/lib/gprpp/ref_counted.h \
src/core/lib/gprpp/ref_counted_ptr.h \
src/core/lib/gprpp/set.h \
src/core/lib/gprpp/string_view.h \
src/core/lib/gprpp/sync.h \
src/core/lib/gprpp/thd.h \
Expand Down

0 comments on commit 9a77a11

Please sign in to comment.