]> git.proxmox.com Git - ceph.git/blob - ceph/src/arrow/csharp/src/Apache.Arrow/Ipc/ArrowStreamReader.cs
import quincy 17.2.0
[ceph.git] / ceph / src / arrow / csharp / src / Apache.Arrow / Ipc / ArrowStreamReader.cs
1 // Licensed to the Apache Software Foundation (ASF) under one or more
2 // contributor license agreements. See the NOTICE file distributed with
3 // this work for additional information regarding copyright ownership.
4 // The ASF licenses this file to You under the Apache License, Version 2.0
5 // (the "License"); you may not use this file except in compliance with
6 // the License. You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15
16 using Apache.Arrow.Memory;
17 using System;
18 using System.IO;
19 using System.Threading;
20 using System.Threading.Tasks;
21
22 namespace Apache.Arrow.Ipc
23 {
24 /// <summary>
25 /// Represents a reader that can read Arrow streams.
26 /// </summary>
27 public class ArrowStreamReader : IArrowReader, IDisposable
28 {
29 private protected readonly ArrowReaderImplementation _implementation;
30
31 public Schema Schema => _implementation.Schema;
32
33 public ArrowStreamReader(Stream stream)
34 : this(stream, allocator: null, leaveOpen: false)
35 {
36 }
37
38 public ArrowStreamReader(Stream stream, MemoryAllocator allocator)
39 : this(stream, allocator, leaveOpen: false)
40 {
41 }
42
43 public ArrowStreamReader(Stream stream, bool leaveOpen)
44 : this(stream, allocator: null, leaveOpen)
45 {
46 }
47
48 public ArrowStreamReader(Stream stream, MemoryAllocator allocator, bool leaveOpen)
49 {
50 if (stream == null)
51 throw new ArgumentNullException(nameof(stream));
52
53 _implementation = new ArrowStreamReaderImplementation(stream, allocator, leaveOpen);
54 }
55
56 public ArrowStreamReader(ReadOnlyMemory<byte> buffer)
57 {
58 _implementation = new ArrowMemoryReaderImplementation(buffer);
59 }
60
61 private protected ArrowStreamReader(ArrowReaderImplementation implementation)
62 {
63 _implementation = implementation;
64 }
65
66 public void Dispose()
67 {
68 Dispose(true);
69 GC.SuppressFinalize(this);
70 }
71
72 protected virtual void Dispose(bool disposing)
73 {
74 if (disposing)
75 {
76 _implementation.Dispose();
77 }
78 }
79
80 public ValueTask<RecordBatch> ReadNextRecordBatchAsync(CancellationToken cancellationToken = default)
81 {
82 return _implementation.ReadNextRecordBatchAsync(cancellationToken);
83 }
84
85 public RecordBatch ReadNextRecordBatch()
86 {
87 return _implementation.ReadNextRecordBatch();
88 }
89 }
90 }