From b34215496ecdbb10a40305fb9f7bccd8f7e81383 Mon Sep 17 00:00:00 2001
From: Michael Buehlmann <buehlmann.michi@gmail.com>
Date: Mon, 15 May 2023 16:15:43 -0500
Subject: [PATCH] add hasVariable function to GenericIO

---
 GenericIO.cxx        | 11 +++++++++++
 GenericIO.h          |  2 ++
 python/genericio.cpp |  1 +
 3 files changed, 14 insertions(+)

diff --git a/GenericIO.cxx b/GenericIO.cxx
index ac00f34..091a9be 100644
--- a/GenericIO.cxx
+++ b/GenericIO.cxx
@@ -1863,6 +1863,17 @@ void GenericIO::getVariableInfo(vector<VariableInfo> &VI) {
   }
 }
 
+bool GenericIO::hasVariable(const std::string &Name) {
+  vector<VariableInfo> VI;
+  getVariableInfo(VI);
+
+  for (size_t i = 0; i < VI.size(); ++i)
+    if (VI[i].Name == Name)
+      return true;
+
+  return false;
+}
+
 void GenericIO::setNaturalDefaultPartition() {
 #ifdef __bgq__
   DefaultPartition = MPIX_IO_link_id();
diff --git a/GenericIO.h b/GenericIO.h
index 02bf685..2b3df11 100644
--- a/GenericIO.h
+++ b/GenericIO.h
@@ -434,6 +434,8 @@ public:
 
   void getVariableInfo(std::vector<VariableInfo> &VI);
 
+  bool hasVariable(const std::string &Name);
+
   std::size_t readNumElems(int EffRank = -1);
   void readCoords(int Coords[3], int EffRank = -1);
   int readGlobalRankNumber(int EffRank = -1);
diff --git a/python/genericio.cpp b/python/genericio.cpp
index a29d478..1ee9b54 100644
--- a/python/genericio.cpp
+++ b/python/genericio.cpp
@@ -377,6 +377,7 @@ PYBIND11_MODULE(pygio, m) {
         py::arg("eff_rank")=-1)
       .def("read_nranks", (int (PyGenericIO::*)(void))(&PyGenericIO::readNRanks))
       .def("read_variable_names", &PyGenericIO::read_variable_names)
+      .def("has_variable", &PyGenericIO::hasVariable)
       .def("read_variable_dtypes", &PyGenericIO::read_variable_dtypes)
       .def("get_source_ranks", &PyGenericIO::getSourceRanks)
       .def_static("setDefaultShouldCompress", &PyGenericIO::setDefaultShouldCompress)
-- 
GitLab