language/duchain
arrayhelpers.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef ARRAYHELPERS_H
00020 #define ARRAYHELPERS_H
00021
00022 #include <QtCore/QVector>
00023 #include <QtCore/QList>
00024
00025
00026 #define FOREACH_ARRAY(item, container) for(int a = 0, mustDo = 1; a < container.size(); ++a) if((mustDo == 0 || mustDo == 1) && (mustDo = 2)) for(item(container[a]); mustDo; mustDo = 0)
00027
00028 namespace KDevelop {
00029
00030 template<class T, int num>
00031 QList<T> arrayToList(const KDevVarLengthArray<T, num>& array) {
00032 QList<T> ret;
00033 FOREACH_ARRAY(const T& item, array)
00034 ret << item;
00035
00036 return ret;
00037 }
00038
00039 template<class T, int num>
00040 QList<T> arrayToVector(const KDevVarLengthArray<T, num>& array) {
00041 QVector<T> ret;
00042 FOREACH_ARRAY(const T& item, array)
00043 ret << item;
00044
00045 return ret;
00046 }
00047
00048 template<class Container, class Type>
00049 bool arrayContains(Container& container, const Type& value) {
00050 for(int a = 0; a < container.size(); ++a)
00051 if(container[a] == value)
00052 return true;
00053
00054 return false;
00055 }
00056 template<class Container, class Type>
00057 void insertToArray(Container& array, const Type& item, int position) {
00058 Q_ASSERT(position >= 0 && position <= array.size());
00059 array.resize(array.size()+1);
00060 for(int a = array.size()-1; a > position; --a) {
00061 array[a] = array[a-1];
00062 }
00063 array[position] = item;
00064 }
00065
00066 template<class Container>
00067 void removeFromArray(Container& array, int position) {
00068 Q_ASSERT(position >= 0 && position < array.size());
00069 for(int a = position; a < array.size()-1; ++a) {
00070 array[a] = array[a+1];
00071 }
00072 array.resize(array.size()-1);
00073 }
00074
00075 template<class Container, class Type>
00076 bool removeOne(Container& container, const Type& value) {
00077 for(int a = 0; a < container.size(); ++a) {
00078 if(container[a] == value) {
00079 removeFromArray(container, a);
00080 return true;
00081 }
00082 }
00083 return false;
00084 }
00085 }
00086 #endif