41 EclOutput(
const std::string& filename,
43 const std::ios_base::openmode mode = std::ios::out);
46 void write(
const std::string& name,
47 const std::vector<T>& data)
49 static_assert(std::is_same_v<T, int> ||
50 std::is_same_v<T, float> ||
51 std::is_same_v<T, double> ||
52 std::is_same_v<T, bool> ||
53 std::is_same_v<T, char>,
54 "EclOutput::write<T>: T must be int, float, double, bool, or char");
56 eclArrType arrType = MESS;
59 if constexpr (std::is_same_v<T, int>) {
62 else if constexpr (std::is_same_v<T, float>) {
65 else if constexpr (std::is_same_v<T, double>) {
69 else if constexpr (std::is_same_v<T, bool>) {
72 else if constexpr (std::is_same_v<T, char>) {
74 throw std::invalid_argument {
75 "EclOutput::write<char>: non-empty data is not supported; "
76 "use message() for MESS-type records"
82 writeFormattedHeader(name, data.size(), arrType, element_size);
83 if (arrType != MESS) {
84 writeFormattedArray(data);
88 writeBinaryHeader(name, data.size(), arrType, element_size);
89 if (arrType != MESS) {
90 writeBinaryArray(data);
98 void write(
const std::string& name,
const std::vector<std::string>& data,
int element_size);
100 void message(
const std::string& msg);
103 void set_ix() { ix_standard =
true; }
109 void writeBinaryHeader(
const std::string& arrName, int64_t size, eclArrType arrType,
int element_size);
111 template <
typename T>
112 void writeBinaryArray(
const std::vector<T>& data);
114 void writeBinaryCharArray(
const std::vector<std::string>& data,
int element_size);
117 void writeFormattedHeader(
const std::string& arrName,
int size, eclArrType arrType,
int element_size);
119 template <
typename T>
120 void writeFormattedArray(
const std::vector<T>& data);
122 void writeFormattedCharArray(
const std::vector<std::string>& data,
int element_size);
125 void writeArrayType(
const eclArrType arrType);
126 std::string make_real_string_ecl(
float value)
const;
127 std::string make_real_string_ix(
float value)
const;
128 std::string make_doub_string_ecl(
double value)
const;
129 std::string make_doub_string_ix(
double value)
const;
131 bool isFormatted, ix_standard;
132 std::ofstream ofileH;