// ********************************************************************** // // Copyright (c) 2003-2012 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** #pragma once namespace IceInternal { inline void hashAdd(Ice::Int& hashCode, Ice::Int value) { hashCode = hashCode * 5 + value; } inline void hashAdd(Ice::Int& hashCode, bool value) { hashCode = hashCode * 5 + static_cast(value); } inline void hashAdd(Ice::Int& hashCode, const std::string& value) { for(std::string::const_iterator p = value.begin(); p != value.end(); ++p) { hashCode = 5 * hashCode + *p; } } template void hashAdd(Ice::Int& hashCode, const std::vector& seq) { for(typename std::vector::const_iterator p = seq.begin(); p != seq.end(); ++p) { hashAdd(hashCode, *p); } } template void hashAdd(Ice::Int& hashCode, const std::map& map) { for(typename std::map::const_iterator p = map.begin(); p != map.end(); ++p) { hashAdd(hashCode, p->first); hashAdd(hashCode, p->second); } } }