Changeset 2266


Ignore:
Timestamp:
Jan 23, 2013, 7:29:34 PM (7 years ago)
Author:
sam
Message:

base: add safety asserts to the Array and String classes.

Location:
trunk/src/lol/base
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lol/base/array.h

    r2261 r2266  
    1818#if !defined __LOL_BASE_ARRAY_H__
    1919#define __LOL_BASE_ARRAY_H__
     20
     21#include <lol/base/assert.h>
    2022
    2123#include <new>
     
    119121    inline Element& operator[](int n)
    120122    {
     123        /* Allow array[0] even if size is zero so that people can
     124         * always use &array[0] to get a pointer to the data. */
     125        ASSERT(n >= 0);
     126        ASSERT(n < m_count || (!n && !m_count));
    121127        return m_data[n];
    122128    }
     
    124130    inline Element const& operator[](int n) const
    125131    {
     132        ASSERT(n >= 0);
     133        ASSERT(n < m_count || (!n && !m_count));
    126134        return m_data[n];
    127135    }
     
    129137    inline Element& Last()
    130138    {
     139        ASSERT(m_count > 0);
    131140        return m_data[m_count - 1];
    132141    }
     
    134143    inline Element const& Last() const
    135144    {
     145        ASSERT(m_count > 0);
    136146        return m_data[m_count - 1];
    137147    }
     
    159169    inline void Pop()
    160170    {
     171        ASSERT(m_count > 0);
    161172        Remove(m_count - 1, 1);
    162173    }
     
    164175    void Remove(int pos, int todelete = 1)
    165176    {
     177        ASSERT(pos >= 0);
     178        ASSERT(pos + todelete <= m_count);
    166179        for (int i = pos; i + todelete < m_count; i++)
    167180            m_data[i] = m_data[i + todelete];
     
    173186    void Resize(int count, Element e = Element())
    174187    {
     188        ASSERT(count > 0);
    175189        Reserve(count);
    176190
  • trunk/src/lol/base/string.h

    r2260 r2266  
    1818#define __LOL_BASE_STRING_H__
    1919
     20#include <lol/base/assert.h>
    2021#include <lol/base/array.h>
    2122
     
    4243    {
    4344        using namespace std;
     45        ASSERT(str);
    4446        Resize((int)strlen(str));
    4547        memcpy(&(*this)[0], str, Count() + 1);
     
    5052    {
    5153        using namespace std;
     54        ASSERT(str);
    5255        Resize(count);
    5356        memcpy(&(*this)[0], str, count);
    54         (*this)[count] = '\0';
     57        ((Super &)*this)[count] = '\0';
    5558    }
    5659
     
    6265    inline char &operator [](int n)
    6366    {
     67        ASSERT(n >= 0);
     68        ASSERT(n < Count() || (!n && !Count()));
    6469        return ((Super &)*this)[n];
    6570    }
     
    6772    inline char const &operator [](int n) const
    6873    {
     74        ASSERT(n >= 0);
     75        ASSERT(n < Count() || (!n && !Count()));
    6976        return ((Super const &)*this)[n];
    7077    }
     
    7279    inline char &Last()
    7380    {
     81        ASSERT(Count() > 0);
    7482        return (*this)[Count() - 1];
    7583    }
     
    7785    inline char const &Last() const
    7886    {
     87        ASSERT(Count() > 0);
    7988        return (*this)[Count() - 1];
    8089    }
     
    8796    void Resize(int count)
    8897    {
     98        ASSERT(count >= 0, "count = %d", count);
    8999        ((Super &)*this).Resize(count + 1);
    90100        ((Super &)*this).Last() = '\0';
Note: See TracChangeset for help on using the changeset viewer.