You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ap...@apache.org on 2023/01/12 13:26:09 UTC

[arrow] branch master updated: GH-15292: [C++] Typeclass alias is missing in ExtensionArray (#15293)

This is an automated email from the ASF dual-hosted git repository.

apitrou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/master by this push:
     new df2aa384ee GH-15292: [C++] Typeclass alias is missing in ExtensionArray (#15293)
df2aa384ee is described below

commit df2aa384eedc6dfd2a816f66e3ef8af1ecda3e8f
Author: Jin Shang <sh...@gmail.com>
AuthorDate: Thu Jan 12 21:26:02 2023 +0800

    GH-15292: [C++] Typeclass alias is missing in ExtensionArray (#15293)
    
    # Which issue does this PR close?
    
    <!--
    Thanks for opening a pull request!
    If this is your first pull request you can find detailed information on how
    to contribute here:
      * [New Contributor's Guide](https://arrow.apache.org/docs/dev/developers/guide/step_by_step/pr_lifecycle.html#reviews-and-merge-of-the-pull-request)
      * [Contributing Overview](https://arrow.apache.org/docs/dev/developers/overview.html)
    
    
    If this is not a [minor PR](https://github.com/apache/arrow/blob/master/CONTRIBUTING.md#Minor-Fixes). Could you open an issue for this pull request on GitHub? https://github.com/apache/arrow/issues/new/choose
    
    Opening GitHub issues ahead of time contributes to the [Openness](http://theapacheway.com/open/#:~:text=Openness%20allows%20new%20users%20the,must%20happen%20in%20the%20open.) of the Apache Arrow project.
    
    Then could you also rename the pull request title in the following format?
    
        GH-${GITHUB_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}
    
    or
    
        MINOR: [${COMPONENT}] ${SUMMARY}
    
    In the case of old issues on JIRA the title also supports:
    
        ARROW-${JIRA_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}
        PARQUET-${JIRA_ISSUE_ID}: [${COMPONENT}] ${SUMMARY}
    
    -->
    Closes #15292
    
    # Rationale for this change
    
    <!--
     Why are you proposing this change? If this is already explained clearly in the issue then this section is not needed.
     Explaining clearly why changes are proposed helps reviewers understand your changes and offer better suggestions for fixes.
    -->
    
    All array classes have the `using TypeClass = xxx` type alias except for ExtensionArray.
    
    With the alias, it will be easier to write templated inline visitors such as the following code block:
    
    ```Cpp
    class ExampleVisitor {
     public:
      template <typename T>
      Status Visit(const T& arr) {
        if constexpr (arrow::is_number_type<typename T::TypeClass>::value) {
          ///
        } else {
          ///
        }
        return Status::OK();
      }
    };
    ```
    
    Current it fails to compile with message: `No type named 'TypeClass' in 'arrow::ExtensionArray'`.
    * Closes: #15292
    
    Authored-by: Jin Shang <sh...@gmail.com>
    Signed-off-by: Antoine Pitrou <an...@python.org>
---
 cpp/src/arrow/extension_type.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/cpp/src/arrow/extension_type.h b/cpp/src/arrow/extension_type.h
index badbdbd981..dd004118e8 100644
--- a/cpp/src/arrow/extension_type.h
+++ b/cpp/src/arrow/extension_type.h
@@ -103,6 +103,7 @@ class ARROW_EXPORT ExtensionType : public DataType {
 /// \brief Base array class for user-defined extension types
 class ARROW_EXPORT ExtensionArray : public Array {
  public:
+  using TypeClass = ExtensionType;
   /// \brief Construct an ExtensionArray from an ArrayData.
   ///
   /// The ArrayData must have the right ExtensionType.