| @@ -110,7 +110,7 @@ public: | |||
| builder.Build(code); | |||
| file.WriteString(code.c_str()); | |||
| file.Write(code); | |||
| //code = file.ReadString(); | |||
| file.Close(); | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2016 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| @@ -41,7 +41,7 @@ class sample_data | |||
| friend class sample; | |||
| private: | |||
| String m_name; | |||
| std::string m_name; | |||
| #if defined LOL_USE_SDL_MIXER | |||
| Mix_Chunk *m_chunk; | |||
| int m_channel; | |||
| @@ -55,12 +55,12 @@ private: | |||
| sample::sample(char const *path) | |||
| : data(new sample_data()) | |||
| { | |||
| data->m_name = String("<sample> ") + path; | |||
| data->m_name = std::string("<sample> ") + path; | |||
| #if defined LOL_USE_SDL_MIXER | |||
| for (auto candidate : sys::get_path_list(path)) | |||
| { | |||
| data->m_chunk = Mix_LoadWAV(candidate.C()); | |||
| data->m_chunk = Mix_LoadWAV(candidate.c_str()); | |||
| if (data->m_chunk) | |||
| break; | |||
| } | |||
| @@ -88,7 +88,7 @@ void sample::TickGame(float seconds) | |||
| char const *sample::GetName() | |||
| { | |||
| return data->m_name.C(); | |||
| return data->m_name.c_str(); | |||
| } | |||
| void sample::play() | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2015 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| @@ -14,6 +14,8 @@ | |||
| #if defined __ANDROID__ | |||
| #include <string> | |||
| #include <jni.h> | |||
| #include <android/log.h> | |||
| @@ -35,9 +37,9 @@ extern ANativeActivity *g_activity; | |||
| class AndroidImageCodec : public ResourceCodec | |||
| { | |||
| public: | |||
| virtual char const *GetName() { return "<AndroidImageCodec>"; } | |||
| virtual ResourceCodecData* Load(char const *path); | |||
| virtual bool Save(char const *path, ResourceCodecData* data); | |||
| virtual std::string GetName() { return "<AndroidImageCodec>"; } | |||
| virtual ResourceCodecData* Load(std::string const &path); | |||
| virtual bool Save(std::string const &path, ResourceCodecData* data); | |||
| virtual bool Close(); | |||
| virtual uint8_t *GetData() const; | |||
| @@ -50,7 +52,7 @@ private: | |||
| DECLARE_IMAGE_CODEC(AndroidImageCodec, 100) | |||
| ResourceCodecData* AndroidImageCodec::Load(char const *path) | |||
| ResourceCodecData* AndroidImageCodec::Load(std::string const &path) | |||
| { | |||
| JNIEnv *env; | |||
| jint res = g_activity->vm->GetEnv((void **)&env, JNI_VERSION_1_2); | |||
| @@ -64,7 +66,7 @@ ResourceCodecData* AndroidImageCodec::Load(char const *path) | |||
| if (res < 0) | |||
| { | |||
| #if !LOL_BUILD_RELEASE | |||
| msg::error("JVM environment not found, cannot open image %s\n", path); | |||
| msg::error("JVM environment not found, cannot open image %s\n", path.c_str()); | |||
| #endif | |||
| return false; | |||
| } | |||
| @@ -73,13 +75,13 @@ ResourceCodecData* AndroidImageCodec::Load(char const *path) | |||
| mid = env->GetMethodID(cls, "openImage", | |||
| "(Ljava/lang/String;)Landroid/graphics/Bitmap;"); | |||
| jstring name = env->NewStringUTF(path); | |||
| jstring name = env->NewStringUTF(path.c_str()); | |||
| m_bmp = env->CallObjectMethod(g_activity->clazz, mid, name); | |||
| env->DeleteLocalRef(name); | |||
| if (!m_bmp) | |||
| { | |||
| #if !LOL_BUILD_RELEASE | |||
| msg::error("could not load %s\n", path); | |||
| msg::error("could not load %s\n", path.c_str()); | |||
| #endif | |||
| return false; | |||
| } | |||
| @@ -109,7 +111,7 @@ ResourceCodecData* AndroidImageCodec::Load(char const *path) | |||
| return new ResourceCodecData(); | |||
| } | |||
| bool AndroidImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| bool AndroidImageCodec::Save(std::string const &path, ResourceCodecData* data) | |||
| { | |||
| UNUSED(path, data); | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2017 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| @@ -12,6 +12,8 @@ | |||
| #include <lol/engine-internal.h> | |||
| #include <string> | |||
| #include "../../image/resource-private.h" | |||
| namespace lol | |||
| @@ -24,9 +26,9 @@ namespace lol | |||
| class DummyImageCodec : public ResourceCodec | |||
| { | |||
| public: | |||
| virtual char const *GetName() { return "<DummyImageCodec>"; } | |||
| virtual ResourceCodecData* Load(char const *path); | |||
| virtual bool Save(char const *path, ResourceCodecData* data); | |||
| virtual std::string GetName() { return "<DummyImageCodec>"; } | |||
| virtual ResourceCodecData* Load(std::string const &path); | |||
| virtual bool Save(std::string const &path, ResourceCodecData* data); | |||
| }; | |||
| //Priority 0 because it's supposed to be the last one | |||
| @@ -36,9 +38,9 @@ DECLARE_IMAGE_CODEC(DummyImageCodec, 0) | |||
| * Public Image class | |||
| */ | |||
| ResourceCodecData* DummyImageCodec::Load(char const *path) | |||
| ResourceCodecData* DummyImageCodec::Load(std::string const &path) | |||
| { | |||
| if (strcmp("DUMMY", path)) | |||
| if (path == "DUMMY") | |||
| return nullptr; | |||
| auto data = new ResourceImageData(new image(ivec2(256))); | |||
| @@ -58,7 +60,7 @@ ResourceCodecData* DummyImageCodec::Load(char const *path) | |||
| return data; | |||
| } | |||
| bool DummyImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| bool DummyImageCodec::Save(std::string const &path, ResourceCodecData* data) | |||
| { | |||
| UNUSED(path, data); | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2017 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| @@ -10,21 +10,16 @@ | |||
| // See http://www.wtfpl.net/ for more details. | |||
| // | |||
| #if HAVE_CONFIG_H | |||
| # include "config.h" | |||
| #endif | |||
| #include <lol/engine-internal.h> | |||
| #if LOL_USE_GDIPLUS | |||
| # include <string> | |||
| # include <algorithm> | |||
| using std::min; | |||
| using std::max; | |||
| # include <windows.h> | |||
| # include <objidl.h> // for DEFINE_GUID | |||
| # include <gdiplus.h> | |||
| #endif | |||
| #include <lol/engine-internal.h> | |||
| #if LOL_USE_GDIPLUS | |||
| #include "../../image/resource-private.h" | |||
| @@ -38,9 +33,9 @@ namespace lol | |||
| class GdiPlusImageCodec : public ResourceCodec | |||
| { | |||
| public: | |||
| virtual char const *GetName() { return "<GdiPlusImageCodec>"; } | |||
| virtual ResourceCodecData* Load(char const *path); | |||
| virtual bool Save(char const *path, ResourceCodecData* data); | |||
| virtual std::string GetName() { return "<GdiPlusImageCodec>"; } | |||
| virtual ResourceCodecData* Load(std::string const &path); | |||
| virtual bool Save(std::string const &path, ResourceCodecData* data); | |||
| }; | |||
| DECLARE_IMAGE_CODEC(GdiPlusImageCodec, 100) | |||
| @@ -49,7 +44,7 @@ DECLARE_IMAGE_CODEC(GdiPlusImageCodec, 100) | |||
| * Public Image class | |||
| */ | |||
| ResourceCodecData* GdiPlusImageCodec::Load(char const *path) | |||
| ResourceCodecData* GdiPlusImageCodec::Load(std::string const &path) | |||
| { | |||
| Gdiplus::Status status; | |||
| ULONG_PTR token; | |||
| @@ -61,16 +56,16 @@ ResourceCodecData* GdiPlusImageCodec::Load(char const *path) | |||
| return nullptr; | |||
| } | |||
| array<String> pathlist = sys::get_path_list(path); | |||
| array<std::string> pathlist = sys::get_path_list(path); | |||
| Gdiplus::Bitmap *bitmap = nullptr; | |||
| for (auto fullpath : pathlist) | |||
| for (auto const &fullpath : pathlist) | |||
| { | |||
| size_t len; | |||
| len = mbstowcs(nullptr, fullpath.C(), 0); | |||
| len = mbstowcs(nullptr, fullpath.c_str(), 0); | |||
| wchar_t *wpath = new wchar_t[len + 1]; | |||
| if (mbstowcs(wpath, fullpath.C(), len + 1) == (size_t)-1) | |||
| if (mbstowcs(wpath, fullpath.c_str(), len + 1) == (size_t)-1) | |||
| { | |||
| msg::error("invalid image name %s\n", fullpath.C()); | |||
| msg::error("invalid image name %s\n", fullpath.c_str()); | |||
| delete[] wpath; | |||
| continue; | |||
| } | |||
| @@ -85,7 +80,7 @@ ResourceCodecData* GdiPlusImageCodec::Load(char const *path) | |||
| { | |||
| if (status != Gdiplus::InvalidParameter) | |||
| msg::error("error %d loading %s\n", | |||
| status, fullpath.C()); | |||
| status, fullpath.c_str()); | |||
| delete bitmap; | |||
| bitmap = nullptr; | |||
| } | |||
| @@ -130,7 +125,7 @@ ResourceCodecData* GdiPlusImageCodec::Load(char const *path) | |||
| return data; | |||
| } | |||
| bool GdiPlusImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| bool GdiPlusImageCodec::Save(std::string const &path, ResourceCodecData* data) | |||
| { | |||
| auto data_image = dynamic_cast<ResourceImageData*>(data); | |||
| if (data_image == nullptr) | |||
| @@ -141,15 +136,15 @@ bool GdiPlusImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| Gdiplus::GdiplusStartup(&token, &input, nullptr); | |||
| wchar_t const *fmt; | |||
| if (strstr(path, ".gif")) | |||
| if (ends_with(path, ".gif")) | |||
| fmt = L"image/gif"; | |||
| else if (strstr(path, ".jpg") || strstr(path, ".jpeg")) | |||
| else if (ends_with(path, ".jpg") || ends_with(path, ".jpeg")) | |||
| fmt = L"image/jpeg"; | |||
| else if (strstr(path, ".png")) | |||
| else if (ends_with(path, ".png")) | |||
| fmt = L"image/png"; | |||
| else if (strstr(path, ".tiff")) | |||
| else if (ends_with(path, ".tiff")) | |||
| fmt = L"image/tiff"; | |||
| else /* if (strstr(path, ".bmp")) */ | |||
| else /* if (ends_with(path, ".bmp")) */ | |||
| fmt = L"image/bmp"; | |||
| unsigned int num = 0, encoder_size = 0; | |||
| @@ -173,11 +168,11 @@ bool GdiPlusImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| } | |||
| size_t len; | |||
| len = mbstowcs(nullptr, path, 0); | |||
| len = mbstowcs(nullptr, path.c_str(), 0); | |||
| wchar_t *wpath = new wchar_t[len + 1]; | |||
| if (mbstowcs(wpath, path, len + 1) == (size_t)-1) | |||
| if (mbstowcs(wpath, path.c_str(), len + 1) == (size_t)-1) | |||
| { | |||
| msg::error("could not convert GDI+ filename '%s' to widechar\n", path); | |||
| msg::error("could not convert GDI+ filename '%s' to widechar\n", path.c_str()); | |||
| delete[] wpath; | |||
| delete[] codecs; | |||
| return false; | |||
| @@ -212,7 +207,7 @@ bool GdiPlusImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| if (b->Save(wpath, &clsid, nullptr) != Gdiplus::Ok) | |||
| { | |||
| msg::error("could not save GDI+ image '%s'\n", path); | |||
| msg::error("could not save GDI+ image '%s'\n", path.c_str()); | |||
| delete[] wpath; | |||
| delete[] codecs; | |||
| delete b; | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2017 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| @@ -14,6 +14,8 @@ | |||
| #if defined LOL_USE_IMLIB2 | |||
| #include <string> | |||
| #include <Imlib2.h> | |||
| /* Check that the Imlib2 types are safe */ | |||
| @@ -34,21 +36,21 @@ namespace lol | |||
| class Imlib2ImageCodec : public ResourceCodec | |||
| { | |||
| public: | |||
| virtual char const *GetName() { return "<Imlib2ImageCodec>"; } | |||
| virtual ResourceCodecData* Load(char const *path); | |||
| virtual bool Save(char const *path, ResourceCodecData* data); | |||
| virtual std::string GetName() { return "<Imlib2ImageCodec>"; } | |||
| virtual ResourceCodecData* Load(std::string const &path); | |||
| virtual bool Save(std::string const &path, ResourceCodecData* data); | |||
| }; | |||
| /* Set priority higher than SDL because we can save in many formats. */ | |||
| DECLARE_IMAGE_CODEC(Imlib2ImageCodec, 70) | |||
| ResourceCodecData *Imlib2ImageCodec::Load(char const *path) | |||
| ResourceCodecData *Imlib2ImageCodec::Load(std::string const &path) | |||
| { | |||
| Imlib_Image im = nullptr; | |||
| for (auto candidate : sys::get_path_list(path)) | |||
| for (auto const &candidate : sys::get_path_list(path)) | |||
| { | |||
| im = imlib_load_image(candidate.C()); | |||
| im = imlib_load_image(candidate.c_str()); | |||
| if (im) | |||
| break; | |||
| } | |||
| @@ -56,7 +58,7 @@ ResourceCodecData *Imlib2ImageCodec::Load(char const *path) | |||
| if (!im) | |||
| { | |||
| #if !LOL_BUILD_RELEASE | |||
| msg::error("could not load image %s\n", path); | |||
| msg::error("could not load image %s\n", path.c_str()); | |||
| #endif | |||
| return nullptr; | |||
| } | |||
| @@ -68,7 +70,7 @@ ResourceCodecData *Imlib2ImageCodec::Load(char const *path) | |||
| { | |||
| imlib_free_image(); | |||
| #if !LOL_BUILD_RELEASE | |||
| msg::error("could not get image data for %s\n", path); | |||
| msg::error("could not get image data for %s\n", path.c_str()); | |||
| #endif | |||
| return nullptr; | |||
| } | |||
| @@ -93,7 +95,7 @@ ResourceCodecData *Imlib2ImageCodec::Load(char const *path) | |||
| return data; | |||
| } | |||
| bool Imlib2ImageCodec::Save(char const *path, ResourceCodecData *data) | |||
| bool Imlib2ImageCodec::Save(std::string const &path, ResourceCodecData *data) | |||
| { | |||
| auto data_image = dynamic_cast<ResourceImageData*>(data); | |||
| if (data_image == nullptr) | |||
| @@ -120,7 +122,7 @@ bool Imlib2ImageCodec::Save(char const *path, ResourceCodecData *data) | |||
| imlib_image_put_back_data((DATA32 *)dstdata); | |||
| image->unlock(srcdata); | |||
| imlib_save_image(path); | |||
| imlib_save_image(path.c_str()); | |||
| imlib_free_image(); | |||
| return true; | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2015 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| @@ -14,6 +14,8 @@ | |||
| #if defined __APPLE__ && defined __MACH__ && defined __arm__ | |||
| #include <string> | |||
| #import <UIKit/UIKit.h> | |||
| #include "../../image/resource-private.h" | |||
| @@ -28,9 +30,9 @@ namespace lol | |||
| class IosImageCodec : public ResourceCodec | |||
| { | |||
| public: | |||
| virtual char const *GetName() { return "<IosImageCodec>"; } | |||
| virtual ResourceCodecData* Load(char const *path); | |||
| virtual bool Save(char const *path, ResourceCodecData* data); | |||
| virtual std::string GetName() { return "<IosImageCodec>"; } | |||
| virtual ResourceCodecData* Load(std::string const &path); | |||
| virtual bool Save(std::string const &path, ResourceCodecData* data); | |||
| }; | |||
| DECLARE_IMAGE_CODEC(IosImageCodec, 100) | |||
| @@ -39,9 +41,9 @@ DECLARE_IMAGE_CODEC(IosImageCodec, 100) | |||
| * Public Image class | |||
| */ | |||
| ResourceCodecData* IosImageCodec::Load(char const *path) | |||
| ResourceCodecData* IosImageCodec::Load(std::string const &path) | |||
| { | |||
| NSString *fullpath = [NSString stringWithUTF8String:path]; | |||
| NSString *fullpath = [NSString stringWithUTF8String:path.c_str()]; | |||
| NSArray *chunks = [fullpath componentsSeparatedByString: @"/"]; | |||
| NSString *filename = [chunks objectAtIndex: [chunks count] - 1]; | |||
| chunks = [filename componentsSeparatedByString: @"."]; | |||
| @@ -52,7 +54,7 @@ ResourceCodecData* IosImageCodec::Load(char const *path) | |||
| if (!image) | |||
| { | |||
| #if !LOL_BUILD_RELEASE | |||
| msg::error("could not load %s\n", path); | |||
| msg::error("could not load %s\n", path.c_str()); | |||
| #endif | |||
| return nullptr; | |||
| } | |||
| @@ -78,7 +80,7 @@ ResourceCodecData* IosImageCodec::Load(char const *path) | |||
| return new ResourceCodecData(); | |||
| } | |||
| bool IosImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| bool IosImageCodec::Save(std::string const &path, ResourceCodecData* data) | |||
| { | |||
| UNUSED(path, data); | |||
| @@ -33,12 +33,12 @@ namespace lol | |||
| class OricImageCodec : public ResourceCodec | |||
| { | |||
| public: | |||
| virtual char const *GetName() { return "<OricImageCodec>"; } | |||
| virtual ResourceCodecData* Load(char const *path); | |||
| virtual bool Save(char const *path, ResourceCodecData* data); | |||
| virtual std::string GetName() { return "<OricImageCodec>"; } | |||
| virtual ResourceCodecData* Load(std::string const &path); | |||
| virtual bool Save(std::string const &path, ResourceCodecData* data); | |||
| private: | |||
| static std::string ReadScreen(char const *name); | |||
| static std::string ReadScreen(std::string const &name); | |||
| static void WriteScreen(image &image, array<uint8_t> &result); | |||
| }; | |||
| @@ -48,7 +48,7 @@ DECLARE_IMAGE_CODEC(OricImageCodec, 100) | |||
| * Public Image class | |||
| */ | |||
| ResourceCodecData* OricImageCodec::Load(char const *path) | |||
| ResourceCodecData* OricImageCodec::Load(std::string const &path) | |||
| { | |||
| static u8vec4 const pal[8] = | |||
| { | |||
| @@ -109,13 +109,13 @@ ResourceCodecData* OricImageCodec::Load(char const *path) | |||
| return data; | |||
| } | |||
| bool OricImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| bool OricImageCodec::Save(std::string const &path, ResourceCodecData* data) | |||
| { | |||
| auto data_image = dynamic_cast<ResourceImageData*>(data); | |||
| if (data_image == nullptr) | |||
| return false; | |||
| int len = (int)strlen(path); | |||
| int len = (int)path.length(); | |||
| if (len < 4 || path[len - 4] != '.' | |||
| || std::toupper(path[len - 3]) != 'T' | |||
| || std::toupper(path[len - 2]) != 'A' | |||
| @@ -128,7 +128,7 @@ bool OricImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| result << 0 << 0xff << 0x80 << 0 << 0xbf << 0x3f << 0xa0 << 0; | |||
| /* Add filename, except the last 4 characters */ | |||
| for (char const *name = path; name[4]; ++name) | |||
| for (char const *name = path.c_str(); name[4]; ++name) | |||
| result << (uint8_t)name[0]; | |||
| result << 0; | |||
| @@ -153,11 +153,11 @@ bool OricImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| return true; | |||
| } | |||
| std::string OricImageCodec::ReadScreen(char const *name) | |||
| std::string OricImageCodec::ReadScreen(std::string const &name) | |||
| { | |||
| File f; | |||
| f.Open(name, FileAccess::Read); | |||
| std::string data = f.ReadString().C(); | |||
| std::string data = f.ReadString(); | |||
| f.Close(); | |||
| /* Skip the sync bytes */ | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2017 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| @@ -25,6 +25,8 @@ | |||
| # include <SDL_image.h> | |||
| #endif | |||
| #include <string> | |||
| #include "../../image/resource-private.h" | |||
| namespace lol | |||
| @@ -37,22 +39,22 @@ namespace lol | |||
| class SdlImageCodec : public ResourceCodec | |||
| { | |||
| public: | |||
| virtual char const *GetName() { return "<SdlImageCodec>"; } | |||
| virtual ResourceCodecData* Load(char const *path); | |||
| virtual bool Save(char const *path, ResourceCodecData* data); | |||
| virtual std::string GetName() { return "<SdlImageCodec>"; } | |||
| virtual ResourceCodecData* Load(std::string const &path); | |||
| virtual bool Save(std::string const &path, ResourceCodecData* data); | |||
| static SDL_Surface *Create32BppSurface(ivec2 size); | |||
| }; | |||
| DECLARE_IMAGE_CODEC(SdlImageCodec, 50) | |||
| ResourceCodecData* SdlImageCodec::Load(char const *path) | |||
| ResourceCodecData* SdlImageCodec::Load(std::string const &path) | |||
| { | |||
| SDL_Surface *surface = nullptr; | |||
| for (auto candidate : sys::get_path_list(path)) | |||
| for (auto const &candidate : sys::get_path_list(path)) | |||
| { | |||
| surface = IMG_Load(candidate.C()); | |||
| surface = IMG_Load(candidate.c_str()); | |||
| if (surface) | |||
| break; | |||
| } | |||
| @@ -60,7 +62,7 @@ ResourceCodecData* SdlImageCodec::Load(char const *path) | |||
| if (!surface) | |||
| { | |||
| #if !LOL_BUILD_RELEASE | |||
| msg::error("could not load image %s\n", path); | |||
| msg::error("could not load image %s\n", path.c_str()); | |||
| #endif | |||
| return nullptr; | |||
| } | |||
| @@ -86,7 +88,7 @@ ResourceCodecData* SdlImageCodec::Load(char const *path) | |||
| return data; | |||
| } | |||
| bool SdlImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| bool SdlImageCodec::Save(std::string const &path, ResourceCodecData* data) | |||
| { | |||
| auto data_image = dynamic_cast<ResourceImageData*>(data); | |||
| if (data_image == nullptr) | |||
| @@ -100,7 +102,7 @@ bool SdlImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| memcpy(surface->pixels, pixel_data, 4 * size.x * size.y); | |||
| image->unlock(pixel_data); | |||
| int ret = SDL_SaveBMP(surface, path); | |||
| int ret = SDL_SaveBMP(surface, path.c_str()); | |||
| SDL_FreeSurface(surface); | |||
| return ret == 0; | |||
| @@ -27,9 +27,9 @@ namespace lol | |||
| class ZedImageCodec : public ResourceCodec | |||
| { | |||
| public: | |||
| virtual char const *GetName() { return "<ZedImageCodec>"; } | |||
| virtual ResourceCodecData* Load(char const *path); | |||
| virtual bool Save(char const *path, ResourceCodecData* data); | |||
| virtual std::string GetName() { return "<ZedImageCodec>"; } | |||
| virtual ResourceCodecData* Load(std::string const &path); | |||
| virtual bool Save(std::string const &path, ResourceCodecData* data); | |||
| }; | |||
| DECLARE_IMAGE_CODEC(ZedImageCodec, 10) | |||
| @@ -38,7 +38,7 @@ DECLARE_IMAGE_CODEC(ZedImageCodec, 10) | |||
| * Public Image class | |||
| */ | |||
| ResourceCodecData* ZedImageCodec::Load(char const *path) | |||
| ResourceCodecData* ZedImageCodec::Load(std::string const &path) | |||
| { | |||
| if (!ends_with(path, ".RSC")) | |||
| return nullptr; | |||
| @@ -295,7 +295,7 @@ ResourceCodecData* ZedImageCodec::Load(char const *path) | |||
| return data; | |||
| } | |||
| bool ZedImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| bool ZedImageCodec::Save(std::string const &path, ResourceCodecData* data) | |||
| { | |||
| UNUSED(path, data); | |||
| /* FIXME: do we need to implement this? */ | |||
| @@ -27,9 +27,9 @@ namespace lol | |||
| class ZedPaletteImageCodec : public ResourceCodec | |||
| { | |||
| public: | |||
| virtual char const *GetName() { return "<ZedPaletteImageCodec>"; } | |||
| virtual ResourceCodecData* Load(char const *path); | |||
| virtual bool Save(char const *path, ResourceCodecData* data); | |||
| virtual std::string GetName() { return "<ZedPaletteImageCodec>"; } | |||
| virtual ResourceCodecData* Load(std::string const &path); | |||
| virtual bool Save(std::string const &path, ResourceCodecData* data); | |||
| }; | |||
| DECLARE_IMAGE_CODEC(ZedPaletteImageCodec, 10) | |||
| @@ -38,7 +38,7 @@ DECLARE_IMAGE_CODEC(ZedPaletteImageCodec, 10) | |||
| * Public Image class | |||
| */ | |||
| ResourceCodecData* ZedPaletteImageCodec::Load(char const *path) | |||
| ResourceCodecData* ZedPaletteImageCodec::Load(std::string const &path) | |||
| { | |||
| if (!ends_with(path, ".pal")) | |||
| return nullptr; | |||
| @@ -83,7 +83,7 @@ ResourceCodecData* ZedPaletteImageCodec::Load(char const *path) | |||
| return data; | |||
| } | |||
| bool ZedPaletteImageCodec::Save(char const *path, ResourceCodecData* data) | |||
| bool ZedPaletteImageCodec::Save(std::string const &path, ResourceCodecData* data) | |||
| { | |||
| UNUSED(path, data); | |||
| /* FIXME: do we need to implement this? */ | |||
| @@ -28,7 +28,7 @@ image::image() | |||
| { | |||
| } | |||
| image::image(char const *path) | |||
| image::image(std::string const &path) | |||
| : m_data(new image_data()) | |||
| { | |||
| load(path); | |||
| @@ -91,7 +91,7 @@ void image::DummyFill() | |||
| load("DUMMY"); | |||
| } | |||
| bool image::load(char const *path) | |||
| bool image::load(std::string const &path) | |||
| { | |||
| auto resource = ResourceLoader::Load(path); | |||
| if (resource == nullptr) | |||
| @@ -109,7 +109,7 @@ bool image::load(char const *path) | |||
| return true; | |||
| } | |||
| bool image::save(char const *path) | |||
| bool image::save(std::string const &path) | |||
| { | |||
| auto data = new ResourceImageData(new image(*this)); | |||
| auto result = ResourceLoader::Save(path, data); | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2017 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| @@ -29,12 +29,12 @@ namespace lol | |||
| { | |||
| #if LOL_USE_FFMPEG | |||
| #define ERROR_TO_STRING(errnum) (error2string((errnum)).C()) | |||
| static String error2string(int errnum) | |||
| #define ERROR_TO_STRING(errnum) (error2string((errnum)).c_str()) | |||
| static std::string error2string(int errnum) | |||
| { | |||
| char tmp[AV_ERROR_MAX_STRING_SIZE]; | |||
| av_strerror(errnum, tmp, AV_ERROR_MAX_STRING_SIZE); | |||
| return String(tmp); | |||
| return std::string(tmp); | |||
| } | |||
| /*static void ffmpeg_logger(void *ptr, int level, const char *fmt, va_list vl) | |||
| @@ -69,11 +69,11 @@ movie::movie(ivec2 size) | |||
| #endif | |||
| } | |||
| bool movie::open_file(char const *filename) | |||
| bool movie::open_file(std::string const &filename) | |||
| { | |||
| #if LOL_USE_FFMPEG | |||
| /* Third argument specifies format */ | |||
| avformat_alloc_output_context2(&m_avformat, nullptr, "gif", filename); | |||
| avformat_alloc_output_context2(&m_avformat, nullptr, "gif", filename.c_str()); | |||
| if (!m_avformat) | |||
| { | |||
| msg::debug("could not create output context"); | |||
| @@ -85,10 +85,10 @@ bool movie::open_file(char const *filename) | |||
| if (!(m_avformat->oformat->flags & AVFMT_NOFILE)) | |||
| { | |||
| int ret = avio_open(&m_avformat->pb, filename, AVIO_FLAG_WRITE); | |||
| int ret = avio_open(&m_avformat->pb, filename.c_str(), AVIO_FLAG_WRITE); | |||
| if (ret < 0) | |||
| { | |||
| msg::error("could not open '%s': %s\n", filename, ERROR_TO_STRING(ret)); | |||
| msg::error("could not open '%s': %s\n", filename.c_str(), ERROR_TO_STRING(ret)); | |||
| return false; | |||
| } | |||
| } | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2017 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // © 2016—2017 Benjamin “Touky” Huet <huet.benjamin@gmail.com> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| @@ -24,9 +24,9 @@ namespace lol | |||
| class ResourceCodec | |||
| { | |||
| public: | |||
| virtual char const *GetName() { return "<ResourceCodec>"; } | |||
| virtual ResourceCodecData* Load(char const *path) = 0; | |||
| virtual bool Save(char const *path, ResourceCodecData* data) = 0; | |||
| virtual std::string GetName() { return "<ResourceCodec>"; } | |||
| virtual ResourceCodecData* Load(std::string const &path) = 0; | |||
| virtual bool Save(std::string const &path, ResourceCodecData* data) = 0; | |||
| /* TODO: this should become more fine-grained */ | |||
| int m_priority; | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2017 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2016—2017 Benjamin “Touky” Huet <huet.benjamin@gmail.com> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| @@ -79,7 +79,7 @@ g_resource_loader; | |||
| * The public resource loader | |||
| */ | |||
| ResourceCodecData* ResourceLoader::Load(char const *path) | |||
| ResourceCodecData* ResourceLoader::Load(std::string const &path) | |||
| { | |||
| ResourceCodec* last_codec = nullptr; | |||
| for (auto codec : g_resource_loader.m_codecs) | |||
| @@ -89,18 +89,18 @@ ResourceCodecData* ResourceLoader::Load(char const *path) | |||
| if (data != nullptr) | |||
| { | |||
| msg::debug("image::load: codec %s succesfully loaded %s.\n", | |||
| codec->GetName(), path); | |||
| codec->GetName().c_str(), path.c_str()); | |||
| return data; | |||
| } | |||
| } | |||
| //Log error, because we shouldn't be here | |||
| msg::error("image::load: last codec %s, error loading resource %s.\n", | |||
| last_codec->GetName(), path); | |||
| last_codec->GetName().c_str(), path.c_str()); | |||
| return nullptr; | |||
| } | |||
| bool ResourceLoader::Save(char const *path, ResourceCodecData* data) | |||
| bool ResourceLoader::Save(std::string const &path, ResourceCodecData* data) | |||
| { | |||
| ResourceCodec* last_codec = nullptr; | |||
| for (auto codec : g_resource_loader.m_codecs) | |||
| @@ -109,14 +109,14 @@ bool ResourceLoader::Save(char const *path, ResourceCodecData* data) | |||
| if (codec->Save(path, data)) | |||
| { | |||
| msg::debug("image::save: codec %s succesfully saved %s.\n", | |||
| codec->GetName(), path); | |||
| codec->GetName().c_str(), path.c_str()); | |||
| return true; | |||
| } | |||
| } | |||
| //Log error, because we shouldn't be here | |||
| msg::error("image::save: last codec %s, error saving resource %s.\n", | |||
| last_codec->GetName(), path); | |||
| last_codec->GetName().c_str(), path.c_str()); | |||
| return false; | |||
| } | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2017 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| @@ -22,6 +22,8 @@ | |||
| #include <lol/math/geometry.h> | |||
| #include <lol/image/pixel.h> | |||
| #include <string> | |||
| namespace lol | |||
| { | |||
| @@ -66,7 +68,7 @@ public: | |||
| image(ivec2 size); | |||
| /* XXX: use of this ctor should be discouraged, as it will not | |||
| * return information about a possible error. */ | |||
| image(char const *path); | |||
| image(std::string const &path); | |||
| /* Rule of three */ | |||
| image(image const &other); | |||
| @@ -76,8 +78,8 @@ public: | |||
| void DummyFill(); | |||
| void Copy(uint8_t* pixels, ivec2 const& size, PixelFormat fmt); | |||
| void Copy(image const &other); | |||
| bool load(char const *path); | |||
| bool save(char const *path); | |||
| bool load(std::string const &path); | |||
| bool save(std::string const &path); | |||
| /* Low level access */ | |||
| ivec2 size() const; | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2017 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| @@ -33,7 +33,7 @@ class movie | |||
| public: | |||
| movie(ivec2 size); | |||
| bool open_file(char const *filename); | |||
| bool open_file(std::string const &filename); | |||
| bool push_image(image &im); | |||
| void close(); | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2017 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // © 2016—2017 Benjamin “Touky” Huet <huet.benjamin@gmail.com> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| @@ -66,8 +66,8 @@ namespace lol | |||
| class ResourceLoader | |||
| { | |||
| public: | |||
| static ResourceCodecData* Load(char const *path); | |||
| static bool Save(char const *path, ResourceCodecData* data); | |||
| static ResourceCodecData* Load(std::string const &path); | |||
| static bool Save(std::string const &path, ResourceCodecData* data); | |||
| }; | |||
| } /* namespace lol */ | |||
| @@ -32,7 +32,7 @@ struct FileAccessBase : public StructSafeEnum | |||
| Write | |||
| }; | |||
| protected: | |||
| virtual bool BuildEnumMap(std::map<int64_t, String>& enum_map) | |||
| virtual bool BuildEnumMap(std::map<int64_t, std::string>& enum_map) | |||
| { | |||
| enum_map[Read] = "Read"; | |||
| enum_map[Write] = "Write"; | |||
| @@ -53,7 +53,7 @@ struct StreamTypeBase : public StructSafeEnum | |||
| FileBinary | |||
| }; | |||
| protected: | |||
| virtual bool BuildEnumMap(std::map<int64_t, String>& enum_map) | |||
| virtual bool BuildEnumMap(std::map<int64_t, std::string>& enum_map) | |||
| { | |||
| enum_map[StdIn] = "StdIn"; | |||
| enum_map[StdOut] = "StdOut"; | |||
| @@ -74,14 +74,14 @@ public: | |||
| ~File(); | |||
| void Open(StreamType stream); | |||
| void Open(String const &file, FileAccess mode, bool force_binary=false); | |||
| void Open(std::string const &file, FileAccess mode, bool force_binary=false); | |||
| bool IsValid() const; | |||
| void Close(); | |||
| int Read(uint8_t *buf, int count); | |||
| String ReadString(); | |||
| int Write(uint8_t const *buf, int count); | |||
| int WriteString(const String &buf); | |||
| std::string ReadString(); | |||
| int Write(void const *buf, int count); | |||
| int Write(std::string const &buf); | |||
| long int GetPosFromStart(); | |||
| void SetPosFromStart(long int pos); | |||
| long int size(); | |||
| @@ -94,7 +94,7 @@ private: | |||
| class Directory | |||
| { | |||
| public: | |||
| Directory(String const &name); | |||
| Directory(std::string const &name); | |||
| Directory(Directory const &that); | |||
| Directory &operator =(Directory const &that); | |||
| ~Directory(); | |||
| @@ -104,20 +104,20 @@ public: | |||
| void Close(); | |||
| private: | |||
| bool GetContent(array<String>* files, array<Directory>* directories); | |||
| bool GetContent(array<std::string>* files, array<Directory>* directories); | |||
| public: | |||
| bool GetContent(array<String>& files, array<Directory>& directories); | |||
| bool GetContent(array<std::string>& files, array<Directory>& directories); | |||
| bool GetContent(array<Directory>& directories); | |||
| bool GetContent(array<String>& files); | |||
| String GetName(); | |||
| bool GetContent(array<std::string>& files); | |||
| std::string GetName(); | |||
| long int GetModificationTime(); | |||
| static String GetCurrent(); | |||
| static bool SetCurrent(String directory); | |||
| static std::string GetCurrent(); | |||
| static bool SetCurrent(std::string directory); | |||
| private: | |||
| class DirectoryData* m_data; | |||
| String m_name; | |||
| class DirectoryData* m_data; | |||
| std::string m_name; | |||
| }; | |||
| } /* namespace lol */ | |||
| @@ -1,11 +1,13 @@ | |||
| // | |||
| // Lol Engine | |||
| // Lol Engine | |||
| // | |||
| // Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net> | |||
| // This program is free software; you can redistribute it and/or | |||
| // modify it under the terms of the Do What The Fuck You Want To | |||
| // Public License, Version 2, as published by Sam Hocevar. See | |||
| // http://www.wtfpl.net/ for more details. | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| // and/or modify it under the terms of the Do What the Fuck You Want | |||
| // to Public License, Version 2, as published by the WTFPL Task Force. | |||
| // See http://www.wtfpl.net/ for more details. | |||
| // | |||
| #pragma once | |||
| @@ -15,7 +17,8 @@ | |||
| // ------------------------------- | |||
| // | |||
| #include <stdint.h> | |||
| #include <string> | |||
| #include <cstdint> | |||
| namespace lol | |||
| { | |||
| @@ -46,12 +49,12 @@ namespace sys | |||
| { | |||
| extern void init(int argc, char *argv[], | |||
| String const &projectdir = LOL_CONFIG_PROJECTDIR, | |||
| String const &solutiondir = LOL_CONFIG_SOLUTIONDIR, | |||
| String const &sourcesubdir = LOL_CONFIG_SOURCESUBDIR); | |||
| std::string const &projectdir = LOL_CONFIG_PROJECTDIR, | |||
| std::string const &solutiondir = LOL_CONFIG_SOLUTIONDIR, | |||
| std::string const &sourcesubdir = LOL_CONFIG_SOURCESUBDIR); | |||
| extern void add_data_dir(String const &dir); | |||
| extern array<String> get_path_list(String const &file); | |||
| extern void add_data_dir(std::string const &dir); | |||
| extern array<std::string> get_path_list(std::string const &file); | |||
| } /* namespace sys */ | |||
| @@ -37,7 +37,7 @@ struct ThreadStatusBase : public StructSafeEnum | |||
| THREAD_STOPPED, | |||
| }; | |||
| protected: | |||
| virtual bool BuildEnumMap(std::map<int64_t, String>& enum_map) | |||
| virtual bool BuildEnumMap(std::map<int64_t, std::string>& enum_map) | |||
| { | |||
| enum_map[NOTHING] = "NOTHING"; | |||
| enum_map[THREAD_STARTED] = "THREAD_STARTED"; | |||
| @@ -59,7 +59,7 @@ struct ThreadJobTypeBase : public StructSafeEnum | |||
| THREAD_STOP | |||
| }; | |||
| protected: | |||
| virtual bool BuildEnumMap(std::map<int64_t, String>& enum_map) | |||
| virtual bool BuildEnumMap(std::map<int64_t, std::string>& enum_map) | |||
| { | |||
| enum_map[NONE] = "NONE"; | |||
| enum_map[WORK_TODO] = "WORK_TODO"; | |||
| @@ -229,13 +229,13 @@ public: | |||
| virtual ~FileUpdateTester(); | |||
| //------------------------------------------------------------------------- | |||
| FileUpdateTester::Status* RegisterFile(String const& path); | |||
| FileUpdateTester::Status* RegisterFile(std::string const& path); | |||
| protected: | |||
| void UnregisterFile(String const& path); | |||
| void UnregisterFile(std::string const& path); | |||
| public: | |||
| void UnregisterFile(FileUpdateTester::Status*& status); | |||
| //TODO: Add directories | |||
| //FileUpdateTester::Status* RegisterDirectory(String const& path, bool check_files=false); | |||
| //FileUpdateTester::Status* RegisterDirectory(std::string const& path, bool check_files=false); | |||
| virtual void TickGame(float seconds); | |||
| virtual void TreatResult(ThreadJob* result); | |||
| @@ -243,7 +243,7 @@ private: | |||
| uint32_t m_frame_skip = 4; | |||
| uint32_t m_frame_count = 0; | |||
| array<ThreadJob*> m_job_done; | |||
| std::map<String, Status*> m_files; | |||
| std::map<std::string, Status*> m_files; | |||
| }; | |||
| typedef FileUpdateTester::Status FileUpdateStatus; | |||
| @@ -262,7 +262,7 @@ public: | |||
| { } | |||
| //Returns a dummy image, and start a job to load the image on a thread | |||
| image* Load(const lol::String& path); | |||
| image* Load(const std::string& path); | |||
| bool CheckStatus(image* img); | |||
| protected: | |||
| @@ -270,7 +270,7 @@ protected: | |||
| private: | |||
| image m_dummy_image; | |||
| std::map<String, image*> m_images; | |||
| std::map<std::string, image*> m_images; | |||
| array<image*> m_loaded_images; | |||
| }; | |||
| @@ -60,26 +60,26 @@ class LuaBaseData | |||
| return LUA_ERRFILE; | |||
| auto stack = LuaStack::Begin(l); | |||
| char const *filename = stack.Get<char const*>(); | |||
| std::string filename = stack.Get<std::string>(); | |||
| int status = LUA_ERRFILE; | |||
| File f; | |||
| for (auto candidate : sys::get_path_list(filename)) | |||
| for (auto const &candidate : sys::get_path_list(filename)) | |||
| { | |||
| f.Open(candidate, FileAccess::Read); | |||
| if (f.IsValid()) | |||
| { | |||
| std::string s = f.ReadString().C(); | |||
| std::string s = f.ReadString(); | |||
| f.Close(); | |||
| msg::debug("loading Lua file %s\n", candidate.C()); | |||
| msg::debug("loading Lua file %s\n", candidate.c_str()); | |||
| status = LuaDoCode(l, s); | |||
| break; | |||
| } | |||
| } | |||
| if (status == LUA_ERRFILE) | |||
| msg::error("could not find Lua file %s\n", filename); | |||
| msg::error("could not find Lua file %s\n", filename.c_str()); | |||
| else if (status == 1) | |||
| { | |||
| stack.SetIndex(-1); | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2017 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| @@ -30,6 +30,8 @@ | |||
| #endif | |||
| #include <atomic> | |||
| #include <string> | |||
| #include <algorithm> | |||
| #include <sys/stat.h> | |||
| namespace lol | |||
| @@ -68,18 +70,19 @@ class FileData | |||
| } | |||
| } | |||
| void Open(String const &file, FileAccess mode, bool force_binary) | |||
| void Open(std::string const &file, FileAccess mode, bool force_binary) | |||
| { | |||
| m_type = (force_binary) ? (StreamType::FileBinary) : (StreamType::File); | |||
| #if __ANDROID__ | |||
| ASSERT(g_assets); | |||
| m_asset = AAssetManager_open(g_assets, file.C(), AASSET_MODE_UNKNOWN); | |||
| m_asset = AAssetManager_open(g_assets, file.c_str(), AASSET_MODE_UNKNOWN); | |||
| #elif HAVE_STDIO_H | |||
| /* FIXME: no modes, no error checking, no nothing */ | |||
| stat(file.C(), &m_stat); | |||
| String access = (mode == FileAccess::Write) ? ("w") : ("r"); | |||
| if (force_binary) access += "b"; | |||
| m_fd = fopen(file.C(), access.C()); | |||
| stat(file.c_str(), &m_stat); | |||
| std::string access(mode == FileAccess::Write ? "w" : "r"); | |||
| if (force_binary) | |||
| access += "b"; | |||
| m_fd = fopen(file.c_str(), access.c_str()); | |||
| #endif | |||
| } | |||
| @@ -125,11 +128,11 @@ class FileData | |||
| #endif | |||
| } | |||
| String ReadString() | |||
| std::string ReadString() | |||
| { | |||
| array<uint8_t> buf; | |||
| buf.resize(BUFSIZ); | |||
| String ret; | |||
| std::string ret; | |||
| while (IsValid()) | |||
| { | |||
| int done = Read(&buf[0], buf.count()); | |||
| @@ -137,7 +140,7 @@ class FileData | |||
| if (done <= 0) | |||
| break; | |||
| int oldsize = ret.count(); | |||
| int oldsize = ret.length(); | |||
| ret.resize(oldsize + done); | |||
| memcpy(&ret[oldsize], &buf[0], done); | |||
| @@ -146,7 +149,7 @@ class FileData | |||
| return ret; | |||
| } | |||
| int Write(uint8_t const *buf, int count) | |||
| int Write(void const *buf, int count) | |||
| { | |||
| #if __ANDROID__ | |||
| //return AAsset_read(m_asset, buf, count); | |||
| @@ -162,11 +165,6 @@ class FileData | |||
| #endif | |||
| } | |||
| int WriteString(const String &buf) | |||
| { | |||
| return Write((uint8_t const *)buf.C(), buf.count()); | |||
| } | |||
| long int GetPosFromStart() | |||
| { | |||
| #if __ANDROID__ | |||
| @@ -274,7 +272,7 @@ void File::Open(StreamType stream) | |||
| } | |||
| //-- | |||
| void File::Open(String const &file, FileAccess mode, bool force_binary) | |||
| void File::Open(std::string const &file, FileAccess mode, bool force_binary) | |||
| { | |||
| m_data->Open(file, mode, force_binary); | |||
| } | |||
| @@ -298,21 +296,21 @@ int File::Read(uint8_t *buf, int count) | |||
| } | |||
| //-- | |||
| String File::ReadString() | |||
| std::string File::ReadString() | |||
| { | |||
| return m_data->ReadString(); | |||
| } | |||
| //-- | |||
| int File::Write(uint8_t const *buf, int count) | |||
| int File::Write(void const *buf, int count) | |||
| { | |||
| return m_data->Write(buf, count); | |||
| } | |||
| //-- | |||
| int File::WriteString(const String &buf) | |||
| int File::Write(std::string const &buf) | |||
| { | |||
| return m_data->WriteString(buf); | |||
| return m_data->Write(buf.c_str(), buf.length()); | |||
| } | |||
| //-- | |||
| @@ -355,7 +353,7 @@ class DirectoryData | |||
| #endif | |||
| } | |||
| void Open(String const &directory, FileAccess mode) | |||
| void Open(std::string const &directory, FileAccess mode) | |||
| { | |||
| UNUSED(mode); /* FIXME */ | |||
| @@ -364,14 +362,14 @@ class DirectoryData | |||
| /* FIXME: not implemented */ | |||
| #elif defined(_WIN32) | |||
| m_directory = directory; | |||
| String filter = m_directory + String("*"); | |||
| filter.replace('/', '\\', true); | |||
| std::string filter = m_directory + "*"; | |||
| std::replace(filter.begin(), filter.end(), '/', '\\'); | |||
| WIN32_FIND_DATA FindFileData; | |||
| m_handle = FindFirstFile(filter.C(), &FindFileData); | |||
| stat(directory.C(), &m_stat); | |||
| m_handle = FindFirstFile(filter.c_str(), &FindFileData); | |||
| stat(directory.c_str(), &m_stat); | |||
| #elif HAVE_STDIO_H | |||
| m_dd = opendir(directory.C()); | |||
| stat(directory.C(), &m_stat); | |||
| m_dd = opendir(directory.c_str()); | |||
| stat(directory.c_str(), &m_stat); | |||
| #endif | |||
| } | |||
| @@ -400,7 +398,7 @@ class DirectoryData | |||
| #endif | |||
| } | |||
| bool GetContentList(array<String>* files, array<String>* directories) | |||
| bool GetContentList(array<std::string>* files, array<std::string>* directories) | |||
| { | |||
| if (!IsValid()) | |||
| return false; | |||
| @@ -408,10 +406,10 @@ class DirectoryData | |||
| #if __ANDROID__ | |||
| /* FIXME: not implemented */ | |||
| #elif defined(_WIN32) | |||
| String filter = m_directory + String("*"); | |||
| filter.replace('/', '\\', true); | |||
| std::string filter = m_directory + "*"; | |||
| std::replace(filter.begin(), filter.end(), '/', '\\'); | |||
| WIN32_FIND_DATA find_data; | |||
| HANDLE handle = FindFirstFile(filter.C(), &find_data); | |||
| HANDLE handle = FindFirstFile(filter.c_str(), &find_data); | |||
| bool file_valid = (handle != INVALID_HANDLE_VALUE); | |||
| while (file_valid) | |||
| @@ -422,12 +420,12 @@ class DirectoryData | |||
| if (find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) | |||
| { | |||
| if (directories) | |||
| *directories << String(std::string(find_data.cFileName).c_str()); | |||
| *directories << std::string(find_data.cFileName); | |||
| } | |||
| else | |||
| { | |||
| if (files) | |||
| *files << String(find_data.cFileName); | |||
| *files << std::string(find_data.cFileName); | |||
| } | |||
| } | |||
| //Go for next one | |||
| @@ -467,7 +465,7 @@ class DirectoryData | |||
| /* FIXME: not implemented */ | |||
| #elif defined(_WIN32) | |||
| HANDLE m_handle; | |||
| String m_directory; | |||
| std::string m_directory; | |||
| #elif HAVE_STDIO_H | |||
| DIR *m_dd; | |||
| #endif | |||
| @@ -477,9 +475,9 @@ class DirectoryData | |||
| }; | |||
| //-- DIRECTORY -- | |||
| Directory::Directory(String const &name) | |||
| Directory::Directory(std::string const &name) | |||
| : m_data(new DirectoryData), | |||
| m_name(name + String("/")) | |||
| m_name(name + "/") | |||
| { | |||
| ++m_data->m_refcount; | |||
| } | |||
| @@ -543,9 +541,9 @@ void Directory::Close() | |||
| } | |||
| //-- | |||
| bool Directory::GetContent(array<String>* files, array<Directory>* directories) | |||
| bool Directory::GetContent(array<std::string>* files, array<Directory>* directories) | |||
| { | |||
| array<String> sfiles, sdirectories; | |||
| array<std::string> sfiles, sdirectories; | |||
| bool found_some = m_data->GetContentList(&sfiles, &sdirectories); | |||
| UNUSED(found_some); | |||
| @@ -561,7 +559,7 @@ bool Directory::GetContent(array<String>* files, array<Directory>* directories) | |||
| } | |||
| //-- | |||
| bool Directory::GetContent(array<String>& files, array<Directory>& directories) | |||
| bool Directory::GetContent(array<std::string>& files, array<Directory>& directories) | |||
| { | |||
| return GetContent(&files, &directories); | |||
| } | |||
| @@ -573,13 +571,13 @@ bool Directory::GetContent(array<Directory>& directories) | |||
| } | |||
| //-- | |||
| bool Directory::GetContent(array<String>& files) | |||
| bool Directory::GetContent(array<std::string>& files) | |||
| { | |||
| return GetContent(&files, nullptr); | |||
| } | |||
| //-- | |||
| String Directory::GetName() | |||
| std::string Directory::GetName() | |||
| { | |||
| return m_name; | |||
| } | |||
| @@ -591,33 +589,33 @@ long int Directory::GetModificationTime() | |||
| } | |||
| //-- | |||
| String Directory::GetCurrent() | |||
| std::string Directory::GetCurrent() | |||
| { | |||
| String result; | |||
| std::string ret; | |||
| #if __ANDROID__ | |||
| /* FIXME: not implemented */ | |||
| #elif defined(_WIN32) | |||
| TCHAR buff[MAX_PATH * 2]; | |||
| GetCurrentDirectory(MAX_PATH, buff); | |||
| result = buff; | |||
| result.replace('\\', '/', true); | |||
| ret = buff; | |||
| std::replace(ret.begin(), ret.end(), '\\', '/'); | |||
| #elif HAVE_STDIO_H | |||
| /* FIXME: not implemented */ | |||
| #endif | |||
| return result; | |||
| return ret; | |||
| } | |||
| //-- | |||
| bool Directory::SetCurrent(String directory) | |||
| bool Directory::SetCurrent(std::string directory) | |||
| { | |||
| #if __ANDROID__ | |||
| /* FIXME: not implemented */ | |||
| #elif defined(_WIN32) | |||
| String result = directory; | |||
| result.replace('/', '\\', true); | |||
| return !!SetCurrentDirectory(result.C()); | |||
| std::string result = directory; | |||
| std::replace(result.begin(), result.end(), '/', '\\'); | |||
| return !!SetCurrentDirectory(result.c_str()); | |||
| #elif HAVE_UNISTD_H | |||
| chdir(directory.C()); | |||
| chdir(directory.c_str()); | |||
| #endif | |||
| return false; | |||
| } | |||
| @@ -1,7 +1,7 @@ | |||
| // | |||
| // Lol Engine | |||
| // | |||
| // Copyright © 2010—2015 Sam Hocevar <sam@hocevar.net> | |||
| // Copyright © 2010—2018 Sam Hocevar <sam@hocevar.net> | |||
| // | |||
| // Lol Engine is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| @@ -36,18 +36,18 @@ namespace sys | |||
| # define SEPARATOR '/' | |||
| #endif | |||
| static array<String> data_dir; | |||
| static array<std::string> data_dir; | |||
| void init(int argc, char *argv[], | |||
| String const &projectdir, | |||
| String const &solutiondir, | |||
| String const &sourcesubdir) | |||
| std::string const &projectdir, | |||
| std::string const &solutiondir, | |||
| std::string const &sourcesubdir) | |||
| { | |||
| using namespace std; | |||
| msg::debug("project dir: “%s”\n", projectdir.C()); | |||
| msg::debug("solution dir: “%s”\n", solutiondir.C()); | |||
| msg::debug("source subdir: “%s”\n", sourcesubdir.C()); | |||
| msg::debug("project dir: “%s”\n", projectdir.c_str()); | |||
| msg::debug("solution dir: “%s”\n", solutiondir.c_str()); | |||
| msg::debug("source subdir: “%s”\n", sourcesubdir.c_str()); | |||
| /* | |||
| * Retrieve binary directory, defaulting to no directory on Android | |||
| @@ -55,9 +55,9 @@ void init(int argc, char *argv[], | |||
| */ | |||
| #if __ANDROID__ || EMSCRIPTEN | |||
| String binarydir = ""; | |||
| std::string binarydir = ""; | |||
| #else | |||
| String binarydir = "."; | |||
| std::string binarydir = "."; | |||
| char *cwd = nullptr; | |||
| # if HAVE_GETCWD | |||
| @@ -78,7 +78,7 @@ void init(int argc, char *argv[], | |||
| { | |||
| char const *last_sep = strrchr(argv[0], SEPARATOR); | |||
| if (last_sep) | |||
| binarydir = String(argv[0], last_sep - argv[0] + 1); | |||
| binarydir = std::string(argv[0], last_sep - argv[0] + 1); | |||
| } | |||
| #endif | |||
| @@ -89,31 +89,31 @@ void init(int argc, char *argv[], | |||
| * add current directory in case we were launched from another place. | |||
| */ | |||
| if (!got_rootdir && projectdir.count() && solutiondir.count()) | |||
| if (!got_rootdir && projectdir.length() && solutiondir.length()) | |||
| { | |||
| /* This data dir is for standalone executables */ | |||
| String rootdir = binarydir; | |||
| if (rootdir.count() && rootdir.last() != SEPARATOR) | |||
| std::string rootdir = binarydir; | |||
| if (rootdir.length() && rootdir.back() != SEPARATOR) | |||
| rootdir += SEPARATOR; | |||
| add_data_dir(rootdir); | |||
| /* This data dir is for engine stuff */ | |||
| rootdir = solutiondir; | |||
| if (rootdir.count() && rootdir.last() != SEPARATOR) | |||
| if (rootdir.length() && rootdir.back() != SEPARATOR) | |||
| rootdir += SEPARATOR; | |||
| rootdir += "../src/"; /* FIXME: use SEPARATOR? */ | |||
| add_data_dir(rootdir); | |||
| /* This data dir is for submodule support stuff */ | |||
| rootdir = solutiondir; | |||
| if (rootdir.count() && rootdir.last() != SEPARATOR) | |||
| if (rootdir.length() && rootdir.back() != SEPARATOR) | |||
| rootdir += SEPARATOR; | |||
| rootdir += "./lol/src/"; /* FIXME: use SEPARATOR? */ | |||
| add_data_dir(rootdir); | |||
| /* This data dir is for project-specific stuff */ | |||
| rootdir = projectdir; | |||
| if (rootdir.count() && rootdir.last() != SEPARATOR) | |||
| if (rootdir.length() && rootdir.back() != SEPARATOR) | |||
| rootdir += SEPARATOR; | |||
| add_data_dir(rootdir); | |||
| @@ -128,14 +128,14 @@ void init(int argc, char *argv[], | |||
| { | |||
| /* First climb back the hierarchy to get to the engine root and | |||
| * add a data dir for engine stuff. */ | |||
| String rootdir = binarydir; | |||
| if (rootdir.count() && rootdir.last() != SEPARATOR) | |||
| std::string rootdir = binarydir; | |||
| if (rootdir.length() && rootdir.back() != SEPARATOR) | |||
| rootdir += SEPARATOR; | |||
| for (int i = 1; i < sourcesubdir.count(); ++i) | |||
| for (int i = 1; i < (int)sourcesubdir.length(); ++i) | |||
| { | |||
| if ((sourcesubdir[i] == SEPARATOR | |||
| && sourcesubdir[i - 1] != SEPARATOR) | |||
| || i == sourcesubdir.count() - 1) | |||
| || i == (int)sourcesubdir.length() - 1) | |||
| rootdir += "../"; | |||
| } | |||
| rootdir += "src/"; | |||
| @@ -148,24 +148,24 @@ void init(int argc, char *argv[], | |||
| got_rootdir = true; | |||
| } | |||
| msg::debug("binary dir: “%s”\n", binarydir.C()); | |||
| msg::debug("binary dir: “%s”\n", binarydir.c_str()); | |||
| for (int i = 0; i < data_dir.count(); ++i) | |||
| msg::debug("data dir %d/%d: “%s”\n", i + 1, data_dir.count(), | |||
| data_dir[i].C()); | |||
| data_dir[i].c_str()); | |||
| } | |||
| /* | |||
| * Data directory handling | |||
| */ | |||
| void add_data_dir(String const &dir) | |||
| void add_data_dir(std::string const &dir) | |||
| { | |||
| data_dir << dir; | |||
| } | |||
| array<String> get_path_list(String const &file) | |||
| array<std::string> get_path_list(std::string const &file) | |||
| { | |||
| array<String> ret; | |||
| array<std::string> ret; | |||
| /* If not an absolute path, look through known data directories */ | |||
| if (file[0] != '/') | |||
| @@ -35,12 +35,12 @@ public: | |||
| char const *GetName() { return "<FileUpdateTesterJob>"; } | |||
| FileUpdateTesterJob() | |||
| : ThreadJob(ThreadJobType::NONE) { } | |||
| FileUpdateTesterJob(String path) | |||
| FileUpdateTesterJob(std::string const &path) | |||
| : ThreadJob(ThreadJobType::WORK_TODO) | |||
| { | |||
| m_path = path; | |||
| } | |||
| String& GetPath() { return m_path; } | |||
| std::string const &GetPath() { return m_path; } | |||
| long int GetTime() { return m_time; } | |||
| bool HasUpdated() { return m_updated; } | |||
| void Restart() | |||
| @@ -52,9 +52,9 @@ public: | |||
| protected: | |||
| virtual bool DoWork() | |||
| { | |||
| array<String> pathlist = sys::get_path_list(m_path); | |||
| array<std::string> pathlist = sys::get_path_list(m_path); | |||
| File f; | |||
| for (String path : pathlist) | |||
| for (auto const &path : pathlist) | |||
| { | |||
| f.Open(path, FileAccess::Read); | |||
| if (f.IsValid()) | |||
| @@ -77,10 +77,10 @@ protected: | |||
| } | |||
| //----------------- | |||
| bool m_ready = false; | |||
| String m_path = String(); | |||
| long int m_time = 0; | |||
| bool m_updated = false; | |||
| bool m_ready = false; | |||
| std::string m_path; | |||
| long int m_time = 0; | |||
| bool m_updated = false; | |||
| }; | |||
| //FileUpdateTester ------------------------------------------------------------ | |||
| @@ -90,14 +90,14 @@ FileUpdateTester::~FileUpdateTester() | |||
| } | |||
| //File interface -------------------------------------------------------------- | |||
| FileUpdateTester::Status* FileUpdateTester::RegisterFile(String const& path) | |||
| FileUpdateTester::Status* FileUpdateTester::RegisterFile(std::string const& path) | |||
| { | |||
| DispatchJob(new FileUpdateTesterJob(path)); | |||
| m_files[path] = new FileUpdateTester::Status(); | |||
| return m_files[path]; | |||
| } | |||
| void FileUpdateTester::UnregisterFile(String const& path) | |||
| void FileUpdateTester::UnregisterFile(std::string const& path) | |||
| { | |||
| ASSERT(has_key(m_files, path)); | |||
| delete m_files[path]; | |||
| @@ -107,8 +107,7 @@ void FileUpdateTester::UnregisterFile(String const& path) | |||
| void FileUpdateTester::UnregisterFile(FileUpdateTester::Status*& status) | |||
| { | |||
| ASSERT(status); | |||
| array<String> all_keys = keys(m_files); | |||
| for (String key : all_keys) | |||
| for (auto const &key : keys(m_files)) | |||
| { | |||
| if (m_files[key] == status) | |||
| { | |||
| @@ -123,10 +122,9 @@ void FileUpdateTester::UnregisterFile(FileUpdateTester::Status*& status) | |||
| //----------------------------------------------------------------------------- | |||
| void FileUpdateTester::TickGame(float seconds) | |||
| { | |||
| //Reset update for this frame | |||
| array<String> all_keys = keys(m_files); | |||
| for (String key : all_keys) | |||
| m_files[key]->SetUpdated(false); | |||
| // Reset update for this frame | |||
| for (auto &kv : m_files) | |||
| kv.second->SetUpdated(false); | |||
| super::TickGame(seconds); | |||
| @@ -160,30 +158,31 @@ class AsyncImageJob : public ThreadJob | |||
| public: | |||
| char const *GetName() { return "<AsyncImageJob>"; } | |||
| AsyncImageJob() | |||
| : ThreadJob(ThreadJobType::NONE) | |||
| : ThreadJob(ThreadJobType::NONE) | |||
| { | |||
| m_path = String(); | |||
| } | |||
| AsyncImageJob(String path) | |||
| : ThreadJob(ThreadJobType::WORK_TODO) | |||
| AsyncImageJob(std::string const &path) | |||
| : ThreadJob(ThreadJobType::WORK_TODO), | |||
| m_path(path) | |||
| { | |||
| m_path = path; | |||
| } | |||
| String const& GetPath() { return m_path; } | |||
| std::string const& GetPath() { return m_path; } | |||
| Image const& GetImage() { return m_image; } | |||
| protected: | |||
| virtual bool DoWork() | |||
| { | |||
| return m_image.load(m_path.C()); | |||
| return m_image.load(m_path); | |||
| } | |||
| String m_path; | |||
| Image m_image; | |||
| std::string m_path; | |||
| Image m_image; | |||
| }; | |||
| //----------------------------------------------------------------------------- | |||
| Image* AsyncImageLoader::Load(const lol::String& path) | |||
| Image* AsyncImageLoader::Load(std::string const &path) | |||
| { | |||
| //Create a job | |||
| AsyncImageJob* job = new AsyncImageJob(path); | |||