]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/listdata.h
Use size_t to represent counts and indices
[libs/gltk.git] / source / listdata.h
index 77be5ee7b8e1cb52200936eb05d85ddc0b8cc3c4..cd4fb9a3f96b6c52e18b4804eadeb4ade61c8d0b 100644 (file)
@@ -14,19 +14,19 @@ namespace GLtk {
 class MSPGLTK_API ListData
 {
 public:
-       sigc::signal<void, unsigned> signal_item_added;
-       sigc::signal<void, unsigned> signal_item_removed;
+       sigc::signal<void, std::size_t> signal_item_added;
+       sigc::signal<void, std::size_t> signal_item_removed;
        sigc::signal<void> signal_cleared;
-       sigc::signal<void, unsigned> signal_refresh_item;
+       sigc::signal<void, std::size_t> signal_refresh_item;
 
 protected:
        ListData() = default;
 public:
        virtual ~ListData() = default;
 
-       virtual unsigned size() const = 0;
-       virtual std::string get_string(unsigned) const = 0;
-       void refresh(unsigned i) const
+       virtual std::size_t size() const = 0;
+       virtual std::string get_string(std::size_t) const = 0;
+       void refresh(std::size_t i) const
        {
                if(i>=size())
                        throw std::out_of_range("ListData::refresh");
@@ -45,7 +45,7 @@ protected:
 public:
        void append(const T &v) { insert(items.size(), v); }
 
-       void insert(unsigned i, const T &v)
+       void insert(std::size_t i, const T &v)
        {
                if(i>items.size())
                        throw std::out_of_range("ListDataStore::insert");
@@ -54,7 +54,7 @@ public:
                signal_item_added.emit(i);
        }
 
-       const T &get(unsigned i) const
+       const T &get(std::size_t i) const
        {
                if(i>=items.size())
                        throw std::out_of_range("ListDataStore::get");
@@ -62,23 +62,23 @@ public:
                return items[i];
        }
 
-       int find(const T &v) const
+       std::size_t find(const T &v) const
        {
-               for(unsigned i=0; i<items.size(); ++i)
+               for(std::size_t i=0; i<items.size(); ++i)
                        if(items[i]==v)
                                return i;
-               return -1;
+               return std::numeric_limits<std::size_t>::max();
        }
 
        using ListData::refresh;
        void refresh(const T &v) const
        {
-               int i = find(v);
-               if(i>=0)
+               std::size_t i = find(v);
+               if(i<items.size())
                        signal_refresh_item.emit(i);
        }
 
-       void remove(unsigned i)
+       void remove(std::size_t i)
        {
                if(i>=items.size())
                        throw std::out_of_range("ListDataStore::remove");
@@ -93,14 +93,14 @@ public:
                signal_cleared.emit();
        }
 
-       unsigned size() const override { return items.size(); }
+       std::size_t size() const override { return items.size(); }
 };
 
 template<typename T>
 class BasicListData: public ListDataStore<T>
 {
 public:
-       virtual std::string get_string(unsigned i) const
+       virtual std::string get_string(std::size_t i) const
        { return lexical_cast<std::string>(this->get(i)); }
 };
 
@@ -116,7 +116,7 @@ private:
 public:
        FunctionListData(Func f): func(f) { }
 
-       std::string get_string(unsigned i) const override
+       std::string get_string(std::size_t i) const override
        { return func(this->get(i)); }
 };