From 6cc2a14859df6edd3017abfee421cba8306e9a96 Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Sun, 12 Jul 2015 18:06:37 -0400 Subject: [PATCH] Some optimizations Forgot to update copyright year in previous commit. --- Jupiter/ArrayList.h | 4 +-- Jupiter/IRC.h | 2 +- Jupiter/Readable_String_Imp.h | 55 +++++++++++++++++++++++----------- Release/Jupiter.lib | Bin 277576 -> 277576 bytes 4 files changed, 41 insertions(+), 20 deletions(-) diff --git a/Jupiter/ArrayList.h b/Jupiter/ArrayList.h index 128bd61..3bfe610 100644 --- a/Jupiter/ArrayList.h +++ b/Jupiter/ArrayList.h @@ -182,8 +182,8 @@ template void Jupiter::ArrayList::empty() template void Jupiter::ArrayList::emptyAndDelete() { - for (size_t i = 0; i < Jupiter::List::length; i++) delete Jupiter::ArrayList::data[i]; - Jupiter::List::length = 0; + while (Jupiter::List::length != 0) + delete Jupiter::ArrayList::data[--Jupiter::List::length]; } template<> struct _Jupiter_DataBuffer_partial_specialization_impl diff --git a/Jupiter/IRC.h b/Jupiter/IRC.h index eb05d50..1b4517b 100644 --- a/Jupiter/IRC.h +++ b/Jupiter/IRC.h @@ -1,5 +1,5 @@ /** - * Copyright (C) 2013-2014 Justin James. + * Copyright (C) 2013-2015 Justin James. * * This license must be preserved. * Any applications, libraries, or code which make any use of any diff --git a/Jupiter/Readable_String_Imp.h b/Jupiter/Readable_String_Imp.h index 8d25fea..9bc34c9 100644 --- a/Jupiter/Readable_String_Imp.h +++ b/Jupiter/Readable_String_Imp.h @@ -1117,27 +1117,48 @@ template template class R> R Jupiter::Readable template template class R> R Jupiter::Readable_String::getWord(const T *in, size_t pos, const T *whitespace) { - unsigned int x = 0; - unsigned int y = 1; - for (unsigned int i = 0; i < pos || y == 1; x++) + if (*in == 0) + return R(); + + while (Jupiter::strpbrk(whitespace, *in) != nullptr) + if (*++in == 0) + return R(); + + if (pos == 0) { - if (in[x] == 0) return R(); - if (Jupiter::strpbrk(whitespace, in[x]) != nullptr) - { - if (y != 1) - { - y = 1; - i++; - } - } - else + do + ++in, ++pos; + while (*in != 0 && Jupiter::strpbrk(whitespace, *in) == nullptr); + + in -= pos; + return R::substring(in, 0, pos); + } + + loop_start: + { + if (Jupiter::strpbrk(whitespace, *in) != nullptr) { - if (i >= pos) break; - y = 0; + do + if (*++in == 0) + return R(); + while (Jupiter::strpbrk(whitespace, *in) != nullptr); + + if (--pos == 0) + goto loop_end; } + + if (++in == 0) + return R(); + goto loop_start; } - for (y = x; in[y] != 0 && Jupiter::strpbrk(whitespace, in[y]) == nullptr; y++); - return R::substring(in, x, y - x); + loop_end: + + do + ++in, ++pos; + while (*in != 0 && Jupiter::strpbrk(whitespace, *in) == nullptr); + + in -= pos; + return R::substring(in, 0, pos); } // getToken diff --git a/Release/Jupiter.lib b/Release/Jupiter.lib index e0a547c7d45b8cbcaa0d2f1ea1458ae0dd9a85b6..f67f652af1f87d30616f8207e114adc847ce77f4 100644 GIT binary patch delta 21263 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 L?cC=IJNEwonUdvb delta 21318 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