comparison Orthanc/Core/Toolbox.cpp @ 35:7c6cf09d838b

toolchains for MinGW-w64
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 30 Jun 2015 11:55:34 +0200
parents 15acbf5e7545
children dbc1c9ca0030
comparison
equal deleted inserted replaced
34:86299731dc4e 35:7c6cf09d838b
683 digest[4]); 683 digest[4]);
684 } 684 }
685 685
686 bool Toolbox::IsSHA1(const std::string& str) 686 bool Toolbox::IsSHA1(const std::string& str)
687 { 687 {
688 if (str.size() != 44) 688 if (str.size() == 0)
689 {
690 return false;
691 }
692
693 const char* start = &str[0];
694 const char* end = start + str.size();
695
696 // Trim the beginning of the string
697 while (start < end)
698 {
699 if (*start == '\0' ||
700 isspace(*start))
701 {
702 start++;
703 }
704 else
705 {
706 break;
707 }
708 }
709
710 // Trim the trailing of the string
711 while (start < end)
712 {
713 if (*(end - 1) == '\0' ||
714 isspace(*(end - 1)))
715 {
716 end--;
717 }
718 else
719 {
720 break;
721 }
722 }
723
724 if (end - start != 44)
689 { 725 {
690 return false; 726 return false;
691 } 727 }
692 728
693 for (unsigned int i = 0; i < 44; i++) 729 for (unsigned int i = 0; i < 44; i++)
695 if (i == 8 || 731 if (i == 8 ||
696 i == 17 || 732 i == 17 ||
697 i == 26 || 733 i == 26 ||
698 i == 35) 734 i == 35)
699 { 735 {
700 if (str[i] != '-') 736 if (start[i] != '-')
701 return false; 737 return false;
702 } 738 }
703 else 739 else
704 { 740 {
705 if (!isalnum(str[i])) 741 if (!isalnum(start[i]))
706 return false; 742 return false;
707 } 743 }
708 } 744 }
709 745
710 return true; 746 return true;
1135 pos++; 1171 pos++;
1136 } 1172 }
1137 1173
1138 return true; 1174 return true;
1139 } 1175 }
1176
1177
1178 void Toolbox::CopyJsonWithoutComments(Json::Value& target,
1179 const Json::Value& source)
1180 {
1181 switch (source.type())
1182 {
1183 case Json::nullValue:
1184 target = Json::nullValue;
1185 break;
1186
1187 case Json::intValue:
1188 target = source.asInt64();
1189 break;
1190
1191 case Json::uintValue:
1192 target = source.asUInt64();
1193 break;
1194
1195 case Json::realValue:
1196 target = source.asDouble();
1197 break;
1198
1199 case Json::stringValue:
1200 target = source.asString();
1201 break;
1202
1203 case Json::booleanValue:
1204 target = source.asBool();
1205 break;
1206
1207 case Json::arrayValue:
1208 {
1209 target = Json::arrayValue;
1210 for (Json::Value::ArrayIndex i = 0; i < source.size(); i++)
1211 {
1212 Json::Value& item = target.append(Json::nullValue);
1213 CopyJsonWithoutComments(item, source[i]);
1214 }
1215
1216 break;
1217 }
1218
1219 case Json::objectValue:
1220 {
1221 target = Json::objectValue;
1222 Json::Value::Members members = source.getMemberNames();
1223 for (Json::Value::ArrayIndex i = 0; i < members.size(); i++)
1224 {
1225 const std::string item = members[i];
1226 CopyJsonWithoutComments(target[item], source[item]);
1227 }
1228
1229 break;
1230 }
1231
1232 default:
1233 break;
1234 }
1235 }
1236
1237
1238 bool Toolbox::StartsWith(const std::string& str,
1239 const std::string& prefix)
1240 {
1241 if (str.size() < prefix.size())
1242 {
1243 return false;
1244 }
1245 else
1246 {
1247 return str.compare(0, prefix.size(), prefix) == 0;
1248 }
1249 }
1250
1140 } 1251 }
1141 1252