00001
00003
00004 #ifndef header_resourcetype_string
00005 #define header_resourcetype_string
00006
00007 #include "resource_manager.h"
00008 #include "resourcetype.h"
00009 #include "resource.h"
00010 #include "../System/clanstring.h"
00011 #include "../System/error.h"
00012 #include "../IOData/inputsource.h"
00013 #include "../IOData/inputsource_provider.h"
00014
00015 class CL_Res_String : public CL_ResourceType
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00030
00031 public:
00032 static std::string load(std::string res_id, CL_ResourceManager *manager, std::string _default);
00033 static std::string load(std::string res_id, CL_ResourceManager *manager );
00034
00035 CL_Res_String();
00036
00037 private:
00038 friend CL_ResourceManager;
00039 virtual CL_Resource *create_from_location(
00040 std::string name,
00041 std::string location,
00042 CL_ResourceOptions *options,
00043 CL_ResourceManager *parent);
00044
00045 virtual CL_Resource *create_from_serialization(
00046 std::string name,
00047 CL_ResourceManager *parent);
00048 };
00049
00050 class CL_StringResource : public CL_Resource
00051 {
00052 public:
00053 CL_StringResource(
00054 std::string name,
00055 std::string value)
00056 : CL_Resource("string", name)
00057 {
00058 this->value = value;
00059 load_count = 0;
00060 }
00061
00062 CL_StringResource(
00063 std::string name,
00064 std::string location,
00065 CL_ResourceOptions *options,
00066 CL_ResourceManager *parent)
00067 : CL_Resource("string", name)
00068 {
00069 value = location;
00070 load_count = 0;
00071 }
00072
00073 CL_StringResource(
00074 std::string name,
00075 CL_ResourceManager *parent)
00076 : CL_Resource("string", name)
00077 {
00078 CL_InputSource *input =
00079 parent->get_resource_provider()->open_source(name.c_str());
00080
00081 value = input->read_string();
00082
00083 delete input;
00084 load_count = 0;
00085 }
00086
00087 std::string get_value() const { return value; }
00088
00089 virtual void load() { load_count++; }
00090 virtual void unload() { load_count--; }
00091 virtual int get_load_count() { return load_count; }
00092
00093 virtual void serialize_save(CL_OutputSource *output)
00094 {
00095 output->write_string(value.c_str());
00096 }
00097
00098 private:
00099 std::string value;
00100 int load_count;
00101 };
00102
00103 #endif