Added NzInputStream

Added NzFile::Read(buffer, size)
NzFile::Read(nullptr, size) now acts as a skip function (ex: SetCursorPos(GetCursorPos() + size)
This commit is contained in:
Lynix 2012-05-15 13:26:35 +02:00
parent 182bd4cffe
commit cef402c8a5
17 changed files with 101 additions and 49 deletions

View File

@ -71,6 +71,9 @@
#define NAZARA_THREADSAFETY_STRINGSTREAM 0 // NzStringStream
#endif
// Optimise certaines parties du code avec les avancées venues de Windows Vista (Nécessite Vista ou supérieur et compilateur compatible)
#define NAZARA_CORE_WINDOWS_VISTA 0
/*
// Règle le temps entre le réveil du thread des timers et l'activation d'un timer (En millisecondes)
#define NAZARA_CORE_TIMER_WAKEUPTIME 10

View File

@ -8,6 +8,7 @@
#define NAZARA_ERROR_HPP
#include <Nazara/Prerequesites.hpp>
#include <Nazara/Core/Config.hpp>
#include <Nazara/Core/String.hpp>
#if NAZARA_CORE_ENABLE_ASSERTS || defined(NAZARA_DEBUG)

View File

@ -12,6 +12,7 @@
#include <Nazara/Core/Endianness.hpp>
#include <Nazara/Core/Hashable.hpp>
#include <Nazara/Core/HashDigest.hpp>
#include <Nazara/Core/InputStream.hpp>
#include <Nazara/Core/String.hpp>
#include <Nazara/Utility/NonCopyable.hpp>
@ -20,7 +21,7 @@
class NzFileImpl;
class NAZARA_API NzFile : public NzHashable, NzNonCopyable
class NAZARA_API NzFile : public NzHashable, public NzInputStream, NzNonCopyable
{
public:
enum CursorPosition
@ -74,6 +75,7 @@ class NAZARA_API NzFile : public NzHashable, NzNonCopyable
bool Open(unsigned long openMode = Current);
std::size_t Read(void* buffer, std::size_t size);
std::size_t Read(void* buffer, std::size_t typeSize, unsigned int count);
bool Rename(const NzString& newFilePath);

View File

@ -0,0 +1,21 @@
// Copyright (C) 2012 Jérôme Leclercq
// This file is part of the "Nazara Engine".
// For conditions of distribution and use, see copyright notice in Config.hpp
#pragma once
#ifndef NAZARA_INPUTSTREAM_HPP
#define NAZARA_INPUTSTREAM_HPP
#include <Nazara/Prerequesites.hpp>
class NzInputStream
{
public:
virtual ~NzInputStream();
virtual bool EndOfFile() const = 0;
virtual std::size_t Read(void* buffer, std::size_t size) = 0;
};
#endif // NAZARA_INPUTSTREAM_HPP

View File

@ -283,19 +283,19 @@ class NAZARA_API NzString : public NzHashable
{
}
SharedString(unsigned int bufferSize, unsigned int stringSize, unsigned short referenceCount, char* str) :
SharedString(unsigned short referenceCount, unsigned int bufferSize, unsigned int stringSize, char* str) :
allocatedSize(bufferSize),
size(stringSize),
refCount(referenceCount),
string(str)
string(str),
refCount(referenceCount)
{
}
unsigned int allocatedSize;
unsigned int size;
unsigned short refCount;
char* string;
unsigned short refCount;
NazaraMutex(mutex)
};

View File

@ -3,6 +3,7 @@
// For conditions of distribution and use, see copyright notice in Config.hpp
#include <Nazara/Core/Directory.hpp>
#include <Nazara/Core/Config.hpp>
#include <Nazara/Core/Error.hpp>
#include <Nazara/Core/File.hpp>
//#include <Nazara/ThreadLocalVar.h>

View File

@ -270,7 +270,7 @@ bool NzFile::IsOpen() const
return m_impl != nullptr;
}
std::size_t NzFile::Read(void* buffer, std::size_t typeSize, unsigned int count)
std::size_t NzFile::Read(void* buffer, std::size_t size)
{
NazaraLock(m_mutex)
@ -288,14 +288,28 @@ std::size_t NzFile::Read(void* buffer, std::size_t typeSize, unsigned int count)
}
#endif
if (!buffer || count == 0 || typeSize == 0)
if (size == 0)
return 0;
std::size_t byteRead = m_impl->Read(buffer, typeSize*count);
if (buffer)
return m_impl->Read(buffer, size);
else
{
nzUInt64 currentPos = m_impl->GetCursorPos();
m_impl->SetCursorPos(NzFile::AtCurrent, size);
return m_impl->GetCursorPos()-currentPos;
}
}
std::size_t NzFile::Read(void* buffer, std::size_t typeSize, unsigned int count)
{
std::size_t byteRead = Read(buffer, typeSize*count);
if (byteRead == 0)
return 0;
if (m_endianness != nzEndianness_Unknown && m_endianness != NzGetPlatformEndianness() && typeSize != 1)
if (buffer && m_endianness != nzEndianness_Unknown && m_endianness != NzGetPlatformEndianness() && typeSize != 1)
{
unsigned int typeCount = byteRead/typeSize;
for (unsigned int i = 0; i < typeCount; ++i)

View File

@ -761,15 +761,18 @@ void SHA256_End(SHA_CTX* context, nzUInt8* digest)
/*** SHA-224: *********************************************************/
void SHA224_Init(SHA_CTX* context) {
void SHA224_Init(SHA_CTX* context)
{
SHA256_Internal_Init(context, sha224_initial_hash_value);
}
void SHA224_Internal_Transform(SHA_CTX* context, const nzUInt32* data) {
void SHA224_Internal_Transform(SHA_CTX* context, const nzUInt32* data)
{
SHA256_Internal_Transform(context, data);
}
void SHA224_Update(SHA_CTX* context, const nzUInt8 *data, std::size_t len) {
void SHA224_Update(SHA_CTX* context, const nzUInt8 *data, std::size_t len)
{
SHA256_Update(context, data, len);
}
@ -807,7 +810,8 @@ void SHA512_Internal_Init(SHA_CTX* context, const nzUInt64* ihv)
context->s512.bitcount[0] = context->s512.bitcount[1] = 0;
}
void SHA512_Init(SHA_CTX* context) {
void SHA512_Init(SHA_CTX* context)
{
SHA512_Internal_Init(context, sha512_initial_hash_value);
}

View File

@ -42,6 +42,8 @@
#ifndef NAZARA_HASH_SHA2_INTERNAL_HPP
#define NAZARA_HASH_SHA2_INTERNAL_HPP
#include <Nazara/Prerequesites.hpp>
/* Digest lengths for SHA-1/224/256/384/512 */
#define SHA1_DIGEST_LENGTH 20
#define SHA1_DIGEST_STRING_LENGTH (SHA1_DIGEST_LENGTH * 2 + 1)
@ -54,8 +56,6 @@
#define SHA512_DIGEST_LENGTH 64
#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
#include <Nazara/Prerequesites.hpp>
union SHA_CTX
{
/* SHA-1 uses this part of the union: */

View File

@ -3,6 +3,7 @@
// For conditions of distribution and use, see copyright notice in Config.hpp
#include <Nazara/Core/HashDigest.hpp>
#include <Nazara/Core/Config.hpp>
#include <Nazara/Core/Error.hpp>
#include <cstdio>
#include <cstring>

View File

@ -0,0 +1,8 @@
// Copyright (C) 2012 Jérôme Leclercq
// This file is part of the "Nazara Engine".
// For conditions of distribution and use, see copyright notice in Config.hpp
#include <Nazara/Core/InputStream.hpp>
#include <Nazara/Core/Debug.hpp>
NzInputStream::~NzInputStream() = default;

View File

@ -3,6 +3,7 @@
// For conditions of distribution and use, see copyright notice in Config.hpp
#include <Nazara/Core/Log.hpp>
#include <Nazara/Core/Config.hpp>
#include <Nazara/Core/File.hpp>
#include <Nazara/Core/StringStream.hpp>
#include <Nazara/Math/Basic.hpp>

View File

@ -3269,7 +3269,7 @@ NzString NzString::Resized(int size, char character) const
str[newSize] = '\0';
return NzString(new SharedString(newSize, newSize, 1, str));
return NzString(new SharedString(1, newSize, newSize, str));
}
NzString& NzString::Reverse()
@ -3302,7 +3302,7 @@ NzString NzString::Reversed() const
str[m_sharedString->size] = '\0';
return NzString(new SharedString(m_sharedString->size, m_sharedString->size, 1, str));
return NzString(new SharedString(1, m_sharedString->size, m_sharedString->size, str));
}
NzString NzString::Simplified(nzUInt32 flags) const
@ -3360,7 +3360,7 @@ NzString NzString::Simplified(nzUInt32 flags) const
*p = '\0';
return NzString(new SharedString(m_sharedString->size, p-str, 1, str));
return NzString(new SharedString(1, m_sharedString->size, p-str, str));
}
NzString& NzString::Simplify(nzUInt32 flags)
@ -3691,7 +3691,7 @@ NzString NzString::Substr(int startPos, int endPos) const
std::memcpy(str, &m_sharedString->string[start], size*sizeof(char));
str[size] = '\0';
return NzString(new SharedString(size, size, 1, str));
return NzString(new SharedString(1, size, size, str));
}
NzString NzString::SubstrFrom(char character, int startPos, bool fromLast, bool include, nzUInt32 flags) const
@ -3890,7 +3890,7 @@ NzString NzString::ToLower(nzUInt32 flags) const
*s = '\0';
return NzString(new SharedString(m_sharedString->size, m_sharedString->size, 1, str));
return NzString(new SharedString(1, m_sharedString->size, m_sharedString->size, str));
}
}
@ -3922,7 +3922,7 @@ NzString NzString::ToUpper(nzUInt32 flags) const
*s = '\0';
return NzString(new SharedString(m_sharedString->size, m_sharedString->size, 1, str));
return NzString(new SharedString(1, m_sharedString->size, m_sharedString->size, str));
}
}
@ -4206,7 +4206,7 @@ NzString NzString::operator+(char character) const
str[m_sharedString->size] = character;
str[totalSize] = '\0';
return NzString(new SharedString(totalSize, totalSize, 1, str));
return NzString(new SharedString(1, totalSize, totalSize, str));
}
NzString NzString::operator+(const char* string) const
@ -4226,7 +4226,7 @@ NzString NzString::operator+(const char* string) const
std::memcpy(str, m_sharedString->string, m_sharedString->size*sizeof(char));
std::strcpy(&str[m_sharedString->size], string);
return NzString(new SharedString(totalSize, totalSize, 1, str));
return NzString(new SharedString(1, totalSize, totalSize, str));
}
NzString NzString::operator+(const std::string& string) const
@ -4242,7 +4242,7 @@ NzString NzString::operator+(const std::string& string) const
std::memcpy(str, m_sharedString->string, m_sharedString->size*sizeof(char));
std::strcpy(&str[m_sharedString->size], string.c_str());
return NzString(new SharedString(totalSize, totalSize, 1, str));
return NzString(new SharedString(1, totalSize, totalSize, str));
}
NzString NzString::operator+(const NzString& string) const
@ -4258,7 +4258,7 @@ NzString NzString::operator+(const NzString& string) const
std::memcpy(str, m_sharedString->string, m_sharedString->size*sizeof(char));
std::strcpy(&str[m_sharedString->size], string.m_sharedString->string);
return NzString(new SharedString(totalSize, totalSize, 1, str));
return NzString(new SharedString(1, totalSize, totalSize, str));
}
NzString& NzString::operator+=(char character)
@ -4610,7 +4610,7 @@ NzString NzString::Boolean(bool boolean)
char* str = new char[size+1];
std::strcpy(str, (boolean) ? "true" : "false");
return NzString(new SharedString(size, size, 1, str));
return NzString(new SharedString(1, size, size, str));
}
int NzString::Compare(const NzString& first, const NzString& second)
@ -4707,7 +4707,7 @@ NzString NzString::Pointer(const void* ptr)
char* str = new char[size+1];
std::sprintf(str, "%p", ptr);
return NzString(new SharedString(size, size, 1, str));
return NzString(new SharedString(1, size, size, str));
}
NzString NzString::Unicode(char32_t character)
@ -4729,7 +4729,7 @@ NzString NzString::Unicode(char32_t character)
utf8::append(character, str);
str[count] = '\0';
return NzString(new SharedString(count, count, 1, str));
return NzString(new SharedString(1, count, count, str));
}
NzString NzString::Unicode(const char* u8String)
@ -4754,7 +4754,7 @@ NzString NzString::Unicode(const char16_t* u16String)
char* r = utf8::utf16to8(u16String, ptr, str);
*r = '\0';
return NzString(new SharedString(count, r-str, 1, str));
return NzString(new SharedString(1, count, r-str, str));
}
NzString NzString::Unicode(const char32_t* u32String)
@ -4782,7 +4782,7 @@ NzString NzString::Unicode(const char32_t* u32String)
char* r = utf8::utf32to8(u32String, ptr, str);
*r = '\0';
return NzString(new SharedString(count, count, 1, str));
return NzString(new SharedString(1, count, count, str));
}
NzString NzString::Unicode(const wchar_t* wString)
@ -4810,7 +4810,7 @@ NzString NzString::Unicode(const wchar_t* wString)
char* r = utf8::utf32to8(wString, ptr, str);
*r = '\0';
return NzString(new SharedString(count, count, 1, str));
return NzString(new SharedString(1, count, count, str));
}
std::istream& operator>>(std::istream& is, NzString& str)
@ -4859,7 +4859,7 @@ NzString operator+(char character, const NzString& string)
str[0] = character;
std::strcpy(str, string.m_sharedString->string);
return NzString(new NzString::SharedString(totalSize, totalSize, 1, str));
return NzString(new NzString::SharedString(1, totalSize, totalSize, str));
}
NzString operator+(const char* string, const NzString& nstring)
@ -4876,7 +4876,7 @@ NzString operator+(const char* string, const NzString& nstring)
std::memcpy(str, string, size*sizeof(char));
std::strcpy(&str[size], nstring.m_sharedString->string);
return NzString(new NzString::SharedString(totalSize, totalSize, 1, str));
return NzString(new NzString::SharedString(1, totalSize, totalSize, str));
}
NzString operator+(const std::string& string, const NzString& nstring)
@ -4892,7 +4892,7 @@ NzString operator+(const std::string& string, const NzString& nstring)
std::memcpy(str, string.c_str(), string.size()*sizeof(char));
std::strcpy(&str[string.size()], nstring.m_sharedString->string);
return NzString(new NzString::SharedString(totalSize, totalSize, 1, str));
return NzString(new NzString::SharedString(1, totalSize, totalSize, str));
}
bool operator==(const NzString& first, const NzString& second)
@ -5040,7 +5040,7 @@ void NzString::EnsureOwnership()
char* string = new char[m_sharedString->allocatedSize+1];
std::strcpy(string, m_sharedString->string);
m_sharedString = new SharedString(m_sharedString->allocatedSize, m_sharedString->size, 1, string);
m_sharedString = new SharedString(1, m_sharedString->allocatedSize, m_sharedString->size, string);
}
}

