diff options
| author | Stefan Boberg <[email protected]> | 2021-05-22 17:20:27 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-05-22 17:20:27 +0200 |
| commit | 5a9b5be100f10cd428a1f69291b2ac34085f27dd (patch) | |
| tree | 858f3d4f266f6c7dc1f35faf7a6a7e6db0425a10 /zencore/include | |
| parent | Added SharedBuffer(const IoBuffer&) (diff) | |
| download | zen-5a9b5be100f10cd428a1f69291b2ac34085f27dd.tar.xz zen-5a9b5be100f10cd428a1f69291b2ac34085f27dd.zip | |
Added ZenContentType enum to iobuffer.h
- This allows us to carry the content type along with any IoBuffer instances
- This replaces HttpContentType but HttpContentType remains an alias to reduce code churn
- Added definition for YAML content
Diffstat (limited to 'zencore/include')
| -rw-r--r-- | zencore/include/zencore/httpserver.h | 13 | ||||
| -rw-r--r-- | zencore/include/zencore/iobuffer.h | 50 |
2 files changed, 44 insertions, 19 deletions
diff --git a/zencore/include/zencore/httpserver.h b/zencore/include/zencore/httpserver.h index 8f762c2e4..38fdcf457 100644 --- a/zencore/include/zencore/httpserver.h +++ b/zencore/include/zencore/httpserver.h @@ -5,6 +5,7 @@ #include "zencore.h" #include <zencore/enumflags.h> +#include <zencore/iobuffer.h> #include <zencore/refcount.h> #include <zencore/string.h> @@ -17,6 +18,8 @@ namespace zen { +using HttpContentType = ZenContentType; + class IoBuffer; class CbObject; class StringBuilderBase; @@ -161,16 +164,6 @@ enum class HttpResponse NetworkAuthenticationRequired = 511, //!< Indicates that the client needs to authenticate to gain network access. }; -enum class HttpContentType -{ - kBinary, - kText, - kJSON, - kCbObject, - kCbPackage, - kUnknownContentType -}; - /** HTTP Server Request */ class HttpServerRequest diff --git a/zencore/include/zencore/iobuffer.h b/zencore/include/zencore/iobuffer.h index 7cf497527..a2ec6743d 100644 --- a/zencore/include/zencore/iobuffer.h +++ b/zencore/include/zencore/iobuffer.h @@ -10,6 +10,17 @@ namespace zen { struct IoBufferExtendedCore; +enum class ZenContentType +{ + kBinary, // Note that since this is zero, this will be the default value in IoBuffer + kText, + kJSON, + kCbObject, + kCbPackage, + kYAML, + kUnknownContentType +}; + struct IoBufferFileReference { void* FileHandle; @@ -136,6 +147,14 @@ public: } } + inline void SetContentType(ZenContentType ContentType) + { + ZEN_ASSERT_SLOW((uint32_t(ContentType) & kContentTypeMask) == uint32_t(ContentType)); + m_Flags = (m_Flags & ~(kContentTypeMask << kContentTypeShift)) | (uint32_t(ContentType) << kContentTypeShift); + } + + inline ZenContentType GetContentType() const { return ZenContentType((m_Flags >> kContentTypeShift) & kContentTypeMask); } + inline uint32_t GetRefCount() const { return m_RefCount; } protected: @@ -145,6 +164,12 @@ protected: size_t m_DataBytes = 0; RefPtr<const IoBufferCore> m_OuterCore; + enum + { + kContentTypeShift = 24, + kContentTypeMask = 0xf + }; + enum Flags { kIsOwnedByThis = 1 << 0, @@ -153,6 +178,11 @@ protected: kIsMaterialized = 1 << 3, // Data pointers are valid kLowLevelAlloc = 1 << 4, // Using direct memory allocation kIsWholeFile = 1 << 5, // References an entire file + + kContentTypeBit0 = 1 << (24 + 0), // These constants + kContentTypeBit1 = 1 << (24 + 1), // are here mostly to + kContentTypeBit2 = 1 << (24 + 2), // indicate that these + kContentTypeBit3 = 1 << (24 + 3), // bits are reserved }; void* AllocateBuffer(size_t InSize, size_t Alignment); @@ -171,8 +201,8 @@ struct IoBufferExtendedCore : public IoBufferCore enum ExtendedFlags { - kOwnsFile = 1 << 8, - kOwnsMmap = 1 << 9 + kOwnsFile = 1 << 16, + kOwnsMmap = 1 << 17 }; void Materialize() const; @@ -273,13 +303,15 @@ public: ZENCORE_API IoBuffer(EFileTag, void* FileHandle, uint64_t ChunkFileOffset, uint64_t ChunkSize); ZENCORE_API IoBuffer(EBorrowedFileTag, void* FileHandle, uint64_t ChunkFileOffset, uint64_t ChunkSize); - inline operator bool() const { return !m_Core->IsNull(); } - ZENCORE_API void MakeOwned() { return m_Core->MakeOwned(); } - inline bool IsOwned() const { return m_Core->IsOwned(); } - inline bool IsWholeFile() const { return m_Core->IsWholeFile(); } - const void* Data() const { return m_Core->DataPointer(); } - const size_t Size() const { return m_Core->DataBytes(); } - ZENCORE_API bool GetFileReference(IoBufferFileReference& OutRef) const; + inline operator bool() const { return !m_Core->IsNull(); } + ZENCORE_API void MakeOwned() { return m_Core->MakeOwned(); } + inline bool IsOwned() const { return m_Core->IsOwned(); } + inline bool IsWholeFile() const { return m_Core->IsWholeFile(); } + const void* Data() const { return m_Core->DataPointer(); } + const size_t Size() const { return m_Core->DataBytes(); } + inline void SetContentType(ZenContentType ContentType) { m_Core->SetContentType(ContentType); } + inline ZenContentType GetContentType() const { return m_Core->GetContentType(); } + ZENCORE_API bool GetFileReference(IoBufferFileReference& OutRef) const; private: RefPtr<IoBufferCore> m_Core = new IoBufferCore; |