/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ // Original file Copyright Crytek GMBH or its affiliates, used under license. #ifndef CRYINCLUDE_CRYCOMMONTOOLS_PAKXMLFILEBUFFERSOURCE_H #define CRYINCLUDE_CRYCOMMONTOOLS_PAKXMLFILEBUFFERSOURCE_H #pragma once #include "../CryXML/IXMLSerializer.h" #include "IPakSystem.h" class PakXmlFileBufferSource : public IXmlBufferSource { public: PakXmlFileBufferSource(IPakSystem* pakSystem, const char* path) : pakSystem(pakSystem) { file = pakSystem->Open(path, "r"); } ~PakXmlFileBufferSource() { if (file) { pakSystem->Close(file); } } virtual int Read(void* buffer, int size) const { return pakSystem->Read(file, buffer, size); }; IPakSystem* pakSystem; PakSystemFile* file; }; class PakXmlBufferSource : public IXmlBufferSource { public: PakXmlBufferSource(const char* buffer, size_t length) : position(buffer) , end(buffer + length) { } virtual int Read(void* output, int size) const { size_t bytesLeft = end - position; size_t bytesToCopy = size < bytesLeft ? size : bytesLeft; if (bytesToCopy > 0) { memcpy(output, position, bytesToCopy); position += bytesToCopy; } return bytesToCopy; }; mutable const char* position; const char* end; }; #endif // CRYINCLUDE_CRYCOMMONTOOLS_PAKXMLFILEBUFFERSOURCE_H