loolwsd/Exceptions.hpp | 10 ++++++++ loolwsd/TileCache.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++ loolwsd/TileCache.hpp | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+), 1 deletion(-)
New commits: commit 2b0347e391ecf769f36c3d5f1f586f445f63f10b Author: Ashod Nakashian <[email protected]> Date: Sun May 15 17:50:32 2016 -0400 loolwsd: new tile descriptor class to represent tiles Change-Id: I680ea2d698a352bf3f99b37713d68c34d9502ea4 Reviewed-on: https://gerrit.libreoffice.org/25019 Reviewed-by: Ashod Nakashian <[email protected]> Tested-by: Ashod Nakashian <[email protected]> diff --git a/loolwsd/Exceptions.hpp b/loolwsd/Exceptions.hpp index 0384bde..eb2b4a6 100644 --- a/loolwsd/Exceptions.hpp +++ b/loolwsd/Exceptions.hpp @@ -21,7 +21,7 @@ protected: using std::runtime_error::runtime_error; }; -/// A bad-request exception that is means to signify, +/// A bad-request exception that is meant to signify, /// and translate into, an HTTP bad request. class BadRequestException : public LoolException { @@ -29,6 +29,14 @@ public: using LoolException::LoolException; }; +/// A bad-argument exception that is meant to signify, +/// and translate into, an HTTP bad request. +class BadArgumentException : public BadRequestException +{ +public: + using BadRequestException::BadRequestException; +}; + /// An authorization exception that is means to signify, /// and translate into, an HTTP unauthorized error. class UnauthorizedRequestException : public LoolException diff --git a/loolwsd/TileCache.cpp b/loolwsd/TileCache.cpp index 5cdeeb5..a139490 100644 --- a/loolwsd/TileCache.cpp +++ b/loolwsd/TileCache.cpp @@ -44,6 +44,56 @@ using Poco::Timestamp; using namespace LOOLProtocol; +std::string TileDesc::serialize(const std::string& prefix) const +{ + std::ostringstream oss; + oss << prefix + << " part=" << _part + << " width=" << _width + << " height=" << _height + << " tileposx=" << _tilePosX + << " tileposy=" << _tilePosY + << " tilewidth=" << _tileWidth + << " tileheight=" << _tileHeight; + if (_id >= 0) + { + oss << " id=" << _id; + } + + return oss.str(); +} + +TileDesc TileDesc::parse(const Poco::StringTokenizer& tokens) +{ + // We don't expect undocument fields and + // assume all values to be int. + std::map<std::string, int> pairs; + + // id is optional. + pairs["id"] = -1; + + for (size_t i = 0; i < tokens.count(); ++i) + { + std::string name; + int value = -1; + if (parseNameIntegerPair(tokens[i], name, value)) + { + pairs[name] = value; + } + } + + return TileDesc(pairs["part"], pairs["width"], pairs["height"], + pairs["tileposx"], pairs["tileposy"], + pairs["tilewidth"], pairs["tileheight"], + pairs["id"]); +} + +TileDesc TileDesc::parse(const std::string& message) +{ + StringTokenizer tokens(message, " ", StringTokenizer::TOK_IGNORE_EMPTY | StringTokenizer::TOK_TRIM); + return parse(tokens); +} + TileCache::TileCache(const std::string& docURL, const Timestamp& modifiedTime, const std::string& cacheDir) : diff --git a/loolwsd/TileCache.hpp b/loolwsd/TileCache.hpp index 270d679..9afe4c6 100644 --- a/loolwsd/TileCache.hpp +++ b/loolwsd/TileCache.hpp @@ -18,12 +18,67 @@ #include <vector> #include <Poco/Timestamp.h> +#include <Poco/StringTokenizer.h> + +#include "Exceptions.hpp" /** Handles the cache for tiles of one document. */ class MasterProcessSession; +/// Tile Descriptor +/// Represents a tile's coordinates and dimensions. +class TileDesc +{ +public: + TileDesc(int part, int width, int height, int tilePosX, int tilePosY, int tileWidth, int tileHeight, int id = -1) : + _part(part), + _width(width), + _height(height), + _tilePosX(tilePosX), + _tilePosY(tilePosY), + _tileWidth(tileWidth), + _tileHeight(tileHeight), + _id(id) + { + if (_part < 0 || + _width <= 0 || + _height <= 0 || + _tilePosX < 0 || + _tilePosY < 0 || + _tileWidth <= 0 || + _tileHeight <= 0) + { + throw BadArgumentException("Invalid tile descriptor."); + } + } + + int getPart() const { return _part; } + int getWidth() const { return _width; } + int getHeight() const { return _height; } + int getTilePosX() const { return _tilePosX; } + int getTilePosY() const { return _tilePosY; } + int getTileWidth() const { return _tileWidth; } + int getTileHeight() const { return _tileHeight; } + + std::string serialize(const std::string& prefix = "") const; + + /// Deserialize a TileDesc from a string format. + static TileDesc parse(const std::string& message); + static TileDesc parse(const Poco::StringTokenizer& tokens); + +private: + int _part; + int _width; + int _height; + int _tilePosX; + int _tilePosY; + int _tileWidth; + int _tileHeight; + int _id; +}; + class TileCache { struct TileBeingRendered; _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
