1
#pragma once
2

            
3
#include "envoy/upstream/load_balancer.h"
4

            
5
namespace Envoy {
6
namespace Upstream {
7

            
8
/**
9
 * Base class for cluster provided load balancers and load balancers specified by load balancing
10
 * policy config. This class should be extended directly if the load balancing policy specifies a
11
 * thread-aware load balancer.
12
 *
13
 * TODO: provide a ThreadLocalLoadBalancer construct to abstract away thread-awareness from load
14
 * balancing extensions that don't require it.
15
 */
16
template <class Proto> class TypedLoadBalancerFactoryBase : public TypedLoadBalancerFactory {
17
public:
18
  // Upstream::TypedLoadBalancerFactory
19
85879
  std::string name() const override { return name_; }
20

            
21
8222
  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
22
8222
    return ProtobufTypes::MessagePtr{new Proto()};
23
8222
  }
24

            
25
protected:
26
3895
  TypedLoadBalancerFactoryBase(const std::string& name) : name_(name) {}
27

            
28
private:
29
  const std::string name_;
30
};
31

            
32
} // namespace Upstream
33
} // namespace Envoy