You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
260 lines
7.8 KiB
C
260 lines
7.8 KiB
C
2 years ago
|
/***************************************************************************
|
||
|
* Copyright (C) gempa GmbH *
|
||
|
* All rights reserved. *
|
||
|
* Contact: gempa GmbH (seiscomp-dev@gempa.de) *
|
||
|
* *
|
||
|
* GNU Affero General Public License Usage *
|
||
|
* This file may be used under the terms of the GNU Affero *
|
||
|
* Public License version 3.0 as published by the Free Software Foundation *
|
||
|
* and appearing in the file LICENSE included in the packaging of this *
|
||
|
* file. Please review the following information to ensure the GNU Affero *
|
||
|
* Public License version 3.0 requirements will be met: *
|
||
|
* https://www.gnu.org/licenses/agpl-3.0.html. *
|
||
|
* *
|
||
|
* Other Usage *
|
||
|
* Alternatively, this file may be used in accordance with the terms and *
|
||
|
* conditions contained in a signed written agreement between you and *
|
||
|
* gempa GmbH. *
|
||
|
***************************************************************************/
|
||
|
|
||
|
|
||
|
#ifndef SEISCOMP_CORE_RECORD_H
|
||
|
#define SEISCOMP_CORE_RECORD_H
|
||
|
|
||
|
|
||
|
#include <string>
|
||
|
#include <time.h>
|
||
|
#include <iostream>
|
||
|
|
||
|
#include <seiscomp/core/baseobject.h>
|
||
|
#include <seiscomp/core/interfacefactory.h>
|
||
|
#include <seiscomp/core/timewindow.h>
|
||
|
#include <seiscomp/core/array.h>
|
||
|
#include <seiscomp/core/exceptions.h>
|
||
|
|
||
|
|
||
|
|
||
|
namespace Seiscomp {
|
||
|
|
||
|
|
||
|
class BitSet;
|
||
|
|
||
|
|
||
|
DEFINE_SMARTPOINTER(Record);
|
||
|
|
||
|
class SC_SYSTEM_CORE_API Record : public Seiscomp::Core::BaseObject {
|
||
|
DECLARE_SC_CLASS(Record);
|
||
|
DECLARE_SERIALIZATION;
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Public enumeration
|
||
|
// ----------------------------------------------------------------------
|
||
|
public:
|
||
|
//! Specifies the memory storage flags.
|
||
|
enum Hint {
|
||
|
META_ONLY,
|
||
|
DATA_ONLY,
|
||
|
SAVE_RAW,
|
||
|
H_QUANTITY
|
||
|
};
|
||
|
|
||
|
//! This enum was introduced with API 13
|
||
|
enum Authentication {
|
||
|
NOT_SIGNED,
|
||
|
SIGNATURE_VALIDATED,
|
||
|
SIGNATURE_VALIDATION_FAILED,
|
||
|
A_QUANTITY
|
||
|
};
|
||
|
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// X'truction
|
||
|
// ----------------------------------------------------------------------
|
||
|
public:
|
||
|
//! Default Constructor
|
||
|
Record(Array::DataType datatype, Hint);
|
||
|
|
||
|
//! Initializing Constructor
|
||
|
Record(Array::DataType, Hint,
|
||
|
std::string net, std::string sta, std::string loc, std::string cha,
|
||
|
Seiscomp::Core::Time stime, int nsamp, double fsamp, int tqual);
|
||
|
|
||
|
//! Copy Constructor
|
||
|
Record(const Record &rec);
|
||
|
|
||
|
//! Destructor
|
||
|
virtual ~Record();
|
||
|
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Operators
|
||
|
// ----------------------------------------------------------------------
|
||
|
public:
|
||
|
//! Assignment operator
|
||
|
Record &operator=(const Record &rec);
|
||
|
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Public attribute access
|
||
|
// ----------------------------------------------------------------------
|
||
|
public:
|
||
|
//! Returns the network code
|
||
|
const std::string &networkCode() const;
|
||
|
|
||
|
//! Sets the network code
|
||
|
virtual void setNetworkCode(std::string net);
|
||
|
|
||
|
//! Returns the station code
|
||
|
const std::string &stationCode() const;
|
||
|
|
||
|
//! Sets the station code
|
||
|
virtual void setStationCode(std::string sta);
|
||
|
|
||
|
//! Returns the location code
|
||
|
const std::string &locationCode() const;
|
||
|
|
||
|
//! Sets the location code
|
||
|
virtual void setLocationCode(std::string loc);
|
||
|
|
||
|
//! Returns the channel code
|
||
|
const std::string &channelCode() const;
|
||
|
|
||
|
//! Sets the channel code
|
||
|
virtual void setChannelCode(std::string cha);
|
||
|
|
||
|
//! Returns the start time
|
||
|
const Core::Time& startTime() const;
|
||
|
|
||
|
//! Sets the start time
|
||
|
virtual void setStartTime(const Core::Time& time);
|
||
|
|
||
|
//! Returns the end time
|
||
|
Core::Time endTime() const;
|
||
|
|
||
|
//! Returns the time window between start and end time of a record
|
||
|
Core::TimeWindow timeWindow() const;
|
||
|
|
||
|
//! Returns the sample number
|
||
|
int sampleCount() const;
|
||
|
|
||
|
//! Returns the sample frequency
|
||
|
double samplingFrequency() const;
|
||
|
|
||
|
//! Returns the timing quality
|
||
|
int timingQuality() const;
|
||
|
|
||
|
//! Sets the timing quality
|
||
|
void setTimingQuality(int tqual);
|
||
|
|
||
|
//! Returns the so called stream ID: <net>.<sta>.<loc>.<cha>
|
||
|
std::string streamID() const;
|
||
|
|
||
|
//! Returns the data type specified for the data sample requests
|
||
|
Array::DataType dataType() const;
|
||
|
|
||
|
//! Sets the data type for the data requests which can differ
|
||
|
//! from the real type of the data samples.
|
||
|
void setDataType(Array::DataType dt);
|
||
|
|
||
|
//! Sets the hint used for data operations
|
||
|
void setHint(Hint h);
|
||
|
|
||
|
/**
|
||
|
* @brief Sets the authentication state.
|
||
|
* This function was introduced with API 13.
|
||
|
* @param auth The authentication status
|
||
|
*/
|
||
|
void setAuthentication(Authentication auth);
|
||
|
|
||
|
//! This function was introduced with API 13
|
||
|
Authentication authentication() const;
|
||
|
|
||
|
/**
|
||
|
* @brief Sets the authentication authority
|
||
|
* This function was introduced with API 13.
|
||
|
* @param authority The authority which signed the record
|
||
|
*/
|
||
|
void setAuthority(const std::string &authority);
|
||
|
|
||
|
//! This function was introduced with API 13
|
||
|
const std::string &authority() const;
|
||
|
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Public data access
|
||
|
// ----------------------------------------------------------------------
|
||
|
public:
|
||
|
//! Returns a nonmutable pointer to the data samples if the data is available; otherwise 0
|
||
|
//! (the data type is independent from the original one and was given by the DataType flag in the constructor)
|
||
|
virtual const Array* data() const = 0;
|
||
|
|
||
|
//! Returns the raw data of the record if existing
|
||
|
virtual const Array* raw() const = 0;
|
||
|
|
||
|
//! Returns a deep copy of the calling object.
|
||
|
virtual Record* copy() const = 0;
|
||
|
|
||
|
//! Return the clip mask for the data in the record. The clip mask
|
||
|
//! holds a bit for each sample and sets that bit to 1 if the sample
|
||
|
//! is clipped. The default implementation always returns nullptr.
|
||
|
//! Support has to be provided in derived implementations.
|
||
|
virtual const BitSet *clipMask() const;
|
||
|
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Public methods
|
||
|
// ----------------------------------------------------------------------
|
||
|
public:
|
||
|
//! Frees the memory allocated for the data samples.
|
||
|
virtual void saveSpace() const = 0;
|
||
|
|
||
|
virtual void read(std::istream &in) = 0;
|
||
|
virtual void write(std::ostream &out) = 0;
|
||
|
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Protected members
|
||
|
// ----------------------------------------------------------------------
|
||
|
protected:
|
||
|
std::string _net;
|
||
|
std::string _sta;
|
||
|
std::string _loc;
|
||
|
std::string _cha;
|
||
|
Core::Time _stime;
|
||
|
Array::DataType _datatype;
|
||
|
Hint _hint;
|
||
|
int _nsamp;
|
||
|
double _fsamp;
|
||
|
int _timequal;
|
||
|
Authentication _authenticationStatus;
|
||
|
std::string _authority;
|
||
|
};
|
||
|
|
||
|
|
||
|
DEFINE_INTERFACE_FACTORY(Record);
|
||
|
|
||
|
#define REGISTER_RECORD_VAR(Class, Service) \
|
||
|
Seiscomp::Core::Generic::InterfaceFactory<Seiscomp::Record, Class> __##Class##InterfaceFactory__(Service)
|
||
|
|
||
|
#define REGISTER_RECORD(Class, Service) \
|
||
|
static REGISTER_RECORD_VAR(Class, Service)
|
||
|
|
||
|
|
||
|
inline Record::Authentication Record::authentication() const {
|
||
|
return _authenticationStatus;
|
||
|
}
|
||
|
|
||
|
inline const std::string &Record::authority() const {
|
||
|
return _authority;
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
SC_SYSTEM_CORE_API std::istream& operator>>(std::istream &is, Seiscomp::Record &rec);
|
||
|
SC_SYSTEM_CORE_API std::ostream& operator<<(std::ostream &os, Seiscomp::Record &rec);
|
||
|
|
||
|
|
||
|
#endif
|