Internal change
PiperOrigin-RevId: 522206591
This commit is contained in:
parent
f67007d077
commit
7fe87936e5
|
@ -425,7 +425,10 @@ using GenericNode = Node<internal::Generic>;
|
||||||
template <class Calc>
|
template <class Calc>
|
||||||
class Node : public NodeBase {
|
class Node : public NodeBase {
|
||||||
public:
|
public:
|
||||||
Node() : NodeBase(std::string(Calc::kCalculatorName)) {}
|
Node()
|
||||||
|
: NodeBase(
|
||||||
|
FunctionRegistry<NodeBase>::GetLookupName(Calc::kCalculatorName)) {}
|
||||||
|
|
||||||
// Overrides the built-in calculator type string with the provided argument.
|
// Overrides the built-in calculator type string with the provided argument.
|
||||||
// Can be used to create nodes from pure interfaces.
|
// Can be used to create nodes from pure interfaces.
|
||||||
// TODO: only use this for pure interfaces
|
// TODO: only use this for pure interfaces
|
||||||
|
@ -546,6 +549,7 @@ class Graph {
|
||||||
|
|
||||||
// Creates a node of a specific type. Should be used for pure interfaces,
|
// Creates a node of a specific type. Should be used for pure interfaces,
|
||||||
// which do not have a built-in type string.
|
// which do not have a built-in type string.
|
||||||
|
// `type` is a calculator type-name with dot-separated namespaces.
|
||||||
template <class Calc>
|
template <class Calc>
|
||||||
Node<Calc>& AddNode(absl::string_view type) {
|
Node<Calc>& AddNode(absl::string_view type) {
|
||||||
auto node =
|
auto node =
|
||||||
|
@ -557,6 +561,7 @@ class Graph {
|
||||||
|
|
||||||
// Creates a generic node, with no compile-time checking of inputs and
|
// Creates a generic node, with no compile-time checking of inputs and
|
||||||
// outputs. This can be used for calculators whose contract is not visible.
|
// outputs. This can be used for calculators whose contract is not visible.
|
||||||
|
// `type` is a calculator type-name with dot-separated namespaces.
|
||||||
GenericNode& AddNode(absl::string_view type) {
|
GenericNode& AddNode(absl::string_view type) {
|
||||||
auto node =
|
auto node =
|
||||||
std::make_unique<GenericNode>(std::string(type.data(), type.size()));
|
std::make_unique<GenericNode>(std::string(type.data(), type.size()));
|
||||||
|
|
|
@ -301,6 +301,18 @@ class FunctionRegistry {
|
||||||
return cxx_name;
|
return cxx_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns a type name with '.' separated namespaces.
|
||||||
|
static std::string GetLookupName(const absl::string_view cxx_type_name) {
|
||||||
|
constexpr absl::string_view kCxxSep = "::";
|
||||||
|
constexpr absl::string_view kNameSep = ".";
|
||||||
|
std::vector<absl::string_view> names =
|
||||||
|
absl::StrSplit(cxx_type_name, kCxxSep);
|
||||||
|
if (names[0].empty()) {
|
||||||
|
names.erase(names.begin());
|
||||||
|
}
|
||||||
|
return absl::StrJoin(names, kNameSep);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
mutable absl::Mutex lock_;
|
mutable absl::Mutex lock_;
|
||||||
absl::flat_hash_map<std::string, Function> functions_ ABSL_GUARDED_BY(lock_);
|
absl::flat_hash_map<std::string, Function> functions_ ABSL_GUARDED_BY(lock_);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user