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++

/***************************************************************************
* 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