|
Shinya Kitaoka |
810553 |
#pragma once
|
|
Shinya Kitaoka |
810553 |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef TSTREAM_H
|
|
Toshihiro Shimizu |
890ddd |
#define TSTREAM_H
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
262a92 |
#include <memory></memory>
|
|
Shinya Kitaoka |
262a92 |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "tpixel.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef TNZCORE_LIGHT
|
|
Toshihiro Shimizu |
890ddd |
#include <qstring></qstring>
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#undef DVAPI
|
|
Toshihiro Shimizu |
890ddd |
#undef DVVAR
|
|
Toshihiro Shimizu |
890ddd |
#ifdef TSTREAM_EXPORTS
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI DV_EXPORT_API
|
|
Toshihiro Shimizu |
890ddd |
#define DVVAR DV_EXPORT_VAR
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
#define DVAPI DV_IMPORT_API
|
|
Toshihiro Shimizu |
890ddd |
#define DVVAR DV_IMPORT_VAR
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
class TPersist;
|
|
Toshihiro Shimizu |
890ddd |
class TFilePath;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
typedef std::pair<int, int=""></int,>
|
|
Shinya Kitaoka |
120a6e |
VersionNumber;
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
\brief Toonz's XML-like \a input file parser.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
This class is Toonz's standard \a input parser for simple XML files.
|
|
Toshihiro Shimizu |
890ddd |
It is specifically designed to interact with object types derived
|
|
Toshihiro Shimizu |
890ddd |
from the TPersist base class.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class DVAPI TIStream {
|
|
Shinya Kitaoka |
120a6e |
class Imp;
|
|
Shinya Kitaoka |
120a6e |
std::unique_ptr<imp> m_imp;</imp>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
/*!
|
|
Shinya Kitaoka |
120a6e |
\warning Stream construction may throw on files \b compressed using
|
|
Shinya Kitaoka |
120a6e |
TOStream 's compression.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
\warning Even if construction does not throw, the stream could still be
|
|
Shinya Kitaoka |
120a6e |
constructed with an invalid status. Remember to check the stream
|
|
Shinya Kitaoka |
120a6e |
status using operator bool().
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
TIStream(const TFilePath &is);
|
|
Shinya Kitaoka |
120a6e |
~TIStream();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
operator bool() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TIStream &operator>>(int &v);
|
|
Shinya Kitaoka |
120a6e |
TIStream &operator>>(double &v);
|
|
Shinya Kitaoka |
120a6e |
TIStream &operator>>(std::string &v);
|
|
Shinya Kitaoka |
120a6e |
TIStream &operator>>(std::wstring &v);
|
|
Shinya Kitaoka |
120a6e |
TIStream &operator>>(TFilePath &v);
|
|
Shinya Kitaoka |
120a6e |
TIStream &operator>>(TPixel32 &v);
|
|
Shinya Kitaoka |
120a6e |
TIStream &operator>>(TPixel64 &v);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#ifndef TNZCORE_LIGHT
|
|
Shinya Kitaoka |
120a6e |
TIStream &operator>>(QString &v);
|
|
Shinya Kitaoka |
120a6e |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*! \detail
|
|
Shinya Kitaoka |
120a6e |
This function dispatches the loading process to the derived class'
|
|
Shinya Kitaoka |
120a6e |
reimplementation of the TPersist::loadData() function.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
\note Unlinke operator>>(TPersist*&), this function \a requires that
|
|
Shinya Kitaoka |
120a6e |
the passed object is of the \b correct type to read the current tag.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
TIStream &operator>>(
|
|
Shinya Kitaoka |
120a6e |
TPersist &v);
|
|
Shinya Kitaoka |
120a6e |
TIStream &operator>>(TPersist *&v);
|
|
Shinya Kitaoka |
38fd86 |
|
|
Shinya Kitaoka |
38fd86 |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
std::string
|
|
Shinya Kitaoka |
120a6e |
getString();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bool eos(); //!< \brief Returns \e true in case of end of string (a
|
|
Shinya Kitaoka |
38fd86 |
|
|
Shinya Kitaoka |
38fd86 |
//! is encountered or the string is empty).
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*!
|
|
Shinya Kitaoka |
120a6e |
\param tagName Output name of a matched tag.
|
|
Shinya Kitaoka |
120a6e |
\return Whether a tag was found.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
bool matchTag(
|
|
Shinya Kitaoka |
120a6e |
std::string &tagName);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bool matchEndTag();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*!
|
|
Shinya Kitaoka |
120a6e |
\brief Attempts retrieval of the value associated with the
|
|
Shinya Kitaoka |
120a6e |
specified tag attribute in current tag.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
\param paramName Tag attribute name.
|
|
Shinya Kitaoka |
120a6e |
\param value Output value of the attribute.
|
|
Shinya Kitaoka |
120a6e |
\return Whether the tag attribute was found.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
bool getTagParam(std::string paramName, std::string &value);
|
|
Shinya Kitaoka |
120a6e |
bool getTagParam(std::string paramName,
|
|
Shinya Kitaoka |
120a6e |
int &value);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bool isBeginEndTag();
|
|
Shinya Kitaoka |
38fd86 |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bool openChild(
|
|
Shinya Kitaoka |
120a6e |
std::string &tagName);
|
|
Shinya Kitaoka |
120a6e |
void closeChild();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bool match(char c) const;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
std::string getTagAttribute(
|
|
Shinya Kitaoka |
120a6e |
std::string name) const;
|
|
Shinya Kitaoka |
120a6e |
//! TOStream::openChild(string, const map<std::string, string="">&).</std::string,>
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TFilePath getFilePath();
|
|
Shinya Kitaoka |
38fd86 |
|
|
Shinya Kitaoka |
120a6e |
TFilePath getRepositoryPath();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int getLine()
|
|
Shinya Kitaoka |
120a6e |
const;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
VersionNumber getVersion()
|
|
Shinya Kitaoka |
120a6e |
const;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void setVersion(const VersionNumber &version);
|
|
Shinya Kitaoka |
38fd86 |
|
|
Shinya Kitaoka |
38fd86 |
|
|
Shinya Kitaoka |
38fd86 |
|
|
Shinya Kitaoka |
120a6e |
/*!
|
|
Shinya Kitaoka |
120a6e |
\note After skipping the tag content, the stream is positioned immediately
|
|
Shinya Kitaoka |
120a6e |
after the end tag.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
void skipCurrentTag();
|
|
Shinya Kitaoka |
38fd86 |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TIStream(const TIStream &);
|
|
Shinya Kitaoka |
120a6e |
TIStream &operator=(const TIStream &);
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
template <class t=""></class>
|
|
Shinya Kitaoka |
120a6e |
TIStream &operator>>(TIStream &is, T *&v) {
|
|
Shinya Kitaoka |
120a6e |
TPersist *persist = 0;
|
|
Shinya Kitaoka |
120a6e |
is >> persist;
|
|
Shinya Kitaoka |
120a6e |
v = persist ? dynamic_cast<t *="">(persist) : 0;</t>
|
|
Shinya Kitaoka |
120a6e |
return is;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*!
|
|
Toshihiro Shimizu |
890ddd |
\brief Toonz's XML-like \a output file parser.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
This class is Toonz's standard \a output parser for simple XML files.
|
|
Toshihiro Shimizu |
890ddd |
It is specifically designed to interact with object types derived
|
|
Toshihiro Shimizu |
890ddd |
from the TPersist base class.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
class DVAPI TOStream {
|
|
Shinya Kitaoka |
120a6e |
class Imp;
|
|
Shinya Kitaoka |
120a6e |
std::shared_ptr<imp> m_imp;</imp>
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
explicit TOStream(std::shared_ptr<imp> imp);
|
|
Shinya Kitaoka |
5f2af0 |
|
|
Shinya Kitaoka |
120a6e |
TOStream(TOStream &&);
|
|
Shinya Kitaoka |
120a6e |
TOStream &operator=(TOStream &&);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
public:
|
|
Shinya Kitaoka |
120a6e |
/*!
|
|
Shinya Kitaoka |
120a6e |
\param fp Output file path
|
|
Shinya Kitaoka |
120a6e |
\param compressed Enables compression of the whole file
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
\note Stream construction does not throw . However, the stream
|
|
Shinya Kitaoka |
120a6e |
status could be invalid. Remeber to check the stream validity using
|
|
Shinya Kitaoka |
120a6e |
operator bool().
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
\warning Stream compression has been verified to be unsafe.
|
|
Shinya Kitaoka |
120a6e |
Please consider it \a deprecated.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
TOStream(const TFilePath &fp,
|
|
Shinya Kitaoka |
120a6e |
bool compressed = false);
|
|
Shinya Kitaoka |
120a6e |
~TOStream();
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
operator bool() const;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TOStream &operator<<(int v);
|
|
Shinya Kitaoka |
120a6e |
TOStream &operator<<(double v);
|
|
Shinya Kitaoka |
120a6e |
TOStream &operator<<(std::string v);
|
|
Shinya Kitaoka |
120a6e |
TOStream &operator<<(std::wstring v);
|
|
Shinya Kitaoka |
120a6e |
TOStream &operator<<(
|
|
Shinya Kitaoka |
120a6e |
const TFilePath &v);
|
|
Shinya Kitaoka |
120a6e |
TOStream &operator<<(
|
|
Shinya Kitaoka |
120a6e |
const TPixel32 &v);
|
|
Shinya Kitaoka |
120a6e |
TOStream &operator<<(
|
|
Shinya Kitaoka |
120a6e |
const TPixel64 &v);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifndef TNZCORE_LIGHT
|
|
Shinya Kitaoka |
120a6e |
TOStream &operator<<(QString v);
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TOStream &operator<<(
|
|
Shinya Kitaoka |
120a6e |
TPersist *v);
|
|
Shinya Kitaoka |
120a6e |
TOStream &operator<<(TPersist &v);
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
//! \deprecated Use openChild(string) instead
|
|
Shinya Kitaoka |
120a6e |
TOStream child(std::string tagName);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void openChild(std::string tagName);
|
|
Shinya Kitaoka |
38fd86 |
|
|
Shinya Kitaoka |
120a6e |
void openChild(
|
|
Shinya Kitaoka |
120a6e |
std::string tagName,
|
|
Shinya Kitaoka |
120a6e |
const std::map<std::string, std::string=""></std::string,>
|
|
Shinya Kitaoka |
120a6e |
&attributes); //!< \brief Writes a <tagname ..="" attribute1="value1"></tagname>
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void openCloseChild(std::string tagName,
|
|
Shinya Kitaoka |
120a6e |
const std::map<std::string, std::string=""></std::string,>
|
|
Shinya Kitaoka |
120a6e |
&attributes);
|
|
Shinya Kitaoka |
38fd86 |
//! attribute1="value1" ../>
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
//! which is immediately closed.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void closeChild();
|
|
Shinya Kitaoka |
38fd86 |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void cr();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void tab(int dt);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TFilePath getFilePath();
|
|
Shinya Kitaoka |
38fd86 |
|
|
Shinya Kitaoka |
120a6e |
TFilePath getRepositoryPath();
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*! \detail
|
|
Shinya Kitaoka |
120a6e |
This function is similar to operator bool(), but \b flushes the stream before
|
|
Shinya Kitaoka |
120a6e |
checking the status.
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
\return Whether the stream is in a good state (no fails in writing to).
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
bool checkStatus() const;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
private:
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
TOStream(const TOStream &) = delete;
|
|
Shinya Kitaoka |
120a6e |
TOStream &operator=(const TOStream &) = delete;
|
|
Toshihiro Shimizu |
890ddd |
};
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#endif
|