Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: Arrow generic code 4 : * Purpose: Arrow generic code 5 : * Author: Even Rouault, <even.rouault at spatialys.com> 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2022, Planet Labs 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #ifndef OGARROWDATASET_HPP_INCLUDED 14 : #define OGARROWDATASET_HPP_INCLUDED 15 : 16 : #include "ogr_arrow.h" 17 : 18 : /************************************************************************/ 19 : /* OGRArrowDataset() */ 20 : /************************************************************************/ 21 : 22 1665 : inline OGRArrowDataset::OGRArrowDataset( 23 1665 : const std::shared_ptr<arrow::MemoryPool> &poMemoryPool) 24 1665 : : m_poMemoryPool(poMemoryPool) 25 : { 26 1665 : } 27 : 28 : /************************************************************************/ 29 : /* SetLayer() */ 30 : /************************************************************************/ 31 : 32 1662 : inline void OGRArrowDataset::SetLayer(std::unique_ptr<OGRArrowLayer> &&poLayer) 33 : { 34 1662 : m_poLayer = std::move(poLayer); 35 1662 : } 36 : 37 : /************************************************************************/ 38 : /* RegisterDomainName() */ 39 : /************************************************************************/ 40 : 41 406 : inline void OGRArrowDataset::RegisterDomainName(const std::string &osDomainName, 42 : int iFieldIndex) 43 : { 44 406 : m_aosDomainNames.push_back(osDomainName); 45 406 : m_oMapDomainNameToCol[osDomainName] = iFieldIndex; 46 406 : } 47 : 48 : /************************************************************************/ 49 : /* GetFieldDomainNames() */ 50 : /************************************************************************/ 51 : 52 : inline std::vector<std::string> 53 15 : OGRArrowDataset::GetFieldDomainNames(CSLConstList) const 54 : { 55 15 : return m_aosDomainNames; 56 : } 57 : 58 : /************************************************************************/ 59 : /* GetFieldDomain() */ 60 : /************************************************************************/ 61 : 62 : inline const OGRFieldDomain * 63 74 : OGRArrowDataset::GetFieldDomain(const std::string &name) const 64 : { 65 : { 66 74 : const auto iter = m_oMapFieldDomains.find(name); 67 74 : if (iter != m_oMapFieldDomains.end()) 68 25 : return iter->second.get(); 69 : } 70 49 : const auto iter = m_oMapDomainNameToCol.find(name); 71 49 : if (iter == m_oMapDomainNameToCol.end()) 72 15 : return nullptr; 73 : return m_oMapFieldDomains 74 68 : .insert(std::pair(name, m_poLayer->BuildDomain(name, iter->second))) 75 34 : .first->second.get(); 76 : } 77 : 78 : /************************************************************************/ 79 : /* GetLayerCount() */ 80 : /************************************************************************/ 81 : 82 580 : inline int OGRArrowDataset::GetLayerCount() 83 : { 84 580 : return m_poLayer ? 1 : 0; 85 : } 86 : 87 : /************************************************************************/ 88 : /* GetLayer() */ 89 : /************************************************************************/ 90 : 91 1987 : inline OGRLayer *OGRArrowDataset::GetLayer(int idx) 92 : { 93 1987 : return idx == 0 ? m_poLayer.get() : nullptr; 94 : } 95 : 96 : #endif /* OGARROWDATASET_HPP_INCLUDED */