Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#pragma once

#include <cstdint>
#include <memory>
#include <string>

namespace Azure { namespace Storage { namespace _internal {
Expand All @@ -19,62 +20,54 @@ namespace Azure { namespace Storage { namespace _internal {

struct XmlNode final
{
explicit XmlNode(XmlNodeType type, std::string name = std::string())
: Type(type), Name(std::move(name))
{
}

explicit XmlNode(XmlNodeType type, std::string name, std::string value)
: Type(type), Name(std::move(name)), Value(std::move(value)), HasValue(true)
explicit XmlNode(
XmlNodeType type,
std::string name = std::string(),
std::string value = {}))
: Type(type), Name(std::move(name)), Value(std::move(value))
{
}

XmlNodeType Type;
std::string Name;
std::string Value;
bool HasValue = false;
};

class XmlReader final {
public:
explicit XmlReader(const char* data, size_t length);
XmlReader(uint8_t const* data, size_t length);
XmlReader(const XmlReader& other) = delete;
XmlReader& operator=(const XmlReader& other) = delete;
XmlReader(XmlReader&& other) noexcept { *this = std::move(other); }
XmlReader& operator=(XmlReader&& other) noexcept
{
m_context = other.m_context;
other.m_context = nullptr;
return *this;
}
XmlReader(XmlReader&& other) noexcept;
XmlReader& operator=(XmlReader&& other) noexcept;
~XmlReader();

XmlNode Read();

private:
void* m_context = nullptr;
struct XmlReaderContext;
std::unique_ptr<XmlReaderContext> m_context;
};

class XmlWriter final {
public:
explicit XmlWriter();
XmlWriter();
XmlWriter(const XmlWriter& other) = delete;
XmlWriter& operator=(const XmlWriter& other) = delete;
XmlWriter(XmlWriter&& other) noexcept { *this = std::move(other); }
XmlWriter& operator=(XmlWriter&& other) noexcept
{
m_context = other.m_context;
other.m_context = nullptr;
return *this;
}
XmlWriter(XmlWriter&& other) noexcept;
XmlWriter& operator=(XmlWriter&& other) noexcept;
~XmlWriter();

void Write(XmlNode node);

std::string GetDocument();

private:
void* m_context = nullptr;
struct XmlWriterContext;
std::unique_ptr<XmlWriterContext> m_context;
};

void XmlGlobalInitialize();
void XmlGlobalDeinitialize();

}}} // namespace Azure::Storage::_internal
Loading