aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2014-03-26 20:39:02 -0700
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2014-03-26 20:39:02 -0700
commit7d80e3d568554f0c742a41bb9c9af567d71b5b83 (patch)
treef8ef34eec4ae878da260bf36ba2b367ad79f4937 /src
parent57cd749c477eb3920f117b1ad3cf11cee89b8c9b (diff)
Added sort array in place
Diffstat (limited to 'src')
-rw-r--r--src/core/basetypes/MCArray.cc17
-rw-r--r--src/core/basetypes/MCArray.h1
2 files changed, 18 insertions, 0 deletions
diff --git a/src/core/basetypes/MCArray.cc b/src/core/basetypes/MCArray.cc
index 804f796c..038ec022 100644
--- a/src/core/basetypes/MCArray.cc
+++ b/src/core/basetypes/MCArray.cc
@@ -229,6 +229,23 @@ Array * Array::sortedArray(int (* compare)(void * a, void * b, void * context),
return result;
}
+void Array::sortArray(int (* compare)(void * a, void * b, void * context), void * context)
+{
+ struct sortData data;
+ data.compare = compare;
+ data.context = context;
+#ifdef __MACH__
+ qsort_r(carray_data(mArray), carray_count(mArray),
+ sizeof(* carray_data(mArray)), &data,
+ (int (*)(void *, const void *, const void *)) sortCompare);
+#else
+ qsort_r(carray_data(mArray), carray_count(mArray),
+ sizeof(* carray_data(mArray)),
+ (int (*)(const void *, const void *, void *)) sortCompare,
+ &data);
+#endif
+}
+
String * Array::componentsJoinedByString(String * delimiter)
{
String * result = String::string();
diff --git a/src/core/basetypes/MCArray.h b/src/core/basetypes/MCArray.h
index 6ee64792..82e9760a 100644
--- a/src/core/basetypes/MCArray.h
+++ b/src/core/basetypes/MCArray.h
@@ -36,6 +36,7 @@ namespace mailcore {
virtual bool containsObject(Object * obj);
virtual Array * sortedArray(int (* compare)(void * a, void * b, void * context), void * context);
+ virtual void sortArray(int (* compare)(void * a, void * b, void * context), void * context);
virtual String * componentsJoinedByString(String * delimiter);
public: // subclass behavior