5 #ifndef STREAMBASE_COMPLETEDATATYPE_HPP_
6 #define STREAMBASE_COMPLETEDATATYPE_HPP_
8 #include "StreamBase.hpp"
10 #include "DataType.hpp"
40 CompleteDataType(
const Schema &schema) : _type(DataType::TUPLE), _schema(
new Schema(schema)), _name(
""), _cdt(0), _argumentSchema(0), _returnType(0) { }
46 assert(!schema || type == DataType::TUPLE);
54 _type(type), _schema(0), _name(
""), _cdt(
new CompleteDataType(elementType)), _argumentSchema(0), _returnType(0) {
55 assert(type == DataType::LIST);
63 _type(type), _schema(0), _name(
""), _cdt(
new CompleteDataType(elementCDT)), _argumentSchema(0), _returnType(0) {
64 assert(type == DataType::LIST);
71 _type(type), _schema(0), _name(name), _cdt(0), _argumentSchema(0), _returnType(0) {
72 assert(type == DataType::CAPTURE);
79 _type(type), _schema(0), _name(
""), _cdt(0), _argumentSchema(
new Schema(argumentSchema)), _returnType(
new CompleteDataType(returnType)) {
80 assert(type == DataType::FUNCTION);
85 #ifndef DOXYGEN_INTERNAL_ONLY
87 CompleteDataType() : _type(DataType::NONE), _schema(0), _cdt(0), _argumentSchema(0), _returnType(0) {}
92 _schema(cdt._schema ? new
Schema(*(cdt._schema)) : 0),
95 _argumentSchema(cdt._argumentSchema ? new
Schema(*(cdt._argumentSchema)) : 0),
109 bool operator==(
const CompleteDataType& t)
const {
return compare(t) == 0; }
110 bool operator!=(
const CompleteDataType& t)
const {
return compare(t) != 0; }
111 bool operator<(
const CompleteDataType& t)
const {
return compare(t) < 0; }
112 bool operator>(
const CompleteDataType& t)
const {
return compare(t) > 0; }
113 bool operator<=(
const CompleteDataType& t)
const {
return compare(t) <= 0; }
114 bool operator>=(
const CompleteDataType& t)
const {
return compare(t) >= 0; }
117 operator const void *()
const {
return this; }
128 int compare(
const CompleteDataType& fv)
const;
170 return _type == DataType::TUPLE;
177 return _schema ? *_schema : Schema::EMPTY_SCHEMA;
184 return _cdt ? _cdt->getType() != DataType::NONE :
false;
191 return _cdt ? *_cdt : EMPTY_DATATYPE;
198 return _returnType ? *_returnType : EMPTY_DATATYPE;
206 return _argumentSchema ? *_argumentSchema : Schema::EMPTY_SCHEMA;
209 std::string getCaptureTypeName()
const {
222 case DataType::DOUBLE:
223 case DataType::TIMESTAMP:
224 case DataType::STRING:
226 return NMSTL::to_string(_type);
227 case DataType::TUPLE:
228 return NMSTL::to_string(_type) +
" (" + NMSTL::to_string(getSchema()) +
")";
230 return NMSTL::to_string(_type) +
" (" + NMSTL::to_string(getElementCompleteType()) +
")";
231 case DataType::CAPTURE:
233 case DataType::FUNCTION:
234 assert (_argumentSchema && _returnType);
235 return _argumentSchema->as_string() +
" -> " + _returnType->as_string();
238 NMSTL_ASSERT_UNREACHABLE();