wgtmac commented on code in PR #347:
URL: https://github.com/apache/iceberg-cpp/pull/347#discussion_r2565550764
##########
src/iceberg/util/type_util.h:
##########
@@ -20,16 +20,208 @@
#pragma once
#include <functional>
+#include <memory>
+#include <span>
#include <stack>
+#include <string>
+#include <string_view>
+#include <unordered_map>
+#include <unordered_set>
+#include <vector>
+#include "iceberg/result.h"
+#include "iceberg/schema_field.h"
#include "iceberg/type.h"
+#include "iceberg/util/checked_cast.h"
+#include "iceberg/util/formatter_internal.h"
+#include "iceberg/util/string_util.h"
+#include "iceberg/util/visit_type.h"
/// \file iceberg/util/type_util.h
-/// Utility functions for Iceberg types.
+/// Utility functions and visitors for Iceberg types.
namespace iceberg {
+/// \brief Visitor for building a map from field ID to SchemaField reference.
+class IdToFieldVisitor {
+ public:
+ explicit IdToFieldVisitor(
+ std::unordered_map<int32_t, std::reference_wrapper<const SchemaField>>&
+ id_to_field);
+ Status Visit(const PrimitiveType& type);
+ Status Visit(const NestedType& type);
+
+ private:
+ std::unordered_map<int32_t, std::reference_wrapper<const SchemaField>>&
id_to_field_;
+};
+
+/// \brief Visitor for building a map from field name to field ID.
+class NameToIdVisitor {
+ public:
+ explicit NameToIdVisitor(
+ std::unordered_map<std::string, int32_t, StringHash, std::equal_to<>>&
name_to_id,
+ bool case_sensitive = true,
+ std::function<std::string(std::string_view)> quoting_func = {});
+ Status Visit(const ListType& type, const std::string& path,
+ const std::string& short_path);
+ Status Visit(const MapType& type, const std::string& path,
+ const std::string& short_path);
+ Status Visit(const StructType& type, const std::string& path,
+ const std::string& short_path);
+ Status Visit(const PrimitiveType& type, const std::string& path,
+ const std::string& short_path);
+ void Finish();
+
+ private:
+ std::string BuildPath(std::string_view prefix, std::string_view field_name,
+ bool case_sensitive);
+
+ private:
+ bool case_sensitive_;
+ std::unordered_map<std::string, int32_t, StringHash, std::equal_to<>>&
name_to_id_;
+ std::unordered_map<std::string, int32_t, StringHash, std::equal_to<>>
short_name_to_id_;
+ std::function<std::string(std::string_view)> quoting_func_;
+};
+
+/// \brief Visitor for building a map from field ID to position path.
+class PositionPathVisitor {
+ public:
+ Status Visit(const PrimitiveType& type) {
Review Comment:
What about moving all function definitions to type_util.cc?
##########
src/iceberg/util/type_util.h:
##########
@@ -20,16 +20,208 @@
#pragma once
#include <functional>
+#include <memory>
+#include <span>
#include <stack>
+#include <string>
+#include <string_view>
+#include <unordered_map>
+#include <unordered_set>
+#include <vector>
+#include "iceberg/result.h"
+#include "iceberg/schema_field.h"
Review Comment:
Let's remove most header files by using forward declaration (i.e. include
type_fwd.h) as much as possible.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]