casacore
Loading...
Searching...
No Matches
dyscostmancol.h
Go to the documentation of this file.
1#ifndef DYSCO_STORAGE_MAN_COLUMN_H
2#define DYSCO_STORAGE_MAN_COLUMN_H
3
4#include "dyscodistribution.h"
6
7#include <casacore/tables/DataMan/StManColumnBase.h>
8
10
11#include <cstdint>
12#include <map>
13
14namespace dyscostman {
15
16class DyscoStMan;
17
23 public:
31
33 virtual ~DyscoStManColumn() {}
34
36 virtual void shutdown() = 0;
37
42 virtual casacore::Bool isWritable() const override { return true; }
43
44 virtual void Prepare(DyscoDistribution distribution, Normalization normalization,
45 double studentsTNu, double distributionTruncation) = 0;
46
48
49 virtual size_t CalculateBlockSize(size_t nRowsInBlock, size_t nAntennae) const = 0;
50
56 virtual size_t ExtraHeaderSize() const { return 0; }
57
58 virtual void SerializeExtraHeader(std::ostream &stream) const = 0;
59
60 virtual void UnserializeExtraHeader(std::istream &stream) = 0;
61
62 size_t OffsetInBlock() const { return _offsetInBlock; }
63
64 void SetOffsetInBlock(size_t offsetInBlock) { _offsetInBlock = offsetInBlock; }
65
66 protected:
69
76 void readCompressedData(size_t blockIndex, unsigned char *dest, size_t size);
77
84 void writeCompressedData(size_t blockIndex, const unsigned char *data, size_t size);
85
89 uint64_t nBlocksInFile() const;
90
91 size_t getBlockIndex(uint64_t row) const;
92
93 size_t getRowWithinBlock(uint64_t row) const;
94
95 size_t nRowsInBlock() const;
96
97 size_t nAntennae() const;
98
99 uint64_t getRowIndex(size_t block) const;
100
101 bool areOffsetsInitialized() const;
102
103 void initializeRowsPerBlock(size_t rowsPerBlock, size_t antennaCount);
104
105 private:
106 DyscoStManColumn(const DyscoStManColumn &source) = delete;
107 void operator=(const DyscoStManColumn &source) = delete;
108
111};
112
113} // namespace dyscostman
114
115#include "dyscostman.h"
116
117namespace dyscostman {
118
119inline void DyscoStManColumn::readCompressedData(size_t blockIndex, unsigned char *dest,
120 size_t size) {
121 _storageManager->readCompressedData(blockIndex, this, dest, size);
122}
123
124inline void DyscoStManColumn::writeCompressedData(size_t blockIndex, const unsigned char *data,
125 size_t size) {
126 _storageManager->writeCompressedData(blockIndex, this, data, size);
127}
128
129inline uint64_t DyscoStManColumn::nBlocksInFile() const { return _storageManager->nBlocksInFile(); }
130
131inline size_t DyscoStManColumn::getBlockIndex(uint64_t row) const {
132 return _storageManager->getBlockIndex(row);
133}
134
135inline size_t DyscoStManColumn::nRowsInBlock() const { return _storageManager->nRowsInBlock(); }
136
137inline size_t DyscoStManColumn::nAntennae() const { return _storageManager->nAntennae(); }
138
139inline uint64_t DyscoStManColumn::getRowIndex(size_t block) const {
140 return _storageManager->getRowIndex(block);
141}
142
143inline size_t DyscoStManColumn::getRowWithinBlock(uint64_t rowIndex) const {
144 return _storageManager->getRowWithinBlock(rowIndex);
145}
146
148 return _storageManager->areOffsetsInitialized();
149}
150
151inline void DyscoStManColumn::initializeRowsPerBlock(size_t rowsPerBlock, size_t antennaCount) {
152 _storageManager->initializeRowsPerBlock(rowsPerBlock, antennaCount, true);
153}
154
155} // namespace dyscostman
156
157#endif
StManColumnBase(int dataType)
Default constructor.
virtual void InitializeAfterNRowsPerBlockIsKnown()=0
void writeCompressedData(size_t blockIndex, const unsigned char *data, size_t size)
Write a row of compressed data to the stman file.
uint64_t getRowIndex(size_t block) const
uint64_t nBlocksInFile() const
Get the actual number of blocks in the file.
virtual size_t CalculateBlockSize(size_t nRowsInBlock, size_t nAntennae) const =0
virtual void SerializeExtraHeader(std::ostream &stream) const =0
void operator=(const DyscoStManColumn &source)=delete
virtual size_t ExtraHeaderSize() const
Get number of bytes needed for column header of this column.
void readCompressedData(size_t blockIndex, unsigned char *dest, size_t size)
Read a row of compressed data from the stman file.
size_t getRowWithinBlock(uint64_t row) const
void SetOffsetInBlock(size_t offsetInBlock)
virtual void Prepare(DyscoDistribution distribution, Normalization normalization, double studentsTNu, double distributionTruncation)=0
DyscoStManColumn(const DyscoStManColumn &source)=delete
virtual casacore::Bool isWritable() const override
Whether this column is writable.
virtual ~DyscoStManColumn()
Destructor.
DyscoStManColumn(DyscoStMan *parent, int dtype)
Constructor, to be overloaded by subclass.
virtual void UnserializeExtraHeader(std::istream &stream)=0
virtual void shutdown()=0
To be called before destructing the class.
DyscoStMan & storageManager() const
Get the storage manager for this column.
void initializeRowsPerBlock(size_t rowsPerBlock, size_t antennaCount)
size_t getBlockIndex(uint64_t row) const
The main class for the Dysco storage manager.
Definition dyscostman.h:46
Contains DyscoStMan and its global register function register_dyscostman().
For temporary backward namespace compatibility, use casa as alias for casacore.
Definition mainpage.dox:28
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40