Zipper made universally usable and documented.
This commit is contained in:
parent
dc7e75b522
commit
4643106be4
@ -6,8 +6,10 @@
|
|||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
|
|
||||||
|
// Class for creating zip archives.
|
||||||
class Zipper {
|
class Zipper {
|
||||||
public:
|
public:
|
||||||
|
// Three compression levels supported
|
||||||
enum e_compression {
|
enum e_compression {
|
||||||
NO_COMPRESSION,
|
NO_COMPRESSION,
|
||||||
FAST_COMPRESSION,
|
FAST_COMPRESSION,
|
||||||
@ -29,23 +31,47 @@ public:
|
|||||||
e_compression level = NO_COMPRESSION);
|
e_compression level = NO_COMPRESSION);
|
||||||
~Zipper();
|
~Zipper();
|
||||||
|
|
||||||
|
// No copies allwed, this is a file resource...
|
||||||
Zipper(const Zipper&) = delete;
|
Zipper(const Zipper&) = delete;
|
||||||
Zipper& operator=(const Zipper&) = delete;
|
Zipper& operator=(const Zipper&) = delete;
|
||||||
|
|
||||||
|
// Moving is fine.
|
||||||
Zipper(Zipper&&) = default;
|
Zipper(Zipper&&) = default;
|
||||||
Zipper& operator=(Zipper&&) = default;
|
Zipper& operator=(Zipper&&) = default;
|
||||||
|
|
||||||
|
/// Adding an entry means a file inside the new archive. Name param is the
|
||||||
|
/// name of the new file. To create directories, append a forward slash.
|
||||||
void add_entry(const std::string& name);
|
void add_entry(const std::string& name);
|
||||||
void finish_entry();
|
|
||||||
|
|
||||||
inline Zipper& operator<<(const std::string& content) {
|
// Writing data to the archive works like with standard streams. The target
|
||||||
std::copy(content.begin(), content.end(), std::back_inserter(m_data));
|
// within the zip file is the entry created with the add_entry method.
|
||||||
|
|
||||||
|
// Template taking only arithmetic values, that std::to_string can handle.
|
||||||
|
template<class T> inline
|
||||||
|
typename std::enable_if<std::is_arithmetic<T>::value, Zipper&>::type
|
||||||
|
operator<<(T &&val) {
|
||||||
|
return this->operator<<(std::to_string(std::forward<T>(val)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Template applied only for types that std::string can handle for append
|
||||||
|
// and copy. This includes c style strings...
|
||||||
|
template<class T> inline
|
||||||
|
typename std::enable_if<!std::is_arithmetic<T>::value, Zipper&>::type
|
||||||
|
operator<<(T &&val) {
|
||||||
|
if(m_data.empty()) m_data = std::forward<T>(val);
|
||||||
|
else m_data.append(val);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Finishing an entry means that subsequent writes will no longer be
|
||||||
|
/// appended to the previous entry.
|
||||||
|
void finish_entry();
|
||||||
|
|
||||||
|
/// Gets the name of the archive without the path or extension.
|
||||||
std::string get_name() const;
|
std::string get_name() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // ZIPPER_HPP
|
#endif // ZIPPER_HPP
|
||||||
|
Loading…
Reference in New Issue
Block a user