diff options
Diffstat (limited to 'indra/llcommon')
31 files changed, 900 insertions, 409 deletions
| diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 3d073b009c..54020a4231 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -105,6 +105,7 @@ set(llcommon_SOURCE_FILES      lluriparser.cpp      lluuid.cpp      llworkerthread.cpp +    hbxxh.cpp      u64.cpp      threadpool.cpp      workqueue.cpp @@ -241,6 +242,7 @@ set(llcommon_HEADER_FILES      llwin32headers.h      llwin32headerslean.h      llworkerthread.h +    hbxxh.h      lockstatic.h      stdtypes.h      stringize.h diff --git a/indra/llcommon/hbxxh.cpp b/indra/llcommon/hbxxh.cpp new file mode 100644 index 0000000000..388269d6c8 --- /dev/null +++ b/indra/llcommon/hbxxh.cpp @@ -0,0 +1,377 @@ +/** + * @file hbxxh.cpp + * @brief High performances vectorized hashing based on xxHash. + * + * $LicenseInfo:firstyear=2023&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (c) 2023, Henri Beauchamp. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#include "linden_common.h" + +// This define ensures that xxHash will be compiled within this module, with +// vectorized (*) and inlined functions (with no exported API symbol); our +// xxhash "pre-built library" package actually only contains the xxhash.h +// header (no library needed at link time). +// (*) SSE2 is normally used for x86(_64) builds, unless you enabled AVX2 +// in your build, in which case the latter would be used instead. For ARM64 +// builds, this would also automatically enable NEON vectorization. +#define XXH_INLINE_ALL +#include "xxhash/xxhash.h" + +#include "hbxxh.h" + +// How many bytes to grab at a time when hashing files or streams +constexpr size_t BLOCK_LEN = 4096; + +/////////////////////////////////////////////////////////////////////////////// +// HBXXH64 class +/////////////////////////////////////////////////////////////////////////////// + +//static +U64 HBXXH64::digest(const void* buffer, size_t len) +{ +    return XXH3_64bits(buffer, len); +} + +//static +U64 HBXXH64::digest(const char* str) +{ +    return XXH3_64bits((const void*)str, strlen(str)); +} + +//static +U64 HBXXH64::digest(const std::string& str) +{ +    return XXH3_64bits((const void*)str.c_str(), str.size()); +} + +// Must be called by all constructors. +void HBXXH64::init() +{ +    mDigest = 0; +    mState = (void*)XXH3_createState(); +    if (!mState || XXH3_64bits_reset((XXH3_state_t*)mState) != XXH_OK) +    { +        LL_WARNS() << "Failed to initialize state !" << LL_ENDL; +    } +} + +HBXXH64::~HBXXH64() +{ +    if (mState) +    { +        XXH3_freeState((XXH3_state_t*)mState); +    } +} + +void HBXXH64::update(const void* buffer, size_t len) +{ +    if (mState) +    { +        XXH3_64bits_update((XXH3_state_t*)mState, buffer, len); +    } +    else +    { +        LL_WARNS() << "Cannot update a finalized digest !" << LL_ENDL; +    } +} + +void HBXXH64::update(const std::string& str) +{ +    if (mState) +    { +        XXH3_64bits_update((XXH3_state_t*)mState, (const void*)str.c_str(), +                           str.length()); +    } +    else +    { +        LL_WARNS() << "Cannot update a finalized digest !" << LL_ENDL; +    } +} + +void HBXXH64::update(std::istream& stream) +{ +    if (!mState) +    { +        LL_WARNS() << "Cannot update a finalized digest !" << LL_ENDL; +        return; +    } + +    char buffer[BLOCK_LEN]; +    size_t len; +    while (stream.good()) +    { +        stream.read(buffer, BLOCK_LEN); +        len = stream.gcount(); +        XXH3_64bits_update((XXH3_state_t*)mState, (const void*)buffer, len); +    } +} + +void HBXXH64::update(FILE* file) +{ +    if (!mState) +    { +        LL_WARNS() << "Cannot update a finalized digest !" << LL_ENDL; +        return; +    } + +    char buffer[BLOCK_LEN]; +    size_t len; +    while ((len = fread((void*)buffer, 1, BLOCK_LEN, file))) +    { +        XXH3_64bits_update((XXH3_state_t*)mState, (const void*)buffer, len); +    } +    fclose(file); +} + +void HBXXH64::finalize() +{ +    if (!mState) +    { +        LL_WARNS() << "Already finalized !" << LL_ENDL; +        return; +    } +    mDigest = XXH3_64bits_digest((XXH3_state_t*)mState); +    XXH3_freeState((XXH3_state_t*)mState); +    mState = NULL; +} + +U64 HBXXH64::digest() const +{ +    return mState ? XXH3_64bits_digest((XXH3_state_t*)mState) : mDigest; +} + +std::ostream& operator<<(std::ostream& stream, HBXXH64 context) +{ +    stream << context.digest(); +    return stream; +} + +/////////////////////////////////////////////////////////////////////////////// +// HBXXH128 class +/////////////////////////////////////////////////////////////////////////////// + +//static +LLUUID HBXXH128::digest(const void* buffer, size_t len) +{ +    XXH128_hash_t hash = XXH3_128bits(buffer, len); +    LLUUID id; +    U64* data = (U64*)id.mData; +    // Note: we do not check endianness here and we just store in the same +    // order as XXH128_hash_t, that is low word "first". +    data[0] = hash.low64; +    data[1] = hash.high64; +    return id; +} + +//static +LLUUID HBXXH128::digest(const char* str) +{ +    XXH128_hash_t hash = XXH3_128bits((const void*)str, strlen(str)); +    LLUUID id; +    U64* data = (U64*)id.mData; +    // Note: we do not check endianness here and we just store in the same +    // order as XXH128_hash_t, that is low word "first". +    data[0] = hash.low64; +    data[1] = hash.high64; +    return id; +} + +//static +LLUUID HBXXH128::digest(const std::string& str) +{ +    XXH128_hash_t hash = XXH3_128bits((const void*)str.c_str(), str.size()); +    LLUUID id; +    U64* data = (U64*)id.mData; +    // Note: we do not check endianness here and we just store in the same +    // order as XXH128_hash_t, that is low word "first". +    data[0] = hash.low64; +    data[1] = hash.high64; +    return id; +} + +//static +void HBXXH128::digest(LLUUID& result, const void* buffer, size_t len) +{ +    XXH128_hash_t hash = XXH3_128bits(buffer, len); +    U64* data = (U64*)result.mData; +    // Note: we do not check endianness here and we just store in the same +    // order as XXH128_hash_t, that is low word "first". +    data[0] = hash.low64; +    data[1] = hash.high64; +} + +//static +void HBXXH128::digest(LLUUID& result, const char* str) +{ +    XXH128_hash_t hash = XXH3_128bits((const void*)str, strlen(str)); +    U64* data = (U64*)result.mData; +    // Note: we do not check endianness here and we just store in the same +    // order as XXH128_hash_t, that is low word "first". +    data[0] = hash.low64; +    data[1] = hash.high64; +} + +//static +void HBXXH128::digest(LLUUID& result, const std::string& str) +{ +    XXH128_hash_t hash = XXH3_128bits((const void*)str.c_str(), str.size()); +    U64* data = (U64*)result.mData; +    // Note: we do not check endianness here and we just store in the same +    // order as XXH128_hash_t, that is low word "first". +    data[0] = hash.low64; +    data[1] = hash.high64; +} + +// Must be called by all constructors. +void HBXXH128::init() +{ +    mState = (void*)XXH3_createState(); +    if (!mState || XXH3_128bits_reset((XXH3_state_t*)mState) != XXH_OK) +    { +        LL_WARNS() << "Failed to initialize state !" << LL_ENDL; +    } +} + +HBXXH128::~HBXXH128() +{ +    if (mState) +    { +        XXH3_freeState((XXH3_state_t*)mState); +    } +} + +void HBXXH128::update(const void* buffer, size_t len) +{ +    if (mState) +    { +        XXH3_128bits_update((XXH3_state_t*)mState, buffer, len); +    } +    else +    { +        LL_WARNS() << "Cannot update a finalized digest !" << LL_ENDL; +    } +} + +void HBXXH128::update(const std::string& str) +{ +    if (mState) +    { +        XXH3_128bits_update((XXH3_state_t*)mState, (const void*)str.c_str(), +                           str.length()); +    } +    else +    { +        LL_WARNS() << "Cannot update a finalized digest !" << LL_ENDL; +    } +} + +void HBXXH128::update(std::istream& stream) +{ +    if (!mState) +    { +        LL_WARNS() << "Cannot update a finalized digest !" << LL_ENDL; +        return; +    } + +    char buffer[BLOCK_LEN]; +    size_t len; +    while (stream.good()) +    { +        stream.read(buffer, BLOCK_LEN); +        len = stream.gcount(); +        XXH3_128bits_update((XXH3_state_t*)mState, (const void*)buffer, len); +    } +} + +void HBXXH128::update(FILE* file) +{ +    if (!mState) +    { +        LL_WARNS() << "Cannot update a finalized digest !" << LL_ENDL; +        return; +    } + +    char buffer[BLOCK_LEN]; +    size_t len; +    while ((len = fread((void*)buffer, 1, BLOCK_LEN, file))) +    { +        XXH3_128bits_update((XXH3_state_t*)mState, (const void*)buffer, len); +    } +    fclose(file); +} + +void HBXXH128::finalize() +{ +    if (!mState) +    { +        LL_WARNS() << "Already finalized !" << LL_ENDL; +        return; +    } +    XXH128_hash_t hash = XXH3_128bits_digest((XXH3_state_t*)mState); +    U64* data = (U64*)mDigest.mData; +    // Note: we do not check endianness here and we just store in the same +    // order as XXH128_hash_t, that is low word "first". +    data[0] = hash.low64; +    data[1] = hash.high64; +    XXH3_freeState((XXH3_state_t*)mState); +    mState = NULL; +} + +const LLUUID& HBXXH128::digest() const +{ +    if (mState) +    { +        XXH128_hash_t hash = XXH3_128bits_digest((XXH3_state_t*)mState); +        // We cheat the const-ness of the method here, but this is OK, since +        // mDigest is private and cannot be accessed indirectly by other +        // methods than digest() ones, that do check for mState to decide +        // wether mDigest's current value may be provided as is or not. This +        // cheat saves us a temporary LLLUID copy. +        U64* data = (U64*)mDigest.mData; +        // Note: we do not check endianness here and we just store in the same +        // order as XXH128_hash_t, that is low word "first". +        data[0] = hash.low64; +        data[1] = hash.high64; +    } +    return mDigest; +} + +void HBXXH128::digest(LLUUID& result) const +{ +    if (!mState) +    { +        result = mDigest; +        return; +    } +    XXH128_hash_t hash = XXH3_128bits_digest((XXH3_state_t*)mState); +    U64* data = (U64*)result.mData; +    // Note: we do not check endianness here and we just store in the same +    // order as XXH128_hash_t, that is low word "first". +    data[0] = hash.low64; +    data[1] = hash.high64; +} + +std::ostream& operator<<(std::ostream& stream, HBXXH128 context) +{ +    stream << context.digest(); +    return stream; +} diff --git a/indra/llcommon/hbxxh.h b/indra/llcommon/hbxxh.h new file mode 100644 index 0000000000..236716722a --- /dev/null +++ b/indra/llcommon/hbxxh.h @@ -0,0 +1,259 @@ +/** + * @file hbxxh.h + * @brief High performances vectorized hashing based on xxHash. + * + * $LicenseInfo:firstyear=2023&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (c) 2023, Henri Beauchamp. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +#ifndef LL_HBXXH_H +#define LL_HBXXH_H + +#include "lluuid.h" + +// HBXXH* classes are to be used where speed matters and cryptographic quality +// is not required (no "one-way" guarantee, though they are likely not worst in +// this respect than MD5 which got busted and is now considered too weak). The +// xxHash code they are built upon is vectorized and about 50 times faster than +// MD5. A 64 bits hash class is also provided for when 128 bits of entropy are +// not needed. The hashes collision rate is similar to MD5's. +// See https://github.com/Cyan4973/xxHash#readme for details. + +// 64 bits hashing class + +class HBXXH64 +{ +    friend std::ostream& operator<<(std::ostream&, HBXXH64); + +protected: +    LOG_CLASS(HBXXH64); + +public: +    inline HBXXH64()                            { init(); } + +    // Constructors for special circumstances; they all digest the first passed +    // parameter. Set 'do_finalize' to false if you do not want to finalize the +    // context, which is useful/needed when you want to update() it afterwards. +    // Ideally, the compiler should be smart enough to get our clue and +    // optimize out the const bool test during inlining... + +    inline HBXXH64(const void* buffer, size_t len, +                   const bool do_finalize = true) +    { +        init(); +        update(buffer, len); +        if (do_finalize) +        { +            finalize(); +        } +    } + +    inline HBXXH64(const std::string& str, const bool do_finalize = true) +    { +        init(); +        update(str); +        if (do_finalize) +        { +            finalize(); +        } +    } + +    inline HBXXH64(std::istream& s, const bool do_finalize = true) +    { +        init(); +        update(s); +        if (do_finalize) +        { +            finalize(); +        } +    } + +    inline HBXXH64(FILE* file, const bool do_finalize = true) +    { +        init(); +        update(file); +        if (do_finalize) +        { +            finalize(); +        } +    } + +    ~HBXXH64(); + +    void update(const void* buffer, size_t len); +    void update(const std::string& str); +    void update(std::istream& s); +    void update(FILE* file); + +    // Note that unlike what happens with LLMD5, you do not need to finalize() +    // HBXXH64 before using digest(), and you may keep updating() it even after +    // you got a first digest() (the next digest would of course change after +    // any update). It is still useful to use finalize() when you do not want +    // to store a final digest() result in a separate U64; after this method +    // has been called, digest() simply returns mDigest value. +    void finalize(); + +    U64 digest() const; + +    // Fast static methods. Use them when hashing just one contiguous block of +    // data. +    static U64 digest(const void* buffer, size_t len); +    static U64 digest(const char* str);    // str must be NUL-terminated +    static U64 digest(const std::string& str); + +private: +    void init(); + +private: +    // We use a void pointer to avoid including xxhash.h here for XXH3_state_t +    // (which cannot either be trivially forward-declared, due to complex API +    // related pre-processor macros in xxhash.h). +    void*   mState; +    U64     mDigest; +}; + +inline bool operator==(const HBXXH64& a, const HBXXH64& b) +{ +    return a.digest() == b.digest(); +} + +inline bool operator!=(const HBXXH64& a, const HBXXH64& b) +{ +    return a.digest() != b.digest(); +} + +// 128 bits hashing class + +class HBXXH128 +{ +    friend std::ostream& operator<<(std::ostream&, HBXXH128); + +protected: +    LOG_CLASS(HBXXH128); + +public: +    inline HBXXH128()                           { init(); } + +    // Constructors for special circumstances; they all digest the first passed +    // parameter. Set 'do_finalize' to false if you do not want to finalize the +    // context, which is useful/needed when you want to update() it afterwards. +    // Ideally, the compiler should be smart enough to get our clue and +    // optimize out the const bool test during inlining... + +    inline HBXXH128(const void* buffer, size_t len, +                    const bool do_finalize = true) +    { +        init(); +        update(buffer, len); +        if (do_finalize) +        { +            finalize(); +        } +    } + +    inline HBXXH128(const std::string& str, const bool do_finalize = true) +    { +        init(); +        update(str); +        if (do_finalize) +        { +            finalize(); +        } +    } + +    inline HBXXH128(std::istream& s, const bool do_finalize = true) +    { +        init(); +        update(s); +        if (do_finalize) +        { +            finalize(); +        } +    } + +    inline HBXXH128(FILE* file, const bool do_finalize = true) +    { +        init(); +        update(file); +        if (do_finalize) +        { +            finalize(); +        } +    } + +    ~HBXXH128(); + +    void update(const void* buffer, size_t len); +    void update(const std::string& str); +    void update(std::istream& s); +    void update(FILE* file); + +    // Note that unlike what happens with LLMD5, you do not need to finalize() +    // HBXXH128 before using digest(), and you may keep updating() it even +    // after you got a first digest() (the next digest would of course change +    // after any update). It is still useful to use finalize() when you do not +    // want to store a final digest() result in a separate LLUUID; after this +    // method has been called, digest() simply returns a reference on mDigest. +    void finalize(); + +    // We use an LLUUID for the digest, since this is a 128 bits wide native +    // type available in the viewer code, making it easy to manipulate. It also +    // allows to use HBXXH128 efficiently in LLUUID generate() and combine() +    // methods. +    const LLUUID& digest() const; + +    // Here, we avoid an LLUUID copy whenever we already got one to store the +    // result *and* we did not yet call finalize(). +    void digest(LLUUID& result) const; + +    // Fast static methods. Use them when hashing just one contiguous block of +    // data. +    static LLUUID digest(const void* buffer, size_t len); +    static LLUUID digest(const char* str);    // str must be NUL-terminated +    static LLUUID digest(const std::string& str); +    // Same as above, but saves you from an LLUUID copy when you already got +    // one for storage use. +    static void digest(LLUUID& result, const void* buffer, size_t len); +    static void digest(LLUUID& result, const char* str); // str NUL-terminated +    static void digest(LLUUID& result, const std::string& str); + +private: +    void init(); + +private: +    // We use a void pointer to avoid including xxhash.h here for XXH3_state_t +    // (which cannot either be trivially forward-declared, due to complex API +    // related pre-processor macros in xxhash.h). +    void*   mState; +    LLUUID  mDigest; +}; + +inline bool operator==(const HBXXH128& a, const HBXXH128& b) +{ +    return a.digest() == b.digest(); +} + +inline bool operator!=(const HBXXH128& a, const HBXXH128& b) +{ +    return a.digest() != b.digest(); +} + +#endif // LL_HBXXH_H diff --git a/indra/llcommon/llallocator_heap_profile.cpp b/indra/llcommon/llallocator_heap_profile.cpp index b2eafde1aa..c6d9542b42 100644 --- a/indra/llcommon/llallocator_heap_profile.cpp +++ b/indra/llcommon/llallocator_heap_profile.cpp @@ -130,15 +130,13 @@ void LLAllocatorHeapProfile::parse(std::string const & prof_text)  void LLAllocatorHeapProfile::dump(std::ostream & out) const  { -    lines_t::const_iterator i; -    for(i = mLines.begin(); i != mLines.end(); ++i) +	for (const LLAllocatorHeapProfile::line& line : mLines)      { -        out << i->mLiveCount << ": " << i->mLiveSize << '[' << i->mTotalCount << ": " << i->mTotalSize << "] @"; +        out << line.mLiveCount << ": " << line.mLiveSize << '[' << line.mTotalCount << ": " << line.mTotalSize << "] @"; -        stack_trace::const_iterator j; -        for(j = i->mTrace.begin(); j != i->mTrace.end(); ++j) +		for (const stack_marker marker : line.mTrace)          { -            out << ' ' << *j; +            out << ' ' << marker;          }          out << '\n';      } diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp index e6cc06e8d0..4c84223dad 100644 --- a/indra/llcommon/llassettype.cpp +++ b/indra/llcommon/llassettype.cpp @@ -150,14 +150,12 @@ LLAssetType::EType LLAssetType::lookup(const char* name)  LLAssetType::EType LLAssetType::lookup(const std::string& type_name)  {  	const LLAssetDictionary *dict = LLAssetDictionary::getInstance(); -	for (LLAssetDictionary::const_iterator iter = dict->begin(); -		 iter != dict->end(); -		 iter++) +	for (const LLAssetDictionary::value_type& pair : *dict)  	{ -		const AssetEntry *entry = iter->second; +		const AssetEntry *entry = pair.second;  		if (type_name == entry->mTypeName)  		{ -			return iter->first; +			return pair.first;  		}  	}  	return AT_UNKNOWN; @@ -188,14 +186,12 @@ LLAssetType::EType LLAssetType::lookupHumanReadable(const char* name)  LLAssetType::EType LLAssetType::lookupHumanReadable(const std::string& readable_name)  {  	const LLAssetDictionary *dict = LLAssetDictionary::getInstance(); -	for (LLAssetDictionary::const_iterator iter = dict->begin(); -		 iter != dict->end(); -		 iter++) +	for (const LLAssetDictionary::value_type& pair : *dict)  	{ -		const AssetEntry *entry = iter->second; +		const AssetEntry *entry = pair.second;  		if (entry->mHumanName && (readable_name == entry->mHumanName))  		{ -			return iter->first; +			return pair.first;  		}  	}  	return AT_NONE; diff --git a/indra/llcommon/llcallbacklist.cpp b/indra/llcommon/llcallbacklist.cpp index 541ff75ee4..93d0a035da 100644 --- a/indra/llcommon/llcallbacklist.cpp +++ b/indra/llcommon/llcallbacklist.cpp @@ -109,7 +109,7 @@ void LLCallbackList::deleteAllFunctions()  void LLCallbackList::callFunctions()  { -	for (callback_list_t::iterator iter = mCallbackList.begin(); iter != mCallbackList.end();  ) +	for (callback_list_t::iterator iter = mCallbackList.begin(); iter != mCallbackList.end(); )  	{  		callback_list_t::iterator curiter = iter++;  		curiter->first(curiter->second); diff --git a/indra/llcommon/llcallstack.cpp b/indra/llcommon/llcallstack.cpp index 8db291eed1..83d5ae2a63 100644 --- a/indra/llcommon/llcallstack.cpp +++ b/indra/llcommon/llcallstack.cpp @@ -91,10 +91,9 @@ LLCallStack::LLCallStack(S32 skip_count, bool verbose):  bool LLCallStack::contains(const std::string& str)  { -    for (std::vector<std::string>::const_iterator it = m_strings.begin(); -         it != m_strings.end(); ++it) +	for (const std::string& src_str : m_strings)      { -        if (it->find(str) != std::string::npos) +        if (src_str.find(str) != std::string::npos)          {              return true;          } @@ -105,10 +104,9 @@ bool LLCallStack::contains(const std::string& str)  std::ostream& operator<<(std::ostream& s, const LLCallStack& call_stack)  {  #ifndef LL_RELEASE_FOR_DOWNLOAD -    std::vector<std::string>::const_iterator it; -    for (it=call_stack.m_strings.begin(); it!=call_stack.m_strings.end(); ++it) +	for (const std::string& str : call_stack.m_strings)      { -        s << *it; +        s << str;      }  #else      s << "UNAVAILABLE IN RELEASE"; @@ -156,9 +154,9 @@ bool LLContextStrings::contains(const std::string& str)  {      const std::map<std::string,S32>& strings =          LLThreadLocalSingletonPointer<LLContextStrings>::getInstance()->m_contextStrings; -    for (std::map<std::string,S32>::const_iterator it = strings.begin(); it!=strings.end(); ++it) +    for (const std::map<std::string,S32>::value_type& str_pair : strings)      { -        if (it->first.find(str) != std::string::npos) +        if (str_pair.first.find(str) != std::string::npos)          {              return true;          } @@ -171,9 +169,9 @@ void LLContextStrings::output(std::ostream& os)  {      const std::map<std::string,S32>& strings =          LLThreadLocalSingletonPointer<LLContextStrings>::getInstance()->m_contextStrings; -    for (std::map<std::string,S32>::const_iterator it = strings.begin(); it!=strings.end(); ++it) +    for (const std::map<std::string,S32>::value_type& str_pair : strings)      { -        os << it->first << "[" << it->second << "]" << "\n"; +        os << str_pair.first << "[" << str_pair.second << "]" << "\n";      }  } diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp index f9eda3cd4e..02cb186275 100644 --- a/indra/llcommon/llerror.cpp +++ b/indra/llcommon/llerror.cpp @@ -586,11 +586,9 @@ namespace  	void Globals::invalidateCallSites()  	{ -		for (CallSiteVector::const_iterator i = callSites.begin(); -			 i != callSites.end(); -			 ++i) +		for (LLError::CallSite* site : callSites)  		{ -            (*i)->invalidate(); +            site->invalidate();  		}  		callSites.clear(); @@ -1224,12 +1222,8 @@ namespace          std::string escaped_message;          LLMutexLock lock(&s->mRecorderMutex); -		for (Recorders::const_iterator i = s->mRecorders.begin(); -			i != s->mRecorders.end(); -			++i) +		for (LLError::RecorderPtr& r : s->mRecorders)  		{ -			LLError::RecorderPtr r = *i; -              if (!r->enabled())              {                  continue; diff --git a/indra/llcommon/llevent.cpp b/indra/llcommon/llevent.cpp index 633df01588..501d06e3cd 100644 --- a/indra/llcommon/llevent.cpp +++ b/indra/llcommon/llevent.cpp @@ -203,10 +203,9 @@ void LLSimpleDispatcher::removeListener(LLEventListener* listener)  std::vector<LLListenerEntry> LLSimpleDispatcher::getListeners() const  {  	std::vector<LLListenerEntry> ret; -	std::vector<LLListenerEntry>::const_iterator itor; -	for (itor=mListeners.begin(); itor!=mListeners.end(); ++itor) +	for (const LLListenerEntry& entry : mListeners)  	{ -		ret.push_back(*itor); +		ret.push_back(entry);  	}  	return ret; @@ -215,14 +214,12 @@ std::vector<LLListenerEntry> LLSimpleDispatcher::getListeners() const  // virtual  bool LLSimpleDispatcher::fireEvent(LLPointer<LLEvent> event, LLSD filter)  { -	std::vector<LLListenerEntry>::iterator itor;  	std::string filter_string = filter.asString(); -	for (itor=mListeners.begin(); itor!=mListeners.end(); ++itor) +	for (LLListenerEntry& entry : mListeners)  	{ -		LLListenerEntry& entry = *itor;  		if (filter_string == "" || entry.filter.asString() == filter_string)  		{ -			(entry.listener)->handleEvent(event, (*itor).userdata); +			(entry.listener)->handleEvent(event, entry.userdata);  		}  	}  	return true; @@ -276,10 +273,9 @@ void LLSimpleListener::clearDispatchers()  bool LLSimpleListener::handleAttach(LLEventDispatcher *dispatcher)  {  	// Add dispatcher if it doesn't already exist -	std::vector<LLEventDispatcher *>::iterator itor; -	for (itor = mDispatchers.begin(); itor != mDispatchers.end(); ++itor) +	for (LLEventDispatcher* disp : mDispatchers)  	{ -		if ((*itor) == dispatcher) return true; +		if (disp == dispatcher) return true;  	}  	mDispatchers.push_back(dispatcher);  	return true; diff --git a/indra/llcommon/llheteromap.cpp b/indra/llcommon/llheteromap.cpp index 7c19196e0c..c84e49d085 100644 --- a/indra/llcommon/llheteromap.cpp +++ b/indra/llcommon/llheteromap.cpp @@ -22,11 +22,11 @@ LLHeteroMap::~LLHeteroMap()  {      // For each entry in our map, we must call its deleter, which is the only      // record we have of its original type. -    for (TypeMap::iterator mi(mMap.begin()), me(mMap.end()); mi != me; ++mi) +	for (TypeMap::value_type& pair : mMap)      { -        // mi->second is the std::pair; mi->second.first is the void*; -        // mi->second.second points to the deleter function -        (mi->second.second)(mi->second.first); -        mi->second.first = NULL; +        // pair.second is the std::pair; pair.second.first is the void*; +        // pair.second.second points to the deleter function +        (pair.second.second)(pair.second.first); +        pair.second.first = NULL;      }  } diff --git a/indra/llcommon/llinitdestroyclass.cpp b/indra/llcommon/llinitdestroyclass.cpp index e6382a7924..e3b9e6d099 100644 --- a/indra/llcommon/llinitdestroyclass.cpp +++ b/indra/llcommon/llinitdestroyclass.cpp @@ -21,10 +21,9 @@  void LLCallbackRegistry::fireCallbacks() const  { -	for (FuncList::const_iterator fi = mCallbacks.begin(), fe = mCallbacks.end(); -		 fi != fe; ++fi) +	for (FuncList::value_type pair : mCallbacks)  	{ -		LL_INFOS("LLInitDestroyClass") << "calling " << fi->first << "()" << LL_ENDL; -		fi->second(); +		LL_INFOS("LLInitDestroyClass") << "calling " << pair.first << "()" << LL_ENDL; +		pair.second();  	}  } diff --git a/indra/llcommon/llinitparam.cpp b/indra/llcommon/llinitparam.cpp index aa2f4eb289..d15bd2f619 100644 --- a/indra/llcommon/llinitparam.cpp +++ b/indra/llcommon/llinitparam.cpp @@ -207,10 +207,10 @@ namespace LLInitParam  		if (!mValidated)  		{  		const BlockDescriptor& block_data = mostDerivedBlockDescriptor(); -		for (BlockDescriptor::param_validation_list_t::const_iterator it = block_data.mValidationList.begin(); it != block_data.mValidationList.end(); ++it) +		for (const BlockDescriptor::param_validation_list_t::value_type& pair : block_data.mValidationList)  		{ -			const Param* param = getParamFromHandle(it->first); -			if (!it->second(param)) +			const Param* param = getParamFromHandle(pair.first); +			if (!pair.second(param))  			{  				if (emit_errors)  				{ @@ -235,13 +235,11 @@ namespace LLInitParam  		// unnamed param is like LLView::Params::rect - implicit  		const BlockDescriptor& block_data = mostDerivedBlockDescriptor(); -		for (BlockDescriptor::param_list_t::const_iterator it = block_data.mUnnamedParams.begin();  -			it != block_data.mUnnamedParams.end();  -			++it) +		for (const ParamDescriptorPtr& ptr : block_data.mUnnamedParams)  		{ -			param_handle_t param_handle = (*it)->mParamHandle; +			param_handle_t param_handle = ptr->mParamHandle;  			const Param* param = getParamFromHandle(param_handle); -			ParamDescriptor::serialize_func_t serialize_func = (*it)->mSerializeFunc; +			ParamDescriptor::serialize_func_t serialize_func = ptr->mSerializeFunc;  			if (serialize_func && predicate_rule.check(ll_make_predicate(PROVIDED, param->anyProvided())))  			{  				const Param* diff_param = diff_block ? diff_block->getParamFromHandle(param_handle) : NULL; @@ -249,23 +247,19 @@ namespace LLInitParam  			}  		} -		for(BlockDescriptor::param_map_t::const_iterator it = block_data.mNamedParams.begin(); -			it != block_data.mNamedParams.end(); -			++it) +		for (const BlockDescriptor::param_map_t::value_type& pair : block_data.mNamedParams)  		{ -			param_handle_t param_handle = it->second->mParamHandle; +			param_handle_t param_handle = pair.second->mParamHandle;  			const Param* param = getParamFromHandle(param_handle); -			ParamDescriptor::serialize_func_t serialize_func = it->second->mSerializeFunc; +			ParamDescriptor::serialize_func_t serialize_func = pair.second->mSerializeFunc;  			if (serialize_func && predicate_rule.check(ll_make_predicate(PROVIDED, param->anyProvided())))  			{  				// Ensure this param has not already been serialized  				// Prevents <rect> from being serialized as its own tag.  				bool duplicate = false; -				for (BlockDescriptor::param_list_t::const_iterator it2 = block_data.mUnnamedParams.begin();  -					it2 != block_data.mUnnamedParams.end();  -					++it2) +				for (const ParamDescriptorPtr& ptr : block_data.mUnnamedParams)  				{ -					if (param_handle == (*it2)->mParamHandle) +					if (param_handle == ptr->mParamHandle)  					{  						duplicate = true;  						break; @@ -279,7 +273,7 @@ namespace LLInitParam  					continue;  				} -				name_stack.push_back(std::make_pair(it->first, !duplicate)); +				name_stack.push_back(std::make_pair(pair.first, !duplicate));  				const Param* diff_param = diff_block ? diff_block->getParamFromHandle(param_handle) : NULL;  				serialized |= serialize_func(*param, parser, name_stack, predicate_rule, diff_param);  				name_stack.pop_back(); @@ -300,45 +294,39 @@ namespace LLInitParam  		// unnamed param is like LLView::Params::rect - implicit  		const BlockDescriptor& block_data = mostDerivedBlockDescriptor(); -		for (BlockDescriptor::param_list_t::const_iterator it = block_data.mUnnamedParams.begin();  -			it != block_data.mUnnamedParams.end();  -			++it) +		for (const ParamDescriptorPtr& ptr : block_data.mUnnamedParams)  		{ -			param_handle_t param_handle = (*it)->mParamHandle; +			param_handle_t param_handle = ptr->mParamHandle;  			const Param* param = getParamFromHandle(param_handle); -			ParamDescriptor::inspect_func_t inspect_func = (*it)->mInspectFunc; +			ParamDescriptor::inspect_func_t inspect_func = ptr->mInspectFunc;  			if (inspect_func)  			{  				name_stack.push_back(std::make_pair("", true)); -				inspect_func(*param, parser, name_stack, (*it)->mMinCount, (*it)->mMaxCount); +				inspect_func(*param, parser, name_stack, ptr->mMinCount, ptr->mMaxCount);  				name_stack.pop_back();  			}  		} -		for(BlockDescriptor::param_map_t::const_iterator it = block_data.mNamedParams.begin(); -			it != block_data.mNamedParams.end(); -			++it) +		for(const BlockDescriptor::param_map_t::value_type& pair : block_data.mNamedParams)  		{ -			param_handle_t param_handle = it->second->mParamHandle; +			param_handle_t param_handle = pair.second->mParamHandle;  			const Param* param = getParamFromHandle(param_handle); -			ParamDescriptor::inspect_func_t inspect_func = it->second->mInspectFunc; +			ParamDescriptor::inspect_func_t inspect_func = pair.second->mInspectFunc;  			if (inspect_func)  			{  				// Ensure this param has not already been inspected  				bool duplicate = false; -				for (BlockDescriptor::param_list_t::const_iterator it2 = block_data.mUnnamedParams.begin();  -					it2 != block_data.mUnnamedParams.end();  -					++it2) +                for (const ParamDescriptorPtr &ptr : block_data.mUnnamedParams)  				{ -					if (param_handle == (*it2)->mParamHandle) +					if (param_handle == ptr->mParamHandle)  					{  						duplicate = true;  						break;  					}  				} -				name_stack.push_back(std::make_pair(it->first, !duplicate)); -				inspect_func(*param, parser, name_stack, it->second->mMinCount, it->second->mMaxCount); +				name_stack.push_back(std::make_pair(pair.first, !duplicate)); +				inspect_func(*param, parser, name_stack, pair.second->mMinCount, pair.second->mMaxCount);  				name_stack.pop_back();  			}  		} @@ -382,12 +370,10 @@ namespace LLInitParam  		}  		// try to parse unnamed parameters, in declaration order -		for ( BlockDescriptor::param_list_t::iterator it = block_data.mUnnamedParams.begin();  -			it != block_data.mUnnamedParams.end();  -			++it) +		for (ParamDescriptorPtr& ptr : block_data.mUnnamedParams)  		{ -			Param* paramp = getParamFromHandle((*it)->mParamHandle); -			ParamDescriptor::deserialize_func_t deserialize_func = (*it)->mDeserializeFunc; +			Param* paramp = getParamFromHandle(ptr->mParamHandle); +			ParamDescriptor::deserialize_func_t deserialize_func = ptr->mDeserializeFunc;  			if (deserialize_func && deserialize_func(*paramp, p, name_stack_range, new_name))  			{ @@ -453,12 +439,9 @@ namespace LLInitParam  	{  		param_handle_t handle = getHandleFromParam(¶m);  		BlockDescriptor& descriptor = mostDerivedBlockDescriptor(); -		BlockDescriptor::all_params_list_t::iterator end_it = descriptor.mAllParams.end(); -		for (BlockDescriptor::all_params_list_t::iterator it = descriptor.mAllParams.begin(); -			it != end_it; -			++it) +		for (ParamDescriptorPtr& ptr : descriptor.mAllParams)  		{ -			if ((*it)->mParamHandle == handle) return *it; +			if (ptr->mParamHandle == handle) return ptr;  		}  		return ParamDescriptorPtr();  	} @@ -468,17 +451,14 @@ namespace LLInitParam  	bool BaseBlock::mergeBlock(BlockDescriptor& block_data, const BaseBlock& other, bool overwrite)  	{  		bool some_param_changed = false; -		BlockDescriptor::all_params_list_t::const_iterator end_it = block_data.mAllParams.end(); -		for (BlockDescriptor::all_params_list_t::const_iterator it = block_data.mAllParams.begin(); -			it != end_it; -			++it) +		for (const ParamDescriptorPtr& ptr : block_data.mAllParams)  		{ -			const Param* other_paramp = other.getParamFromHandle((*it)->mParamHandle); -			ParamDescriptor::merge_func_t merge_func = (*it)->mMergeFunc; +			const Param* other_paramp = other.getParamFromHandle(ptr->mParamHandle); +			ParamDescriptor::merge_func_t merge_func = ptr->mMergeFunc;  			if (merge_func)  			{ -				Param* paramp = getParamFromHandle((*it)->mParamHandle); -				llassert(paramp->getEnclosingBlockOffset() == (*it)->mParamHandle); +				Param* paramp = getParamFromHandle(ptr->mParamHandle); +				llassert(paramp->getEnclosingBlockOffset() == ptr->mParamHandle);  				some_param_changed |= merge_func(*paramp, *other_paramp, overwrite);  			}  		} diff --git a/indra/llcommon/llinitparam.h b/indra/llcommon/llinitparam.h index 7f5b9b4ac2..9edc7e40f3 100644 --- a/indra/llcommon/llinitparam.h +++ b/indra/llcommon/llinitparam.h @@ -325,13 +325,11 @@ namespace LLInitParam  		std::string calcValueName(const value_t& value) const  		{  			value_name_map_t* map = getValueNames(); -			for (typename value_name_map_t::iterator it = map->begin(), end_it = map->end(); -				it != end_it; -				++it) +			for (typename value_name_map_t::value_type& map_pair : *map)  			{ -				if (ParamCompare<T>::equals(it->second, value)) +				if (ParamCompare<T>::equals(map_pair.second, value))  				{ -					return it->first; +					return map_pair.first;  				}  			} @@ -376,11 +374,9 @@ namespace LLInitParam  			static std::vector<std::string> sValues;  			value_name_map_t* map = getValueNames(); -			for (typename value_name_map_t::iterator it = map->begin(), end_it = map->end(); -				 it != end_it; -				 ++it) +			for (typename value_name_map_t::value_type& map_pair : *map)  			{ -				sValues.push_back(it->first); +				sValues.push_back(map_pair.first);  			}  			return &sValues;  		} diff --git a/indra/llcommon/llkeybind.cpp b/indra/llcommon/llkeybind.cpp index 12e57ae94b..b89160cc55 100644 --- a/indra/llcommon/llkeybind.cpp +++ b/indra/llcommon/llkeybind.cpp @@ -207,9 +207,9 @@ bool LLKeyBind::operator!=(const LLKeyBind& rhs)  bool LLKeyBind::isEmpty() const  { -    for (data_vector_t::const_iterator iter = mData.begin(); iter != mData.end(); iter++) +	for (const LLKeyData& key_data : mData)      { -        if (!iter->isEmpty()) return false; +        if (!key_data.isEmpty()) return false;      }      return true;  } @@ -225,12 +225,11 @@ LLKeyBind::data_vector_t::const_iterator LLKeyBind::endNonEmpty() const  LLSD LLKeyBind::asLLSD() const  {      LLSD data; -    auto end{ endNonEmpty() }; -    for (auto it = mData.begin(); it < end; ++it) +	for (const LLKeyData& key_data : mData)      {          // append intermediate entries even if empty to not affect visual          // representation -        data.append(it->asLLSD()); +        data.append(key_data.asLLSD());      }      return data;  } @@ -243,9 +242,9 @@ bool LLKeyBind::canHandle(EMouseClickType mouse, KEY key, MASK mask) const          return false;      } -    for (data_vector_t::const_iterator iter = mData.begin(); iter != mData.end(); iter++) +	for (const LLKeyData& key_data : mData)      { -        if (iter->canHandle(mouse, key, mask)) +        if (key_data.canHandle(mouse, key, mask))          {              return true;          } @@ -267,12 +266,12 @@ bool LLKeyBind::hasKeyData(EMouseClickType mouse, KEY key, MASK mask, bool ignor  {      if (mouse != CLICK_NONE || key != KEY_NONE)      { -        for (data_vector_t::const_iterator iter = mData.begin(); iter != mData.end(); iter++) +		for (const LLKeyData& key_data : mData)          { -            if (iter->mKey == key -                && iter->mMask == mask -                && iter->mMouse == mouse -                && iter->mIgnoreMasks == ignore) +            if (key_data.mKey == key +                && key_data.mMask == mask +                && key_data.mMouse == mouse +                && key_data.mIgnoreMasks == ignore)              {                  return true;              } @@ -354,16 +353,16 @@ void LLKeyBind::replaceKeyData(const LLKeyData& data, U32 index)      {          // if both click and key are none (isEmpty()), we are inserting a placeholder, we don't want to reset anything          // otherwise reset identical key -        for (data_vector_t::iterator iter = mData.begin(); iter != mData.end(); iter++) +		for (LLKeyData& key_data : mData)          { -            if (iter->mKey == data.mKey -                && iter->mMouse == data.mMouse -                && iter->mIgnoreMasks == data.mIgnoreMasks -                && iter->mMask == data.mMask) +            if (key_data.mKey == data.mKey +                && key_data.mMouse == data.mMouse +                && key_data.mIgnoreMasks == data.mIgnoreMasks +                && key_data.mMask == data.mMask)              {                  // Replacing only fully equal combinations even in case 'ignore' is set                  // Reason: Simplicity and user might decide to do a 'move' command as W and Shift+Ctrl+W, and 'run' as Shift+W -                iter->reset(); +                key_data.reset();                  break;              }          } diff --git a/indra/llcommon/llmetricperformancetester.cpp b/indra/llcommon/llmetricperformancetester.cpp index 864ecf650b..ab509b46eb 100644 --- a/indra/llcommon/llmetricperformancetester.cpp +++ b/indra/llcommon/llmetricperformancetester.cpp @@ -42,9 +42,9 @@ LLMetricPerformanceTesterBasic::name_tester_map_t LLMetricPerformanceTesterBasic  /*static*/   void LLMetricPerformanceTesterBasic::cleanupClass()   { -	for (name_tester_map_t::iterator iter = sTesterMap.begin() ; iter != sTesterMap.end() ; ++iter) +	for (name_tester_map_t::value_type& pair : sTesterMap)  	{ -		delete iter->second ; +		delete pair.second;  	}  	sTesterMap.clear() ;  } @@ -154,10 +154,9 @@ void LLMetricPerformanceTesterBasic::doAnalysisMetrics(std::string baseline, std  	llofstream os(output.c_str());  	os << "Label, Metric, Base(B), Target(T), Diff(T-B), Percentage(100*T/B)\n";  -	for(LLMetricPerformanceTesterBasic::name_tester_map_t::iterator iter = LLMetricPerformanceTesterBasic::sTesterMap.begin() ;  -		iter != LLMetricPerformanceTesterBasic::sTesterMap.end() ; ++iter) +	for (LLMetricPerformanceTesterBasic::name_tester_map_t::value_type& pair : LLMetricPerformanceTesterBasic::sTesterMap)  	{ -		LLMetricPerformanceTesterBasic* tester = ((LLMetricPerformanceTesterBasic*)iter->second) ;	 +		LLMetricPerformanceTesterBasic* tester = ((LLMetricPerformanceTesterBasic*)pair.second);  		tester->analyzePerformance(&os, &base, ¤t) ;  	} diff --git a/indra/llcommon/llnametable.h b/indra/llcommon/llnametable.h index d3283543f3..2c8e71263e 100644 --- a/indra/llcommon/llnametable.h +++ b/indra/llcommon/llnametable.h @@ -86,12 +86,10 @@ public:  	// O(N)! (currently only used in one place... (newsim/llstate.cpp))  	const char *resolveData(const DATA &data) const  	{ -		const_iter_t iter = mNameMap.begin(); -		const_iter_t end = mNameMap.end(); -		for (; iter != end; ++iter) +		for (const name_map_t::value_type& pair : mNameMap)  		{ -			if (iter->second == data) -				return iter->first; +			if (pair.second == data) +				return pair.first;  		}     		return NULL;  	}		 diff --git a/indra/llcommon/llpriqueuemap.h b/indra/llcommon/llpriqueuemap.h index d8d3edd48a..030e2e0f21 100644 --- a/indra/llcommon/llpriqueuemap.h +++ b/indra/llcommon/llpriqueuemap.h @@ -115,9 +115,9 @@ public:  			LL_WARNS() << "Data not on priority queue!" << LL_ENDL;  			// OK, try iterating through all of the data and seeing if we just screwed up the priority  			// somehow. -			for (iter = mMap.begin(); iter != mMap.end(); iter++) +			for (pqm_pair pair : mMap)  			{ -				if ((*(iter)).second == data) +				if (pair.second == data)  				{  					LL_ERRS() << "Data on priority queue but priority not matched!" << LL_ENDL;  				} diff --git a/indra/llcommon/llregistry.h b/indra/llcommon/llregistry.h index 750fe9fdc8..e272d7a9b8 100644 --- a/indra/llcommon/llregistry.h +++ b/indra/llcommon/llregistry.h @@ -141,11 +141,9 @@ public:  	ptr_value_t getValue(ref_const_key_t key)  	{ -		for(scope_list_iterator_t it = mActiveScopes.begin(); -			it != mActiveScopes.end(); -			++it) +		for(Registrar* scope : mActiveScopes)  		{ -			ptr_value_t valuep = (*it)->getValue(key); +			ptr_value_t valuep = scope->getValue(key);  			if (valuep != NULL) return valuep;  		}  		return mDefaultRegistrar.getValue(key); @@ -153,11 +151,9 @@ public:  	ptr_const_value_t getValue(ref_const_key_t key) const  	{ -		for(scope_list_const_iterator_t it = mActiveScopes.begin(); -			it != mActiveScopes.end(); -			++it) +		for(const Registrar* scope : mActiveScopes)  		{ -			ptr_value_t valuep = (*it)->getValue(key); +			ptr_const_value_t valuep = scope->getValue(key);  			if (valuep != NULL) return valuep;  		}  		return mDefaultRegistrar.getValue(key); @@ -165,11 +161,9 @@ public:  	bool exists(ref_const_key_t key) const  	{ -		for(scope_list_const_iterator_t it = mActiveScopes.begin(); -			it != mActiveScopes.end(); -			++it) +		for(const Registrar* scope : mActiveScopes)  		{ -			if ((*it)->exists(key)) return true; +			if (scope->exists(key)) return true;  		}  		return mDefaultRegistrar.exists(key); @@ -177,11 +171,9 @@ public:  	bool empty() const  	{ -		for(scope_list_const_iterator_t it = mActiveScopes.begin(); -			it != mActiveScopes.end(); -			++it) +		for(const Registrar* scope : mActiveScopes)  		{ -			if (!(*it)->empty()) return false; +			if (!scope->empty()) return false;  		}  		return mDefaultRegistrar.empty(); diff --git a/indra/llcommon/llsdparam.cpp b/indra/llcommon/llsdparam.cpp index af4ccf25fd..30f49b27ea 100644 --- a/indra/llcommon/llsdparam.cpp +++ b/indra/llcommon/llsdparam.cpp @@ -113,11 +113,9 @@ void LLParamSDParser::writeSDImpl(LLSD& sd, const LLInitParam::BaseBlock& block,  /*virtual*/ std::string LLParamSDParser::getCurrentElementName()  {  	std::string full_name = "sd"; -	for (name_stack_t::iterator it = mNameStack.begin();	 -		it != mNameStack.end(); -		++it) +	for (name_stack_t::value_type& stack_pair : mNameStack)  	{ -		full_name += llformat("[%s]", it->first.c_str()); +		full_name += llformat("[%s]", stack_pair.first.c_str());  	}  	return full_name; diff --git a/indra/llcommon/llsdutil.cpp b/indra/llcommon/llsdutil.cpp index 8e90d1e8b8..f70bee9903 100644 --- a/indra/llcommon/llsdutil.cpp +++ b/indra/llcommon/llsdutil.cpp @@ -148,10 +148,9 @@ LLSD ll_binary_from_string(const LLSD& sd)  	std::vector<U8> binary_value;  	std::string string_value = sd.asString(); -	for (std::string::iterator iter = string_value.begin(); -		 iter != string_value.end(); ++iter) +	for (const U8 c : string_value)  	{ -		binary_value.push_back(*iter); +		binary_value.push_back(c);  	}  	binary_value.push_back('\0'); diff --git a/indra/llcommon/llsdutil.h b/indra/llcommon/llsdutil.h index 1321615805..372278c51a 100644 --- a/indra/llcommon/llsdutil.h +++ b/indra/llcommon/llsdutil.h @@ -191,75 +191,6 @@ LLSD& drill_ref(  LLSD& blob, const LLSD& path);  } -/***************************************************************************** -*   LLSDArray -*****************************************************************************/ -/** - * Construct an LLSD::Array inline, with implicit conversion to LLSD. Usage: - * - * @code - * void somefunc(const LLSD&); - * ... - * somefunc(LLSDArray("text")(17)(3.14)); - * @endcode - * - * For completeness, LLSDArray() with no args constructs an empty array, so - * <tt>LLSDArray()("text")(17)(3.14)</tt> produces an array equivalent to the - * above. But for most purposes, LLSD() is already equivalent to an empty - * array, and if you explicitly want an empty isArray(), there's - * LLSD::emptyArray(). However, supporting a no-args LLSDArray() constructor - * follows the principle of least astonishment. - */ -class LLSDArray -{ -public: -    LLSDArray(): -        _data(LLSD::emptyArray()) -    {} - -    /** -     * Need an explicit copy constructor. Consider the following: -     * -     * @code -     * LLSD array_of_arrays(LLSDArray(LLSDArray(17)(34)) -     *                               (LLSDArray("x")("y"))); -     * @endcode -     * -     * The coder intends to construct [[17, 34], ["x", "y"]]. -     * -     * With the compiler's implicit copy constructor, s/he gets instead -     * [17, 34, ["x", "y"]]. -     * -     * The expression LLSDArray(17)(34) constructs an LLSDArray with those two -     * values. The reader assumes it should be converted to LLSD, as we always -     * want with LLSDArray, before passing it to the @em outer LLSDArray -     * constructor! This copy constructor makes that happen. -     */ -    LLSDArray(const LLSDArray& inner): -        _data(LLSD::emptyArray()) -    { -        _data.append(inner); -    } - -    LLSDArray(const LLSD& value): -        _data(LLSD::emptyArray()) -    { -        _data.append(value); -    } - -    LLSDArray& operator()(const LLSD& value) -    { -        _data.append(value); -        return *this; -    } - -    operator LLSD() const { return _data; } -    LLSD get() const { return _data; } - -private: -    LLSD _data; -}; -  namespace llsd  { diff --git a/indra/llcommon/llstringtable.cpp b/indra/llcommon/llstringtable.cpp index f288999964..92a5e777a6 100644 --- a/indra/llcommon/llstringtable.cpp +++ b/indra/llcommon/llstringtable.cpp @@ -89,9 +89,8 @@ LLStringTable::~LLStringTable()  		{  			if (mStringList[i])  			{ -				string_list_t::iterator iter; -				for (iter = mStringList[i]->begin(); iter != mStringList[i]->end(); iter++) -					delete *iter; // *iter = (LLStringTableEntry*) +				for (LLStringTableEntry* entry : *mStringList[i]) +					delete entry;  			}  			delete mStringList[i];  		} @@ -156,9 +155,9 @@ LLStringTableEntry* LLStringTable::checkStringEntry(const char *str)  	if (str)  	{  		char *ret_val; -		LLStringTableEntry	*entry;  		U32					hash_value = hash_my_string(str, mMaxEntries);  #if STRING_TABLE_HASH_MAP +		LLStringTableEntry	*entry;  #if 1 // Microsoft  		string_hash_t::iterator lower = mStringHash.lower_bound(hash_value);  		string_hash_t::iterator upper = mStringHash.upper_bound(hash_value); @@ -180,10 +179,8 @@ LLStringTableEntry* LLStringTable::checkStringEntry(const char *str)  		string_list_t		*strlist = mStringList[hash_value];  		if (strlist)  		{ -			string_list_t::iterator iter; -			for (iter = strlist->begin(); iter != strlist->end(); iter++) +			for (LLStringTableEntry* entry : *strlist)  			{ -				entry = *iter;  				ret_val = entry->mString;  				if (!strncmp(ret_val, str, MAX_STRINGS_LENGTH))  				{ @@ -226,9 +223,9 @@ LLStringTableEntry* LLStringTable::addStringEntry(const char *str)  	if (str)  	{  		char *ret_val = NULL; -		LLStringTableEntry	*entry;  		U32					hash_value = hash_my_string(str, mMaxEntries);  #if STRING_TABLE_HASH_MAP +		LLStringTableEntry	*entry;  #if 1 // Microsoft  		string_hash_t::iterator lower = mStringHash.lower_bound(hash_value);  		string_hash_t::iterator upper = mStringHash.upper_bound(hash_value); @@ -257,10 +254,8 @@ LLStringTableEntry* LLStringTable::addStringEntry(const char *str)  		if (strlist)  		{ -			string_list_t::iterator iter; -			for (iter = strlist->begin(); iter != strlist->end(); iter++) +			for (LLStringTableEntry* entry : *strlist)  			{ -				entry = *iter;  				ret_val = entry->mString;  				if (!strncmp(ret_val, str, MAX_STRINGS_LENGTH))  				{ @@ -294,10 +289,10 @@ void LLStringTable::removeString(const char *str)  	if (str)  	{  		char *ret_val; -		LLStringTableEntry	*entry;  		U32					hash_value = hash_my_string(str, mMaxEntries);  #if STRING_TABLE_HASH_MAP  		{ +			LLStringTableEntry	*entry;  #if 1 // Microsoft  			string_hash_t::iterator lower = mStringHash.lower_bound(hash_value);  			string_hash_t::iterator upper = mStringHash.upper_bound(hash_value); @@ -331,10 +326,8 @@ void LLStringTable::removeString(const char *str)  		if (strlist)  		{ -			string_list_t::iterator iter; -			for (iter = strlist->begin(); iter != strlist->end(); iter++) +			for (LLStringTableEntry* entry : *strlist)  			{ -				entry = *iter;  				ret_val = entry->mString;  				if (!strncmp(ret_val, str, MAX_STRINGS_LENGTH))  				{ diff --git a/indra/llcommon/llstringtable.h b/indra/llcommon/llstringtable.h index ff09e71677..0a292c8bac 100644 --- a/indra/llcommon/llstringtable.h +++ b/indra/llcommon/llstringtable.h @@ -136,9 +136,9 @@ public:  		for (S32 i = 0; i<mTableSize; i++)  		{  			string_set_t& stringset = mStringList[i]; -			for (string_set_t::iterator iter = stringset.begin(); iter != stringset.end(); iter++) +			for (LLStdStringHandle str : stringset)  			{ -				delete *iter; +				delete str;  			}  			stringset.clear();  		} diff --git a/indra/llcommon/lltracerecording.cpp b/indra/llcommon/lltracerecording.cpp index dd148dd08a..a8dcc5226a 100644 --- a/indra/llcommon/lltracerecording.cpp +++ b/indra/llcommon/lltracerecording.cpp @@ -773,11 +773,9 @@ void PeriodicRecording::handleReset()  	}  	else  	{ -		for (std::vector<Recording>::iterator it = mRecordingPeriods.begin(), end_it = mRecordingPeriods.end(); -			it != end_it; -			++it) +		for (Recording& rec : mRecordingPeriods)  		{ -			it->reset(); +			rec.reset();  		}  	}  	mCurPeriod = 0; diff --git a/indra/llcommon/lltracethreadrecorder.cpp b/indra/llcommon/lltracethreadrecorder.cpp index 4028a5ce97..282c454a2a 100644 --- a/indra/llcommon/lltracethreadrecorder.cpp +++ b/indra/llcommon/lltracethreadrecorder.cpp @@ -284,13 +284,11 @@ void ThreadRecorder::pullFromChildren()  		AccumulatorBufferGroup& target_recording_buffers = mActiveRecordings.back()->mPartialRecording;  		target_recording_buffers.sync(); -		for (child_thread_recorder_list_t::iterator it = mChildThreadRecorders.begin(), end_it = mChildThreadRecorders.end(); -			it != end_it; -			++it) -		{ LLMutexLock lock(&(*it)->mSharedRecordingMutex); +		for (LLTrace::ThreadRecorder* rec : mChildThreadRecorders) +		{ LLMutexLock lock(&(rec->mSharedRecordingMutex)); -			target_recording_buffers.merge((*it)->mSharedRecordingBuffers); -			(*it)->mSharedRecordingBuffers.reset(); +			target_recording_buffers.merge(rec->mSharedRecordingBuffers); +			rec->mSharedRecordingBuffers.reset();  		}  	}  #endif diff --git a/indra/llcommon/lluri.cpp b/indra/llcommon/lluri.cpp index 22711a83d2..4fb92a8f3e 100644 --- a/indra/llcommon/lluri.cpp +++ b/indra/llcommon/lluri.cpp @@ -663,9 +663,9 @@ LLSD LLURI::pathArray() const  	tokenizer::iterator end = tokens.end();  	LLSD params; -	for ( ; it != end; ++it) +	for (const std::string& str : tokens)  	{ -		params.append(*it); +		params.append(str);  	}  	return params;  } diff --git a/indra/llcommon/lluuid.cpp b/indra/llcommon/lluuid.cpp index 6f9e09a587..fc04dca08d 100644 --- a/indra/llcommon/lluuid.cpp +++ b/indra/llcommon/lluuid.cpp @@ -40,11 +40,12 @@  #include "lluuid.h"  #include "llerror.h"  #include "llrand.h" -#include "llmd5.h"  #include "llstring.h"  #include "lltimer.h"  #include "llthread.h"  #include "llmutex.h" +#include "llmd5.h" +#include "hbxxh.h"  const LLUUID LLUUID::null;  const LLTransactionID LLTransactionID::tnull; @@ -400,6 +401,9 @@ LLUUID LLUUID::operator^(const LLUUID& rhs) const  	return id;  } +// WARNING: this algorithm SHALL NOT be changed. It is also used by the server +// and plays a role in some assets validation (e.g. clothing items). Changing +// it would cause invalid assets.  void LLUUID::combine(const LLUUID& other, LLUUID& result) const  {  	LLMD5 md5_uuid; @@ -857,17 +861,12 @@ void LLUUID::generate()  	tmp >>= 8;  	mData[8] = (unsigned char) tmp; -	LLMD5 md5_uuid; -	 -	md5_uuid.update(mData,16); -	md5_uuid.finalize(); -	md5_uuid.raw_digest(mData); +	HBXXH128::digest(*this, (const void*)mData, 16);  }  void LLUUID::generate(const std::string& hash_string)  { -	LLMD5 md5_uuid((U8*)hash_string.c_str()); -	md5_uuid.raw_digest(mData); +	HBXXH128::digest(*this, hash_string);  }  U32 LLUUID::getRandomSeed() @@ -885,13 +884,8 @@ U32 LLUUID::getRandomSeed()     seed[7]=(unsigned char)(pid);     getSystemTime((uuid_time_t *)(&seed[8])); -   LLMD5 md5_seed; -	 -   md5_seed.update(seed,16); -   md5_seed.finalize(); -   md5_seed.raw_digest(seed); -    -   return(*(U32 *)seed); +   U64 seed64 = HBXXH64((const void*)seed, 16).digest(); +   return U32(seed64) ^ U32(seed64 >> 32);  }  BOOL LLUUID::parseUUID(const std::string& buf, LLUUID* value) diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp index 97838e296e..e5eda1eac7 100644 --- a/indra/llcommon/llworkerthread.cpp +++ b/indra/llcommon/llworkerthread.cpp @@ -69,11 +69,11 @@ void LLWorkerThread::clearDeleteList()  				<< " entries in delete list." << LL_ENDL;  		mDeleteMutex->lock(); -		for (delete_list_t::iterator iter = mDeleteList.begin(); iter != mDeleteList.end(); ++iter) +		for (LLWorkerClass* worker : mDeleteList)  		{ -			(*iter)->mRequestHandle = LLWorkerThread::nullHandle(); -			(*iter)->clearFlags(LLWorkerClass::WCF_HAVE_WORK); -			delete *iter ; +			worker->mRequestHandle = LLWorkerThread::nullHandle(); +			worker->clearFlags(LLWorkerClass::WCF_HAVE_WORK); +			delete worker;  		}  		mDeleteList.clear() ;  		mDeleteMutex->unlock() ; @@ -108,15 +108,12 @@ size_t LLWorkerThread::update(F32 max_time_ms)  	}  	mDeleteMutex->unlock();	  	// abort and delete after releasing mutex -	for (std::vector<LLWorkerClass*>::iterator iter = abort_list.begin(); -		 iter != abort_list.end(); ++iter) +	for (LLWorkerClass* worker : abort_list)  	{ -		(*iter)->abortWork(false); +		worker->abortWork(false);  	} -	for (std::vector<LLWorkerClass*>::iterator iter = delete_list.begin(); -		 iter != delete_list.end(); ++iter) +	for (LLWorkerClass* worker : delete_list)  	{ -		LLWorkerClass* worker = *iter;  		if (worker->mRequestHandle)  		{  			// Finished but not completed @@ -124,7 +121,7 @@ size_t LLWorkerThread::update(F32 max_time_ms)  			worker->mRequestHandle = LLWorkerThread::nullHandle();  			worker->clearFlags(LLWorkerClass::WCF_HAVE_WORK);  		} -		delete *iter; +		delete worker;  	}  	// delete and aborted entries mean there's still work to do  	res += delete_list.size() + abort_list.size(); diff --git a/indra/llcommon/tests/lleventdispatcher_test.cpp b/indra/llcommon/tests/lleventdispatcher_test.cpp index 966dc2c5aa..466f11f52a 100644 --- a/indra/llcommon/tests/lleventdispatcher_test.cpp +++ b/indra/llcommon/tests/lleventdispatcher_test.cpp @@ -345,7 +345,7 @@ namespace tut          lleventdispatcher_data():              work("test dispatcher", "op"),              // map {d=double, array=[3 elements]} -            required(LLSDMap("d", LLSD::Real(0))("array", LLSDArray(LLSD())(LLSD())(LLSD()))), +            required(LLSDMap("d", LLSD::Real(0))("array", llsd::array(LLSD(), LLSD(), LLSD()))),              // first several params are required, last couple optional              partial_offset(3)          { @@ -434,8 +434,8 @@ namespace tut              // freena(), methodna(), cmethodna(), smethodna() all take same param list.              // Same for freenb() et al. -            params = LLSDMap("a", LLSDArray("b")("i")("f")("d")("cp")) -                            ("b", LLSDArray("s")("uuid")("date")("uri")("bin")); +            params = LLSDMap("a", llsd::array("b", "i", "f", "d", "cp")) +                            ("b", llsd::array("s", "uuid", "date", "uri", "bin"));              debug("params:\n",                    params, "\n"                    "params[\"a\"]:\n", @@ -452,12 +452,12 @@ namespace tut              // LLDate values are, as long as they're different from the              // LLUUID() and LLDate() default values so inspect() will report              // them. -            dft_array_full = LLSDMap("a", LLSDArray(true)(17)(3.14)(123456.78)("classic")) -                                    ("b", LLSDArray("string") -                                                   (LLUUID::generateNewID()) -                                                   (LLDate::now()) -                                                   (LLURI("http://www.ietf.org/rfc/rfc3986.txt")) -                                                   (binary)); +            dft_array_full = LLSDMap("a", llsd::array(true, 17, 3.14, 123456.78, "classic")) +                                    ("b", llsd::array("string", +                                                      LLUUID::generateNewID(), +                                                      LLDate::now(), +                                                      LLURI("http://www.ietf.org/rfc/rfc3986.txt"), +                                                      binary));              debug("dft_array_full:\n",                    dft_array_full);              // Partial defaults arrays. @@ -723,7 +723,7 @@ namespace tut      {          set_test_name("map-style registration with non-array params");          // Pass "param names" as scalar or as map -        LLSD attempts(LLSDArray(17)(LLSDMap("pi", 3.14)("two", 2))); +        LLSD attempts(llsd::array(17, LLSDMap("pi", 3.14)("two", 2)));          foreach(LLSD ae, inArray(attempts))          {              std::string threw = catch_what<std::exception>([this, &ae](){ @@ -738,7 +738,7 @@ namespace tut      {          set_test_name("map-style registration with badly-formed defaults");          std::string threw = catch_what<std::exception>([this](){ -                work.add("freena_err", "freena", freena, LLSDArray("a")("b"), 17); +                work.add("freena_err", "freena", freena, llsd::array("a", "b"), 17);              });          ensure_has(threw, "must be a map or an array");      } @@ -749,8 +749,8 @@ namespace tut          set_test_name("map-style registration with too many array defaults");          std::string threw = catch_what<std::exception>([this](){                  work.add("freena_err", "freena", freena, -                         LLSDArray("a")("b"), -                         LLSDArray(17)(0.9)("gack")); +                         llsd::array("a", "b"), +                         llsd::array(17, 0.9, "gack"));              });          ensure_has(threw, "shorter than");      } @@ -761,7 +761,7 @@ namespace tut          set_test_name("map-style registration with too many map defaults");          std::string threw = catch_what<std::exception>([this](){                  work.add("freena_err", "freena", freena, -                         LLSDArray("a")("b"), +                         llsd::array("a", "b"),                           LLSDMap("b", 17)("foo", 3.14)("bar", "sinister"));              });          ensure_has(threw, "nonexistent params"); @@ -798,7 +798,7 @@ namespace tut      void object::test<8>()      {          set_test_name("query Callables with/out required params"); -        LLSD names(LLSDArray("free1")("Dmethod1")("Dcmethod1")("method1")); +        LLSD names(llsd::array("free1", "Dmethod1", "Dcmethod1", "method1"));          foreach(LLSD nm, inArray(names))          {              LLSD metadata(getMetadata(nm)); @@ -821,13 +821,13 @@ namespace tut      {          set_test_name("query array-style functions/methods");          // Associate each registered name with expected arity. -        LLSD expected(LLSDArray -                      (LLSDArray -                       (0)(LLSDArray("free0_array")("smethod0_array")("method0_array"))) -                      (LLSDArray -                       (5)(LLSDArray("freena_array")("smethodna_array")("methodna_array"))) -                      (LLSDArray -                       (5)(LLSDArray("freenb_array")("smethodnb_array")("methodnb_array")))); +        LLSD expected(llsd::array +                      (llsd::array +                       (0, llsd::array("free0_array", "smethod0_array", "method0_array")), +                       llsd::array +                       (5, llsd::array("freena_array", "smethodna_array", "methodna_array")), +                       llsd::array +                       (5, llsd::array("freenb_array", "smethodnb_array", "methodnb_array"))));          foreach(LLSD ae, inArray(expected))          {              LLSD::Integer arity(ae[0].asInteger()); @@ -853,7 +853,7 @@ namespace tut          set_test_name("query map-style no-params functions/methods");          // - (Free function | non-static method), map style, no params (ergo          //   no defaults) -        LLSD names(LLSDArray("free0_map")("smethod0_map")("method0_map")); +        LLSD names(llsd::array("free0_map", "smethod0_map", "method0_map"));          foreach(LLSD nm, inArray(names))          {              LLSD metadata(getMetadata(nm)); @@ -877,13 +877,13 @@ namespace tut          // there should (!) be no difference beween array defaults and map          // defaults. Verify, so we can ignore the distinction for all other          // tests. -        LLSD equivalences(LLSDArray -                          (LLSDArray("freena_map_adft")("freena_map_mdft")) -                          (LLSDArray("freenb_map_adft")("freenb_map_mdft")) -                          (LLSDArray("smethodna_map_adft")("smethodna_map_mdft")) -                          (LLSDArray("smethodnb_map_adft")("smethodnb_map_mdft")) -                          (LLSDArray("methodna_map_adft")("methodna_map_mdft")) -                          (LLSDArray("methodnb_map_adft")("methodnb_map_mdft"))); +        LLSD equivalences(llsd::array +                          (llsd::array("freena_map_adft", "freena_map_mdft"), +                           llsd::array("freenb_map_adft", "freenb_map_mdft"), +                           llsd::array("smethodna_map_adft", "smethodna_map_mdft"), +                           llsd::array("smethodnb_map_adft", "smethodnb_map_mdft"), +                           llsd::array("methodna_map_adft", "methodna_map_mdft"), +                           llsd::array("methodnb_map_adft", "methodnb_map_mdft")));          foreach(LLSD eq, inArray(equivalences))          {              LLSD adft(eq[0]); @@ -953,42 +953,42 @@ namespace tut          debug("skipreq:\n",                skipreq); -        LLSD groups(LLSDArray       // array of groups +        LLSD groups(llsd::array       // array of groups -                    (LLSDArray      // group -                     (LLSDArray("freena_map_allreq")("smethodna_map_allreq")("methodna_map_allreq")) -                     (LLSDArray(allreq["a"])(LLSD()))) // required, optional +                    (llsd::array      // group +                     (llsd::array("freena_map_allreq", "smethodna_map_allreq", "methodna_map_allreq"), +                      llsd::array(allreq["a"], LLSD())),  // required, optional -                    (LLSDArray        // group -                     (LLSDArray("freenb_map_allreq")("smethodnb_map_allreq")("methodnb_map_allreq")) -                     (LLSDArray(allreq["b"])(LLSD()))) // required, optional +                     llsd::array        // group +                     (llsd::array("freenb_map_allreq", "smethodnb_map_allreq", "methodnb_map_allreq"), +                      llsd::array(allreq["b"], LLSD())),  // required, optional -                    (LLSDArray        // group -                     (LLSDArray("freena_map_leftreq")("smethodna_map_leftreq")("methodna_map_leftreq")) -                     (LLSDArray(leftreq["a"])(rightdft["a"]))) // required, optional +                     llsd::array        // group +                     (llsd::array("freena_map_leftreq", "smethodna_map_leftreq", "methodna_map_leftreq"), +                      llsd::array(leftreq["a"], rightdft["a"])),  // required, optional -                    (LLSDArray        // group -                     (LLSDArray("freenb_map_leftreq")("smethodnb_map_leftreq")("methodnb_map_leftreq")) -                     (LLSDArray(leftreq["b"])(rightdft["b"]))) // required, optional +                     llsd::array        // group +                     (llsd::array("freenb_map_leftreq", "smethodnb_map_leftreq", "methodnb_map_leftreq"), +                      llsd::array(leftreq["b"], rightdft["b"])),  // required, optional -                    (LLSDArray        // group -                     (LLSDArray("freena_map_skipreq")("smethodna_map_skipreq")("methodna_map_skipreq")) -                     (LLSDArray(skipreq["a"])(dft_map_partial["a"]))) // required, optional +                     llsd::array        // group +                     (llsd::array("freena_map_skipreq", "smethodna_map_skipreq", "methodna_map_skipreq"), +                      llsd::array(skipreq["a"], dft_map_partial["a"])),  // required, optional -                    (LLSDArray        // group -                     (LLSDArray("freenb_map_skipreq")("smethodnb_map_skipreq")("methodnb_map_skipreq")) -                     (LLSDArray(skipreq["b"])(dft_map_partial["b"]))) // required, optional +                     llsd::array        // group +                     (llsd::array("freenb_map_skipreq", "smethodnb_map_skipreq", "methodnb_map_skipreq"), +                      llsd::array(skipreq["b"], dft_map_partial["b"])),  // required, optional -                    // We only need mention the full-map-defaults ("_mdft" suffix) -                    // registrations, having established their equivalence with the -                    // full-array-defaults ("_adft" suffix) registrations in another test. -                    (LLSDArray        // group -                     (LLSDArray("freena_map_mdft")("smethodna_map_mdft")("methodna_map_mdft")) -                     (LLSDArray(LLSD::emptyMap())(dft_map_full["a"]))) // required, optional +                     // We only need mention the full-map-defaults ("_mdft" suffix) +                     // registrations, having established their equivalence with the +                     // full-array-defaults ("_adft" suffix) registrations in another test. +                     llsd::array        // group +                     (llsd::array("freena_map_mdft", "smethodna_map_mdft", "methodna_map_mdft"), +                      llsd::array(LLSD::emptyMap(), dft_map_full["a"])),  // required, optional -                    (LLSDArray        // group -                     (LLSDArray("freenb_map_mdft")("smethodnb_map_mdft")("methodnb_map_mdft")) -                     (LLSDArray(LLSD::emptyMap())(dft_map_full["b"])))); // required, optional +                     llsd::array        // group +                     (llsd::array("freenb_map_mdft", "smethodnb_map_mdft", "methodnb_map_mdft"), +                      llsd::array(LLSD::emptyMap(), dft_map_full["b"])))); // required, optional          foreach(LLSD grp, inArray(groups))          { @@ -1077,7 +1077,7 @@ namespace tut          // with 'required'.          LLSD answer(42);          // LLSD value matching 'required' according to llsd_matches() rules. -        LLSD matching(LLSDMap("d", 3.14)("array", LLSDArray("answer")(true)(answer))); +        LLSD matching(LLSDMap("d", 3.14)("array", llsd::array("answer", true, answer)));          // Okay, walk through 'tests'.          foreach(const CallablesTriple& tr, tests)          { @@ -1114,17 +1114,17 @@ namespace tut          call_exc("free0_map", 17, map_exc);          // Passing an array to a map-style function works now! No longer an          // error case! -//      call_exc("free0_map", LLSDArray("a")("b"), map_exc); +//      call_exc("free0_map", llsd::array("a", "b"), map_exc);      }      template<> template<>      void object::test<18>()      {          set_test_name("call no-args functions"); -        LLSD names(LLSDArray -                   ("free0_array")("free0_map") -                   ("smethod0_array")("smethod0_map") -                   ("method0_array")("method0_map")); +        LLSD names(llsd::array +                   ("free0_array", "free0_map", +                    "smethod0_array", "smethod0_map", +                    "method0_array", "method0_map"));          foreach(LLSD name, inArray(names))          {              // Look up the Vars instance for this function. @@ -1142,10 +1142,10 @@ namespace tut      }      // Break out this data because we use it in a couple different tests. -    LLSD array_funcs(LLSDArray -                     (LLSDMap("a", "freena_array")   ("b", "freenb_array")) -                     (LLSDMap("a", "smethodna_array")("b", "smethodnb_array")) -                     (LLSDMap("a", "methodna_array") ("b", "methodnb_array"))); +    LLSD array_funcs(llsd::array +                     (LLSDMap("a", "freena_array")   ("b", "freenb_array"), +                      LLSDMap("a", "smethodna_array")("b", "smethodnb_array"), +                      LLSDMap("a", "methodna_array") ("b", "methodnb_array")));      template<> template<>      void object::test<19>() @@ -1153,7 +1153,7 @@ namespace tut          set_test_name("call array-style functions with too-short arrays");          // Could have two different too-short arrays, one for *na and one for          // *nb, but since they both take 5 params... -        LLSD tooshort(LLSDArray("this")("array")("too")("short")); +        LLSD tooshort(llsd::array("this", "array", "too", "short"));          foreach(const LLSD& funcsab, inArray(array_funcs))          {              foreach(const llsd::MapEntry& e, inMap(funcsab)) @@ -1172,12 +1172,12 @@ namespace tut          {              binary.push_back((U8)h);          } -        LLSD args(LLSDMap("a", LLSDArray(true)(17)(3.14)(123.456)("char*")) -                         ("b", LLSDArray("string") -                                        (LLUUID("01234567-89ab-cdef-0123-456789abcdef")) -                                        (LLDate("2011-02-03T15:07:00Z")) -                                        (LLURI("http://secondlife.com")) -                                        (binary))); +        LLSD args(LLSDMap("a", llsd::array(true, 17, 3.14, 123.456, "char*")) +                         ("b", llsd::array("string", +                                           LLUUID("01234567-89ab-cdef-0123-456789abcdef"), +                                           LLDate("2011-02-03T15:07:00Z"), +                                           LLURI("http://secondlife.com"), +                                           binary)));          LLSD argsplus(args);          argsplus["a"].append("bogus");          argsplus["b"].append("bogus"); @@ -1191,7 +1191,7 @@ namespace tut          debug("expect: ", expect);          // Use substantially the same logic for args and argsplus -        LLSD argsarrays(LLSDArray(args)(argsplus)); +        LLSD argsarrays(llsd::array(args, argsplus));          // So i==0 selects 'args', i==1 selects argsplus          for (LLSD::Integer i(0), iend(argsarrays.size()); i < iend; ++i)          { @@ -1236,8 +1236,8 @@ namespace tut          set_test_name("call map-style functions with (full | oversized) (arrays | maps)");          const char binary[] = "\x99\x88\x77\x66\x55";          LLSD array_full(LLSDMap -                        ("a", LLSDArray(false)(255)(98.6)(1024.5)("pointer")) -                        ("b", LLSDArray("object")(LLUUID::generateNewID())(LLDate::now())(LLURI("http://wiki.lindenlab.com/wiki"))(LLSD::Binary(boost::begin(binary), boost::end(binary))))); +                        ("a", llsd::array(false, 255, 98.6, 1024.5, "pointer")) +                        ("b", llsd::array("object", LLUUID::generateNewID(), LLDate::now(), LLURI("http://wiki.lindenlab.com/wiki"), LLSD::Binary(boost::begin(binary), boost::end(binary)))));          LLSD array_overfull(array_full);          foreach(LLSD::String a, ab)          { @@ -1280,20 +1280,20 @@ namespace tut          // parameter defaults should make NO DIFFERENCE WHATSOEVER. Every call          // should pass all params.          LLSD names(LLSDMap -                   ("a", LLSDArray -                         ("freena_map_allreq") ("smethodna_map_allreq") ("methodna_map_allreq") -                         ("freena_map_leftreq")("smethodna_map_leftreq")("methodna_map_leftreq") -                         ("freena_map_skipreq")("smethodna_map_skipreq")("methodna_map_skipreq") -                         ("freena_map_adft")   ("smethodna_map_adft")   ("methodna_map_adft") -                         ("freena_map_mdft")   ("smethodna_map_mdft")   ("methodna_map_mdft")) -                   ("b", LLSDArray -                         ("freenb_map_allreq") ("smethodnb_map_allreq") ("methodnb_map_allreq") -                         ("freenb_map_leftreq")("smethodnb_map_leftreq")("methodnb_map_leftreq") -                         ("freenb_map_skipreq")("smethodnb_map_skipreq")("methodnb_map_skipreq") -                         ("freenb_map_adft")   ("smethodnb_map_adft")   ("methodnb_map_adft") -                         ("freenb_map_mdft")   ("smethodnb_map_mdft")   ("methodnb_map_mdft"))); +                   ("a", llsd::array +                    ("freena_map_allreq",  "smethodna_map_allreq",  "methodna_map_allreq", +                     "freena_map_leftreq", "smethodna_map_leftreq", "methodna_map_leftreq", +                     "freena_map_skipreq", "smethodna_map_skipreq", "methodna_map_skipreq", +                     "freena_map_adft",    "smethodna_map_adft",    "methodna_map_adft", +                     "freena_map_mdft",    "smethodna_map_mdft",    "methodna_map_mdft")) +                   ("b", llsd::array +                    ("freenb_map_allreq",  "smethodnb_map_allreq",  "methodnb_map_allreq", +                     "freenb_map_leftreq", "smethodnb_map_leftreq", "methodnb_map_leftreq", +                     "freenb_map_skipreq", "smethodnb_map_skipreq", "methodnb_map_skipreq", +                     "freenb_map_adft",    "smethodnb_map_adft",    "methodnb_map_adft", +                     "freenb_map_mdft",    "smethodnb_map_mdft",    "methodnb_map_mdft")));          // Treat (full | overfull) (array | map) the same. -        LLSD argssets(LLSDArray(array_full)(array_overfull)(map_full)(map_overfull)); +        LLSD argssets(llsd::array(array_full, array_overfull, map_full, map_overfull));          foreach(const LLSD& args, inArray(argssets))          {              foreach(LLSD::String a, ab) diff --git a/indra/llcommon/tests/llprocess_test.cpp b/indra/llcommon/tests/llprocess_test.cpp index 999d432079..81449b4a42 100644 --- a/indra/llcommon/tests/llprocess_test.cpp +++ b/indra/llcommon/tests/llprocess_test.cpp @@ -356,7 +356,7 @@ namespace tut          // Create a script file in a temporary place.          NamedTempFile script("py", -			"from __future__ import print_function" EOL +            "from __future__ import print_function" EOL              "import sys" EOL              "import time" EOL              EOL @@ -366,7 +366,7 @@ namespace tut              "time.sleep(2)" EOL              "print('stderr after wait',file=sys.stderr)" EOL              "sys.stderr.flush()" EOL -            ); +        );          // Arrange to track the history of our interaction with child: what we          // fetched, which pipe it came from, how many tries it took before we @@ -862,8 +862,8 @@ namespace tut          set_test_name("'bogus' test");          CaptureLog recorder;          PythonProcessLauncher py(get_test_name(), -                                 "from __future__ import print_function\n" -                                 "print('Hello world')\n"); +            "from __future__ import print_function\n" +            "print('Hello world')\n");          py.mParams.files.add(LLProcess::FileParam("bogus"));          py.mPy = LLProcess::create(py.mParams);          ensure("should have rejected 'bogus'", ! py.mPy); @@ -878,8 +878,8 @@ namespace tut          // Replace this test with one or more real 'file' tests when we          // implement 'file' support          PythonProcessLauncher py(get_test_name(), -                                 "from __future__ import print_function\n" -                                 "print('Hello world')\n"); +            "from __future__ import print_function\n" +            "print('Hello world')\n");          py.mParams.files.add(LLProcess::FileParam());          py.mParams.files.add(LLProcess::FileParam("file"));          py.mPy = LLProcess::create(py.mParams); @@ -894,8 +894,8 @@ namespace tut          // implement 'tpipe' support          CaptureLog recorder;          PythonProcessLauncher py(get_test_name(), -                                 "from __future__ import print_function\n" -                                 "print('Hello world')\n"); +            "from __future__ import print_function\n" +            "print('Hello world')\n");          py.mParams.files.add(LLProcess::FileParam());          py.mParams.files.add(LLProcess::FileParam("tpipe"));          py.mPy = LLProcess::create(py.mParams); @@ -912,8 +912,8 @@ namespace tut          // implement 'npipe' support          CaptureLog recorder;          PythonProcessLauncher py(get_test_name(), -                                 "from __future__ import print_function\n" -                                 "print('Hello world')\n"); +            "from __future__ import print_function\n" +            "print('Hello world')\n");          py.mParams.files.add(LLProcess::FileParam());          py.mParams.files.add(LLProcess::FileParam());          py.mParams.files.add(LLProcess::FileParam("npipe")); @@ -989,20 +989,20 @@ namespace tut      {          set_test_name("get*Pipe() validation");          PythonProcessLauncher py(get_test_name(), -                                 "from __future__ import print_function\n" -                                 "print('this output is expected')\n"); +            "from __future__ import print_function\n" +            "print('this output is expected')\n");          py.mParams.files.add(LLProcess::FileParam("pipe")); // pipe for  stdin          py.mParams.files.add(LLProcess::FileParam());       // inherit stdout          py.mParams.files.add(LLProcess::FileParam("pipe")); // pipe for stderr          py.run();          TEST_getPipe(*py.mPy, getWritePipe, getOptWritePipe, -                     LLProcess::STDIN,   // VALID -                     LLProcess::STDOUT,  // NOPIPE -                     LLProcess::STDERR); // BADPIPE +            LLProcess::STDIN,   // VALID +            LLProcess::STDOUT,  // NOPIPE +            LLProcess::STDERR); // BADPIPE          TEST_getPipe(*py.mPy, getReadPipe,  getOptReadPipe, -                     LLProcess::STDERR,  // VALID -                     LLProcess::STDOUT,  // NOPIPE -                     LLProcess::STDIN);  // BADPIPE +            LLProcess::STDERR,  // VALID +            LLProcess::STDOUT,  // NOPIPE +            LLProcess::STDIN);  // BADPIPE      }      template<> template<> @@ -1129,8 +1129,8 @@ namespace tut      {          set_test_name("ReadPipe \"eof\" event");          PythonProcessLauncher py(get_test_name(), -                                 "from __future__ import print_function\n" -                                 "print('Hello from Python!')\n"); +            "from __future__ import print_function\n" +            "print('Hello from Python!')\n");          py.mParams.files.add(LLProcess::FileParam()); // stdin          py.mParams.files.add(LLProcess::FileParam("pipe")); // stdout          py.launch(); diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp index be7ec12094..d7c11c5021 100644 --- a/indra/llcommon/tests/llsdserialize_test.cpp +++ b/indra/llcommon/tests/llsdserialize_test.cpp @@ -1817,10 +1817,10 @@ namespace tut      {          set_test_name("verify sequence to Python"); -        LLSD cdata(LLSDArray(17)(3.14) -                  ("This string\n" -                   "has several\n" -                   "lines.")); +        LLSD cdata(llsd::array(17, 3.14, +                               "This string\n" +                               "has several\n" +                               "lines."));          const char pydata[] =              "def verify(iterable):\n" | 
