diff --git a/include/utilities/format/bp1/BP1Writer.h b/include/utilities/format/bp1/BP1Writer.h index 688b482313f9dcbe540888b27749315906f0820e..80412198e7e6dee0b5283dad92e7a6f65ec45b9b 100644 --- a/include/utilities/format/bp1/BP1Writer.h +++ b/include/utilities/format/bp1/BP1Writer.h @@ -15,10 +15,10 @@ #include <algorithm> //std::count, std::copy, std::for_each #include <cmath> //std::ceil #include <cstring> //std::memcpy +/// \endcond #include "utilities/format/bp1/BP1Base.h" #include "utilities/format/bp1/BP1Structs.h" -/// \endcond #include "capsule/heap/STLVector.h" #include "core/Variable.h" @@ -78,41 +78,8 @@ public: * @return variable index size */ template <class T> - size_t GetVariableIndexSize(const Variable<T> &variable) const noexcept - { - // size_t indexSize = varEntryLength + memberID + lengthGroupName + - // groupName + lengthVariableName + lengthOfPath + path + datatype - size_t indexSize = 23; // without characteristics - indexSize += variable.m_Name.size(); - - // characteristics 3 and 4, check variable number of dimensions - const std::size_t dimensions = - variable.DimensionsSize(); // commas in CSV + 1 - indexSize += 28 * dimensions; // 28 bytes per dimension - indexSize += 1; // id - - // characteristics, offset + payload offset in data - indexSize += 2 * (1 + 8); - // characteristic 0, if scalar add value, for now only allowing string - if (dimensions == 1) - { - indexSize += sizeof(T); - indexSize += 1; // id - // must have an if here - indexSize += 2 + variable.m_Name.size(); - indexSize += 1; // id - } - - // characteristic statistics - if (m_Verbosity == 0) // default, only min and max - { - indexSize += 2 * (sizeof(T) + 1); - indexSize += 1 + 1; // id - } - - return indexSize + 12; /// extra 12 bytes in case of attributes - // need to add transform characteristics - } + std::size_t GetVariableIndexSize(const Variable<T> &variable) const + noexcept; /** * Version for primitive types (except std::complex<T>) @@ -123,11 +90,7 @@ public: template <class T> void WriteVariableMetadata(const Variable<T> &variable, capsule::STLVector &heap, - BP1MetadataSet &metadataSet) const noexcept - { - Stats<T> stats = GetStats(variable); - WriteVariableMetadataCommon(variable, stats, heap, metadataSet); - } + BP1MetadataSet &metadataSet) const noexcept; /** * Overloaded version for std::complex<T> variables @@ -138,11 +101,7 @@ public: template <class T> void WriteVariableMetadata(const Variable<std::complex<T>> &variable, capsule::STLVector &heap, - BP1MetadataSet &metadataSet) const noexcept - { - Stats<T> stats = GetStats(variable); - WriteVariableMetadataCommon(variable, stats, heap, metadataSet); - } + BP1MetadataSet &metadataSet) const noexcept; /** * Expensive part this is only for heap buffers need to adapt to vector of @@ -153,13 +112,13 @@ public: template <class T> void WriteVariablePayload(const Variable<T> &variable, capsule::STLVector &heap, - const unsigned int nthreads = 1) const noexcept - { - // EXPENSIVE part, might want to use threads if large, serial for now - InsertToBuffer(heap.m_Data, variable.m_AppValues, variable.TotalSize()); - heap.m_DataAbsolutePosition += variable.PayLoadSize(); - } + const unsigned int nthreads = 1) const noexcept; + /** + * Flattens data + * @param metadataSet + * @param buffer + */ void Advance(BP1MetadataSet &metadataSet, capsule::STLVector &buffer); /** @@ -190,173 +149,36 @@ public: noexcept; private: + /** + * Common function called from WriterVariableMetadata for primitive and + * complex types + * @param variable + * @param stats + * @param heap + * @param metadataSet + */ template <class T, class U> void WriteVariableMetadataCommon(const Variable<T> &variable, Stats<U> &stats, capsule::STLVector &heap, - BP1MetadataSet &metadataSet) const noexcept - { - stats.TimeIndex = metadataSet.TimeStep; - - // Get new Index or point to existing index - bool isNew = true; // flag to check if variable is new - BP1Index &varIndex = - GetBP1Index(variable.m_Name, metadataSet.VarsIndices, isNew); - stats.MemberID = varIndex.MemberID; - - // write metadata header in data and extract offsets - stats.Offset = heap.m_DataAbsolutePosition; - WriteVariableMetadataInData(variable, stats, heap); - stats.PayloadOffset = heap.m_DataAbsolutePosition; - - // write to metadata index - WriteVariableMetadataInIndex(variable, stats, isNew, varIndex); - - ++metadataSet.DataPGVarsCount; - } + BP1MetadataSet &metadataSet) const + noexcept; template <class T, class U> void WriteVariableMetadataInData(const Variable<T> &variable, const Stats<U> &stats, - capsule::STLVector &heap) const noexcept - { - auto &buffer = heap.m_Data; - - const std::size_t varLengthPosition = - buffer.size(); // capture initial position for variable length - buffer.insert(buffer.end(), 8, 0); // skip var length (8) - InsertToBuffer(buffer, &stats.MemberID); // memberID - WriteNameRecord(variable.m_Name, buffer); // variable name - buffer.insert(buffer.end(), 2, 0); // skip path - const std::uint8_t dataType = GetDataType<T>(); // dataType - InsertToBuffer(buffer, &dataType); - constexpr char no = 'n'; // isDimension - InsertToBuffer(buffer, &no); - - // write variable dimensions - const std::uint8_t dimensions = variable.m_LocalDimensions.size(); - InsertToBuffer(buffer, &dimensions); // count - std::uint16_t dimensionsLength = - 27 * - dimensions; // 27 is from 9 bytes for each: var y/n + local, var - // y/n + global dimension, var y/n + global offset, - // changed for characteristic - InsertToBuffer(buffer, &dimensionsLength); // length - WriteDimensionsRecord(buffer, variable.m_LocalDimensions, - variable.m_GlobalDimensions, variable.m_Offsets, - 18, true); - - // CHARACTERISTICS - WriteVariableCharacteristics(variable, stats, buffer, true); - - // Back to varLength including payload size - const std::uint64_t varLength = buffer.size() - varLengthPosition + - variable.PayLoadSize() - - 8; // remove its own size - CopyToBufferPosition(buffer, varLengthPosition, &varLength); // length - - heap.m_DataAbsolutePosition += - buffer.size() - varLengthPosition; // update absolute position to be - // used as payload position - } + capsule::STLVector &heap) const noexcept; template <class T, class U> void WriteVariableMetadataInIndex(const Variable<T> &variable, const Stats<U> &stats, const bool isNew, - BP1Index &index) const noexcept - { - auto &buffer = index.Buffer; - - if (isNew == true) // write variable header (might be shared with - // attributes index) - { - buffer.insert(buffer.end(), 4, 0); // skip var length (4) - InsertToBuffer(buffer, &stats.MemberID); - buffer.insert(buffer.end(), 2, 0); // skip group name - WriteNameRecord(variable.m_Name, buffer); - buffer.insert(buffer.end(), 2, 0); // skip path - - const std::uint8_t dataType = GetDataType<T>(); - InsertToBuffer(buffer, &dataType); - - // Characteristics Sets Count in Metadata - index.Count = 1; - InsertToBuffer(buffer, &index.Count); - } - else // update characteristics sets count - { - const std::size_t characteristicsSetsCountPosition = - 15 + variable.m_Name.size(); - ++index.Count; - CopyToBufferPosition(buffer, characteristicsSetsCountPosition, - &index.Count); // test - } - - WriteVariableCharacteristics(variable, stats, buffer); - } + BP1Index &index) const noexcept; template <class T, class U> void WriteVariableCharacteristics(const Variable<T> &variable, const Stats<U> &stats, std::vector<char> &buffer, const bool addLength = false) const - noexcept - { - const std::size_t characteristicsCountPosition = - buffer.size(); // very important to track as writer is going back to - // this position - buffer.insert(buffer.end(), 5, - 0); // skip characteristics count(1) + length (4) - std::uint8_t characteristicsCounter = 0; - - // DIMENSIONS - std::uint8_t characteristicID = characteristic_dimensions; - InsertToBuffer(buffer, &characteristicID); - const std::uint8_t dimensions = variable.m_LocalDimensions.size(); - - if (addLength == true) - { - const std::int16_t lengthOfDimensionsCharacteristic = - 24 * dimensions + - 3; // 24 = 3 local, global, offset x 8 bytes/each - InsertToBuffer(buffer, &lengthOfDimensionsCharacteristic); - } - - InsertToBuffer(buffer, &dimensions); // count - const std::uint16_t dimensionsLength = 24 * dimensions; - InsertToBuffer(buffer, &dimensionsLength); // length - WriteDimensionsRecord(buffer, variable.m_LocalDimensions, - variable.m_GlobalDimensions, variable.m_Offsets, - 16, addLength); - ++characteristicsCounter; - - // VALUE for SCALAR or STAT min, max for ARRAY - WriteBoundsRecord(variable.m_IsScalar, stats, buffer, - characteristicsCounter, addLength); - // TIME INDEX - WriteCharacteristicRecord(characteristic_time_index, stats.TimeIndex, - buffer, characteristicsCounter, addLength); - - if (addLength == false) // only in metadata offset and payload offset - { - WriteCharacteristicRecord(characteristic_offset, stats.Offset, - buffer, characteristicsCounter); - WriteCharacteristicRecord(characteristic_payload_offset, - stats.PayloadOffset, buffer, - characteristicsCounter); - } - // END OF CHARACTERISTICS - - // Back to characteristics count and length - CopyToBufferPosition(buffer, characteristicsCountPosition, - &characteristicsCounter); // count (1) - const std::uint32_t characteristicsLength = - buffer.size() - characteristicsCountPosition - 4 - - 1; // remove its own length (4 bytes) + characteristic counter ( 1 - // byte - // ) - CopyToBufferPosition(buffer, characteristicsCountPosition + 1, - &characteristicsLength); // length - } + noexcept; /** * Writes from &buffer[position]: [2 @@ -394,26 +216,7 @@ private: * @return stats */ template <class T> - Stats<T> GetStats(const Variable<T> &variable) const noexcept - { - Stats<T> stats; - const std::size_t valuesSize = variable.TotalSize(); - - if (m_Verbosity == 0) - { - if (valuesSize >= - 10000000) // ten million? this needs actual results - // //here we can make decisions for threads - // based on valuesSize - GetMinMax(variable.m_AppValues, valuesSize, stats.Min, - stats.Max, - m_Threads); // here we can add cores from constructor - else - GetMinMax(variable.m_AppValues, valuesSize, stats.Min, - stats.Max); - } - return stats; - } + Stats<T> GetStats(const Variable<T> &variable) const noexcept; /** * GetStats for std::complex<T> types @@ -421,48 +224,13 @@ private: * @return stats */ template <class T> - Stats<T> GetStats(const Variable<std::complex<T>> &variable) const noexcept - { - Stats<T> stats; - const std::size_t valuesSize = variable.TotalSize(); - - if (m_Verbosity == 0) - { - if (valuesSize >= - 10000000) // ten million? this needs actual results - // //here we can make decisions for threads - // based on valuesSize - GetMinMax(variable.m_AppValues, valuesSize, stats.Min, - stats.Max, m_Threads); - else - GetMinMax(variable.m_AppValues, valuesSize, stats.Min, - stats.Max); - } - return stats; - } + Stats<T> GetStats(const Variable<std::complex<T>> &variable) const noexcept; template <class T> void WriteBoundsRecord(const bool isScalar, const Stats<T> &stats, std::vector<char> &buffer, std::uint8_t &characteristicsCounter, - const bool addLength) const noexcept - { - if (isScalar == true) - { - WriteCharacteristicRecord( - characteristic_value, stats.Min, buffer, characteristicsCounter, - addLength); // stats.min = stats.max = value - return; - } - - if (m_Verbosity == 0) // default verbose - { - WriteCharacteristicRecord(characteristic_min, stats.Min, buffer, - characteristicsCounter, addLength); - WriteCharacteristicRecord(characteristic_max, stats.Max, buffer, - characteristicsCounter, addLength); - } - } + const bool addLength) const noexcept; /** * Write a characteristic value record to buffer @@ -477,20 +245,7 @@ private: void WriteCharacteristicRecord(const std::uint8_t characteristicID, const T &value, std::vector<char> &buffer, std::uint8_t &characteristicsCounter, - const bool addLength = false) const noexcept - { - const std::uint8_t id = characteristicID; - InsertToBuffer(buffer, &id); - - if (addLength == true) - { - const std::uint16_t lengthOfCharacteristic = sizeof(T); // id - InsertToBuffer(buffer, &lengthOfCharacteristic); - } - - InsertToBuffer(buffer, &value); - ++characteristicsCounter; - } + const bool addLength = false) const noexcept; /** * Returns corresponding index of type BP1Index, if doesn't exists creates a @@ -527,4 +282,6 @@ private: } // end namespace format } // end namespace adios +#include "utilities/format/bp1/BP1Writer.tcc" + #endif /* BP1WRITER_H_ */ diff --git a/include/utilities/format/bp1/BP1Writer.tcc b/include/utilities/format/bp1/BP1Writer.tcc new file mode 100644 index 0000000000000000000000000000000000000000..40581f792d7a4315848b46c1d4462d860a4cff11 --- /dev/null +++ b/include/utilities/format/bp1/BP1Writer.tcc @@ -0,0 +1,340 @@ +/* + * Distributed under the OSI-approved Apache License, Version 2.0. See + * accompanying file Copyright.txt for details. + * + * BP1Writer.tcc + * + * Created on: Apr 11, 2017 + * Author: wfg + */ + +namespace adios +{ +namespace format +{ + +template <class T> +std::size_t BP1Writer::GetVariableIndexSize(const Variable<T> &variable) const + noexcept +{ + // size_t indexSize = varEntryLength + memberID + lengthGroupName + + // groupName + lengthVariableName + lengthOfPath + path + datatype + std::size_t indexSize = 23; // without characteristics + indexSize += variable.m_Name.size(); + + // characteristics 3 and 4, check variable number of dimensions + const std::size_t dimensions = + variable.DimensionsSize(); // commas in CSV + 1 + indexSize += 28 * dimensions; // 28 bytes per dimension + indexSize += 1; // id + + // characteristics, offset + payload offset in data + indexSize += 2 * (1 + 8); + // characteristic 0, if scalar add value, for now only allowing string + if (dimensions == 1) + { + indexSize += sizeof(T); + indexSize += 1; // id + // must have an if here + indexSize += 2 + variable.m_Name.size(); + indexSize += 1; // id + } + + // characteristic statistics + if (m_Verbosity == 0) // default, only min and max + { + indexSize += 2 * (sizeof(T) + 1); + indexSize += 1 + 1; // id + } + + return indexSize + 12; // extra 12 bytes in case of attributes + // need to add transform characteristics +} + +template <class T> +void BP1Writer::WriteVariableMetadata(const Variable<T> &variable, + capsule::STLVector &heap, + BP1MetadataSet &metadataSet) const + noexcept +{ + Stats<T> stats = GetStats(variable); + WriteVariableMetadataCommon(variable, stats, heap, metadataSet); +} + +template <class T> +void BP1Writer::WriteVariableMetadata(const Variable<std::complex<T>> &variable, + capsule::STLVector &heap, + BP1MetadataSet &metadataSet) const + noexcept +{ + Stats<T> stats = GetStats(variable); + WriteVariableMetadataCommon(variable, stats, heap, metadataSet); +} + +template <class T> +void BP1Writer::WriteVariablePayload(const Variable<T> &variable, + capsule::STLVector &heap, + const unsigned int nthreads) const noexcept +{ + // EXPENSIVE part, might want to use threads if large, serial for now + InsertToBuffer(heap.m_Data, variable.m_AppValues, variable.TotalSize()); + heap.m_DataAbsolutePosition += variable.PayLoadSize(); +} + +// PRIVATE +template <class T, class U> +void BP1Writer::WriteVariableMetadataCommon(const Variable<T> &variable, + Stats<U> &stats, + capsule::STLVector &heap, + BP1MetadataSet &metadataSet) const + noexcept +{ + stats.TimeIndex = metadataSet.TimeStep; + + // Get new Index or point to existing index + bool isNew = true; // flag to check if variable is new + BP1Index &varIndex = + GetBP1Index(variable.m_Name, metadataSet.VarsIndices, isNew); + stats.MemberID = varIndex.MemberID; + + // write metadata header in data and extract offsets + stats.Offset = heap.m_DataAbsolutePosition; + WriteVariableMetadataInData(variable, stats, heap); + stats.PayloadOffset = heap.m_DataAbsolutePosition; + + // write to metadata index + WriteVariableMetadataInIndex(variable, stats, isNew, varIndex); + + ++metadataSet.DataPGVarsCount; +} + +template <class T, class U> +void BP1Writer::WriteVariableMetadataInData(const Variable<T> &variable, + const Stats<U> &stats, + capsule::STLVector &heap) const + noexcept +{ + auto &buffer = heap.m_Data; + + // for writing length at the end + const std::size_t varLengthPosition = buffer.size(); + + buffer.insert(buffer.end(), 8, 0); // skip var length (8) + InsertToBuffer(buffer, &stats.MemberID); // memberID + WriteNameRecord(variable.m_Name, buffer); // variable name + buffer.insert(buffer.end(), 2, 0); // skip path + const std::uint8_t dataType = GetDataType<T>(); // dataType + InsertToBuffer(buffer, &dataType); + constexpr char no = 'n'; // isDimension + InsertToBuffer(buffer, &no); + + // write variable dimensions + const std::uint8_t dimensions = variable.m_LocalDimensions.size(); + InsertToBuffer(buffer, &dimensions); // count + + // 27 is from 9 bytes for each: var y/n + local, var y/n + global dimension, + // var y/n + global offset, changed for characteristic + std::uint16_t dimensionsLength = 27 * dimensions; + InsertToBuffer(buffer, &dimensionsLength); // length + WriteDimensionsRecord(buffer, variable.m_LocalDimensions, + variable.m_GlobalDimensions, variable.m_Offsets, 18, + true); + + // CHARACTERISTICS + WriteVariableCharacteristics(variable, stats, buffer, true); + + // Back to varLength including payload size + const std::uint64_t varLength = buffer.size() - varLengthPosition + + variable.PayLoadSize() - + 8; // remove its own size + + CopyToBufferPosition(buffer, varLengthPosition, &varLength); // length + + heap.m_DataAbsolutePosition += + buffer.size() - varLengthPosition; // update absolute position to be + // used as payload position +} + +template <class T, class U> +void BP1Writer::WriteVariableMetadataInIndex(const Variable<T> &variable, + const Stats<U> &stats, + const bool isNew, + BP1Index &index) const noexcept +{ + auto &buffer = index.Buffer; + + if (isNew == true) // write variable header (might be shared with + // attributes index) + { + buffer.insert(buffer.end(), 4, 0); // skip var length (4) + InsertToBuffer(buffer, &stats.MemberID); + buffer.insert(buffer.end(), 2, 0); // skip group name + WriteNameRecord(variable.m_Name, buffer); + buffer.insert(buffer.end(), 2, 0); // skip path + + const std::uint8_t dataType = GetDataType<T>(); + InsertToBuffer(buffer, &dataType); + + // Characteristics Sets Count in Metadata + index.Count = 1; + InsertToBuffer(buffer, &index.Count); + } + else // update characteristics sets count + { + const std::size_t characteristicsSetsCountPosition = + 15 + variable.m_Name.size(); + ++index.Count; + CopyToBufferPosition(buffer, characteristicsSetsCountPosition, + &index.Count); // test + } + + WriteVariableCharacteristics(variable, stats, buffer); +} + +template <class T, class U> +void BP1Writer::WriteVariableCharacteristics(const Variable<T> &variable, + const Stats<U> &stats, + std::vector<char> &buffer, + const bool addLength) const + noexcept +{ + const std::size_t characteristicsCountPosition = + buffer.size(); // very important to track as writer is going back to + // this position + buffer.insert(buffer.end(), 5, + 0); // skip characteristics count(1) + length (4) + std::uint8_t characteristicsCounter = 0; + + // DIMENSIONS + std::uint8_t characteristicID = characteristic_dimensions; + InsertToBuffer(buffer, &characteristicID); + const std::uint8_t dimensions = variable.m_LocalDimensions.size(); + + if (addLength == true) + { + const std::int16_t lengthOfDimensionsCharacteristic = + 24 * dimensions + 3; // 24 = 3 local, global, offset x 8 bytes/each + InsertToBuffer(buffer, &lengthOfDimensionsCharacteristic); + } + + InsertToBuffer(buffer, &dimensions); // count + const std::uint16_t dimensionsLength = 24 * dimensions; + InsertToBuffer(buffer, &dimensionsLength); // length + WriteDimensionsRecord(buffer, variable.m_LocalDimensions, + variable.m_GlobalDimensions, variable.m_Offsets, 16, + addLength); + ++characteristicsCounter; + + // VALUE for SCALAR or STAT min, max for ARRAY + WriteBoundsRecord(variable.m_IsScalar, stats, buffer, + characteristicsCounter, addLength); + // TIME INDEX + WriteCharacteristicRecord(characteristic_time_index, stats.TimeIndex, + buffer, characteristicsCounter, addLength); + + if (addLength == false) // only in metadata offset and payload offset + { + WriteCharacteristicRecord(characteristic_offset, stats.Offset, buffer, + characteristicsCounter); + WriteCharacteristicRecord(characteristic_payload_offset, + stats.PayloadOffset, buffer, + characteristicsCounter); + } + // END OF CHARACTERISTICS + + // Back to characteristics count and length + CopyToBufferPosition(buffer, characteristicsCountPosition, + &characteristicsCounter); // count (1) + const std::uint32_t characteristicsLength = + buffer.size() - characteristicsCountPosition - 4 - + 1; // remove its own length (4) + characteristic counter (1) + + CopyToBufferPosition(buffer, characteristicsCountPosition + 1, + &characteristicsLength); // length +} + +template <class T> +BP1Writer::Stats<T> BP1Writer::GetStats(const Variable<T> &variable) const + noexcept +{ + Stats<T> stats; + const std::size_t valuesSize = variable.TotalSize(); + + if (m_Verbosity == 0) + { + if (valuesSize >= 10000000) // ten million? this needs actual results + // //here we can make decisions for threads + // based on valuesSize + GetMinMax(variable.m_AppValues, valuesSize, stats.Min, stats.Max, + m_Threads); // here we can add cores from constructor + else + GetMinMax(variable.m_AppValues, valuesSize, stats.Min, stats.Max); + } + return stats; +} + +template <class T> +BP1Writer::Stats<T> +BP1Writer::GetStats(const Variable<std::complex<T>> &variable) const noexcept +{ + Stats<T> stats; + const std::size_t valuesSize = variable.TotalSize(); + + if (m_Verbosity == 0) + { + if (valuesSize >= 10000000) // ten million? this needs actual results + // //here we can make decisions for threads + // based on valuesSize + GetMinMax(variable.m_AppValues, valuesSize, stats.Min, stats.Max, + m_Threads); + else + GetMinMax(variable.m_AppValues, valuesSize, stats.Min, stats.Max); + } + return stats; +} + +template <class T> +void BP1Writer::WriteBoundsRecord(const bool isScalar, const Stats<T> &stats, + std::vector<char> &buffer, + std::uint8_t &characteristicsCounter, + const bool addLength) const noexcept +{ + if (isScalar == true) + { + WriteCharacteristicRecord(characteristic_value, stats.Min, buffer, + characteristicsCounter, + addLength); // stats.min = stats.max = value + return; + } + + if (m_Verbosity == 0) // default verbose + { + WriteCharacteristicRecord(characteristic_min, stats.Min, buffer, + characteristicsCounter, addLength); + WriteCharacteristicRecord(characteristic_max, stats.Max, buffer, + characteristicsCounter, addLength); + } +} + +template <class T> +void BP1Writer::WriteCharacteristicRecord(const std::uint8_t characteristicID, + const T &value, + std::vector<char> &buffer, + std::uint8_t &characteristicsCounter, + const bool addLength) const noexcept +{ + const std::uint8_t id = characteristicID; + InsertToBuffer(buffer, &id); + + if (addLength == true) + { + const std::uint16_t lengthOfCharacteristic = sizeof(T); // id + InsertToBuffer(buffer, &lengthOfCharacteristic); + } + + InsertToBuffer(buffer, &value); + ++characteristicsCounter; +} + +} // end namespace format +} // end namespace diff --git a/source/utilities/format/bp1/BP1Writer.cpp b/source/utilities/format/bp1/BP1Writer.cpp index 4e0eaae135c9c6f99165084ebb8f37024c23e8c3..58eb04b8a6a729ddd7464176ccf03c9f7c0dbdeb 100644 --- a/source/utilities/format/bp1/BP1Writer.cpp +++ b/source/utilities/format/bp1/BP1Writer.cpp @@ -9,12 +9,12 @@ */ /// \cond EXCLUDE_FROM_DOXYGEN -#include "utilities/format/bp1/BP1Writer.h" - #include <string> #include <vector> /// \endcond +#include "utilities/format/bp1/BP1Writer.h" + namespace adios { namespace format