00001 #ifndef SCT_ILUMARSHALLING_H 00002 #define SCT_ILUMARSHALLING_H 00003 00004 #include <list> 00005 #include <string> 00006 #include <vector> 00007 00008 namespace Sct { 00009 00016 inline ilu_T_CString copyStringToILU(std::string str) { 00017 char *copy = (char *)malloc((str.length()+1) * sizeof(char)); 00018 strncpy(copy, str.c_str(), str.length()); 00019 copy[str.length()] = 0; 00020 return copy; 00021 } 00022 00023 template <typename ILUSequence, typename ListMember> 00024 inline ILUSequence *copyListToILU(std::list<ListMember> thisList) { 00025 ILUSequence *result; 00026 00027 result = ILUSequence::Create(4, NULL); 00028 result->Clear(0); 00029 00030 for(typename std::list<ListMember>::const_iterator m = thisList.begin(); 00031 m!=thisList.end(); 00032 m++) { 00033 result->Append(*m); 00034 } 00035 00036 return result; 00037 } 00038 00039 template <typename ILUSequence> 00040 inline ILUSequence *copyStringListToILU(std::list<std::string> thisList) { 00041 ILUSequence *result; 00042 00043 result = ILUSequence::Create(4, NULL); 00044 result->Clear(0); 00045 00046 for(std::list<std::string>::const_iterator m = thisList.begin(); 00047 m!=thisList.end(); 00048 m++) { 00049 char *copy = (char *)malloc((m->length()+1) * sizeof(char)); 00050 strncpy(copy, m->c_str(), m->length()); 00051 copy[m->length()] = 0; 00052 result->Append(copy); 00053 } 00054 00055 return result; 00056 } 00057 00058 template <typename ILUSequence, typename ListMember> 00059 inline std::list<ListMember> copyILUToList(ILUSequence* thisSeq) { 00060 std::list<ListMember> result; 00061 00062 if (thisSeq) { 00063 for(unsigned int i=0; i<thisSeq->Length(); i++) { 00064 result.push_back(thisSeq->Nth(i)); 00065 } 00066 } 00067 00068 return result; 00069 } 00070 00071 00072 template <typename ILUSequence, typename List> 00073 inline List copyILUToStdCollection(ILUSequence* thisSeq) { 00074 List result; 00075 00076 if (thisSeq) { 00077 for(unsigned int i=0; i<thisSeq->Length(); i++) { 00078 result.push_back(thisSeq->Nth(i)); 00079 } 00080 } 00081 00082 return result; 00083 } 00084 00085 00086 template <typename ILUSequence, typename ArrayMember> 00087 inline ILUSequence *copyArrayToILU(ArrayMember *array, unsigned long length) { 00088 ILUSequence *result; 00089 00090 result = ILUSequence::Create(4, NULL); 00091 result->Clear(0); 00092 00093 if(array) { 00094 for(unsigned long i=0; i<length; i++) { 00095 result->Append(array[i]); 00096 } 00097 } 00098 00099 return result; 00100 } 00101 00102 template <typename ILUSequence, typename ArrayMember> 00103 inline ILUSequence *copyVectorToILU(std::vector<ArrayMember> array) { 00104 ILUSequence *result; 00105 00106 result = ILUSequence::Create(4, NULL); 00107 result->Clear(0); 00108 00109 for(unsigned long i=0; i<array.size(); i++) { 00110 result->Append(array[i]); 00111 } 00112 00113 return result; 00114 } 00115 00116 template <typename ILUMatrix, typename ILUSequence, typename ArrayMember> 00117 inline ILUMatrix *copyVectorVectorToILU(std::vector<std::vector<ArrayMember> > matrix) { 00118 ILUMatrix *result; 00119 00120 result = ILUMatrix::Create(4, NULL); 00121 result->Clear(0); 00122 00123 for(unsigned long i=0; i<matrix.size(); i++) { 00124 ILUSequence *seq = ILUSequence::Create(4, NULL); 00125 seq->Clear(0); 00126 for(unsigned long j=0; j<matrix[i].size(); j++) { 00127 seq->Append(matrix[i][j]); 00128 } 00129 result->Append(seq); 00130 } 00131 00132 return result; 00133 } 00134 00135 template <typename ILUBlock, typename ArrayMember> 00136 inline ArrayMember *copyILUToArray(ILUBlock thisSeq, ArrayMember *array, size_t length) { 00137 assert(thisSeq->Length() == length); 00138 for(unsigned int i=0; i<length; i++) { 00139 array[i] = thisSeq->Nth(i); 00140 } 00141 00142 return array; 00143 } 00144 00145 00146 } 00147 00148 00149 #endif //SCT_ILUMARSHALLING_H