View File

@ -5,6 +5,7 @@
// Inspiré du code de la SFML par Laurent Gomila
#include <Nazara/Core/Thread.hpp>
#include <Nazara/Core/Config.hpp>
#include <Nazara/Core/Error.hpp>
#if defined(NAZARA_PLATFORM_WINDOWS)

View File

@ -3,6 +3,7 @@
// For conditions of distribution and use, see copyright notice in Config.hpp
#include <Nazara/Core/Unicode.hpp>
#include <Nazara/Core/Config.hpp>
#include <Nazara/Core/Debug.hpp>
namespace NzUnicode

View File

@ -151,19 +151,15 @@ bool NzFileImpl::Copy(const NzString& sourcePath, const NzString& targetPath)
{
wchar_t* path = sourcePath.GetWideBuffer();
wchar_t* newPath = targetPath.GetWideBuffer();
bool success = CopyFileW(path, newPath, false);
delete[] path;
delete[] newPath;
if (CopyFileW(path, newPath, false))
{
delete[] path;
delete[] newPath;
if (success)
return true;
}
else
{
NazaraError("Unable to copy file: " + NzGetLastSystemError());
delete[] path;
delete[] newPath;
return false;
}
@ -172,17 +168,14 @@ bool NzFileImpl::Copy(const NzString& sourcePath, const NzString& targetPath)
bool NzFileImpl::Delete(const NzString& filePath)
{
wchar_t* path = filePath.GetWideBuffer();
bool success = DeleteFileW(path);
delete[] path;
if (DeleteFileW(path))
{
delete[] path;
if (success)
return true;
}
else
{
NazaraError("Unable to delete file (" + filePath + "): " + NzGetLastSystemError());
delete[] path;
return false;
}

View File

@ -3,6 +3,7 @@
// For conditions of distribution and use, see copyright notice in Config.hpp
#include <Nazara/Core/Win32/SemaphoreImpl.hpp>
#include <Nazara/Core/Config.hpp>
#include <Nazara/Core/Error.hpp>
#include <limits>
#include <Nazara/Core/Debug.hpp>