00001
00010 #ifndef BS_DATA_STORAGE_INTERFACE_H_
00011 #define BS_DATA_STORAGE_INTERFACE_H_
00012
00013 namespace blue_sky
00014 {
00015
00016 class BS_API_PLUGIN data_storage : public objbase
00017 {
00018 public:
00019
00020 virtual ~data_storage () {}
00021 virtual data_storage &save (const std::string &name, const std::string &value);
00022
00023 template <typename T>
00024 data_storage &save (const std::string &name, const T &t)
00025 {
00026 return save (name, boost::lexical_cast <std::string> (t));
00027 }
00028
00029 BLUE_SKY_TYPE_DECL (data_storage);
00030 };
00031
00032 class BS_API_PLUGIN data_serializer : public objbase
00033 {
00034 public:
00035
00036 typedef smart_ptr <data_storage> sp_storage_t;
00037
00038 public:
00039
00040 virtual ~data_serializer () {}
00041 virtual void save (const sp_storage_t &storage, const sp_obj &obj) const;
00042
00043 const type_descriptor &handled_type () const;
00044
00045 BLUE_SKY_TYPE_DECL (data_serializer);
00046
00047 protected:
00048
00049 type_descriptor handled_type_;
00050 };
00051
00052 class BS_API_PLUGIN data_storage_interface : public objbase
00053 {
00054 public:
00055
00056 typedef sp_obj sp_storage_t;
00057 typedef smart_ptr <data_serializer> sp_serializer_t;
00058 typedef bos_val_table <std::string, sp_serializer_t> serializer_list_t;
00059 typedef smart_ptr <serializer_list_t> sp_serializer_list_t;
00060
00061 public:
00062 virtual ~data_storage_interface () {}
00063
00064 void save (const sp_obj &obj) const;
00065
00066 void register_serializer (const sp_serializer_t &serializer);
00067 void set_storage (const sp_storage_t &storage);
00068
00069 BLUE_SKY_TYPE_DECL (data_storage_interface);
00070
00071 private:
00072
00073 sp_storage_t storage_;
00074 sp_serializer_list_t serializer_list_;
00075 };
00076
00078 bool data_storage_register_type (const plugin_descriptor &pd);
00079 bool data_serializer_register_type (const plugin_descriptor &pd);
00080 bool data_storage_interface_register_type (const plugin_descriptor &pd);
00081
00082 }
00083
00084
00085 #endif // #ifndef BS_DATA_STORAGE_INTERFACE_H_