]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/collection.h
Make use of KeyError's key parameter
[libs/datafile.git] / source / collection.h
index 24be69dd2f70cd07d425453b3121788b2ff60086..f293428c8cdd0fc046019531335ccf6d28b525fc 100644 (file)
@@ -110,7 +110,7 @@ private:
                        ItemCreatorBridge<S> *creator=dynamic_cast<ItemCreatorBridge<S> *>(this);
                        if(creator)
                        {
-                               creator->create(coll, name, ptr);
+                               ptr=creator->create(coll, name);
                                return true;
                        }
                        return false;
@@ -120,7 +120,7 @@ private:
        template<typename S>
        struct ItemCreatorBridge: public ItemCreatorBase
        {
-               virtual bool create(Collection &, const std::string &, S *&) const =0;
+               virtual S *create(Collection &, const std::string &) const =0;
        };
 
        template<typename T, typename S, typename C>
@@ -192,7 +192,7 @@ public:
        void add(const std::string &name, T *d)
        {
                if(items.count(name))
-                       throw KeyError("Duplicate key '"+name+"' in collection");
+                       throw KeyError("Duplicate key in collection", name);
 
                items[name]=new Item<typename RemoveConst<T>::Type>(d);
        }
@@ -207,13 +207,13 @@ public:
 
                ItemMap::const_iterator i=items.find(name);
                if(i==items.end())
-                       throw KeyError("Item '"+name+"' not found in collection");
+                       throw KeyError("Item not found in collection", name);
 
                const Item<NCT> *item=dynamic_cast<const Item<NCT> *>(i->second);
                if(!item)
-                       throw TypeError("Item '"+name+"' is not of correct type");
+                       throw TypeError("Type mismatch on item '"+name+"'");
 
-               return *item->data;
+               return item->data;
        }
 
        /**
@@ -236,17 +236,17 @@ public:
                                {
                                        // We already know that the item didn't exist yet
                                        items[name]=new Item<NCT>(d);
-                                       return *d;
+                                       return d;
                                }
                        }
-                       throw KeyError("Item '"+name+"' not found in collection");
+                       throw KeyError("Item not found in collection", name);
                }
 
                const Item<NCT> *item=dynamic_cast<const Item<NCT> *>(i->second);
                if(!item)
-                       throw TypeError("Item '"+name+"' is not of correct type");
+                       throw TypeError("Type mismatch on item '"+name+"'");
 
-               return *item->data;
+               return item->data;
        }
 
        /**