Changeset 257 for cpp/common/stl-util.h


Ignore:
Timestamp:
12/03/14 18:52:05 (9 years ago)
Author:
Maciej Komosinski
Message:
  • added strmove(): strcpy() for overlapping strings
  • ExtObject? operator== can handle NULL arguments
  • source formatting and improved genetic operator messages
File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/common/stl-util.h

    r246 r257  
    1111template<typename T, std::size_t N> void push_back(vector<T>& v, T(&d)[N])
    1212{
    13 for(unsigned int i=0;i<N;i++)
    14         v.push_back(d[i]);
     13        for (unsigned int i = 0; i < N; i++)
     14                v.push_back(d[i]);
    1515}
    1616
    1717template<typename T> void erase(vector<T>& v, const T& e)
    1818{
    19 typename vector<T>::iterator it=std::find(v.begin(),v.end(),e);
    20 if (it!=v.end())
    21         v.erase(it);
     19        typename vector<T>::iterator it = std::find(v.begin(), v.end(), e);
     20        if (it != v.end())
     21                v.erase(it);
    2222}
    2323
    2424template<typename T> void deleteVectorElements(vector<T*>& v)
    2525{
    26 for(typename vector<T*>::iterator it=v.begin();it!=v.end();it++)
    27         delete *it;
    28 v.clear();
     26        for (typename vector<T*>::iterator it = v.begin(); it != v.end(); it++)
     27                delete *it;
     28        v.clear();
    2929}
    3030
    3131template<typename T> int findIndex(vector<T>& v, const T& e)
    3232{
    33 typename vector<T>::iterator it=find(v.begin(),v.end(),e);
    34 if (it!=v.end())
    35         return &*it-&v.front();
    36 return -1;
     33        typename vector<T>::iterator it = find(v.begin(), v.end(), e);
     34        if (it != v.end())
     35                return &*it - &v.front();
     36        return -1;
    3737}
     38
     39
     40char* strmove(char *a, char *b); //strcpy that works well for overlapping strings ("Source and destination overlap")
    3841
    3942string ssprintf(const char* format, ...);
     
    4548
    4649
    47 bool readCompleteFile(const char* filename, vector<char>& data, bool warn_on_missing_file=true);
    48 bool readCompleteFile(const char* filename, string& out, bool warn_on_missing_file=true);
    49 bool writeCompleteFile(const char* filename, const std::string& text,bool warn_on_fail=true);
    50 bool writeCompleteFile(const char* filename, vector<char>& data, bool warn_on_fail=true);
     50bool readCompleteFile(const char* filename, vector<char>& data, bool warn_on_missing_file = true);
     51bool readCompleteFile(const char* filename, string& out, bool warn_on_missing_file = true);
     52bool writeCompleteFile(const char* filename, const std::string& text, bool warn_on_fail = true);
     53bool writeCompleteFile(const char* filename, vector<char>& data, bool warn_on_fail = true);
    5154
    5255template<class T> class DeletingVector  // deletes the elements (pointers) in destructor
    5356{
    54   public:
    55 std::vector<T*> vector;
    56 ~DeletingVector()
     57public:
     58        std::vector<T*> vector;
     59        ~DeletingVector()
    5760        {
    58         for(int i=vector.size()-1;i>=0;i--)
    59                 delete vector[i];
     61                for (int i = vector.size() - 1; i >= 0; i--)
     62                        delete vector[i];
    6063        }
    61 T* operator[](int i) {return vector[i];}
    62 int size() {return vector.size();}
    63 void push_back(T* x) {vector.push_back(x);}
     64        T* operator[](int i) { return vector[i]; }
     65        int size() { return vector.size(); }
     66        void push_back(T* x) { vector.push_back(x); }
    6467};
    6568
Note: See TracChangeset for help on using the changeset viewer.