diff options
author | kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2008-11-14 17:29:32 +0000 |
---|---|---|
committer | kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2008-11-14 17:29:32 +0000 |
commit | a2a32c20434807e9966e3f48375f9419134d1b55 (patch) | |
tree | 16f115d52249335124cba31e959253275af624c4 /src/google/protobuf/repeated_field.h | |
parent | 8da400ed12284575895cf7d5e4425435d4e43c42 (diff) | |
download | protobuf-a2a32c20434807e9966e3f48375f9419134d1b55.tar.gz protobuf-a2a32c20434807e9966e3f48375f9419134d1b55.tar.bz2 protobuf-a2a32c20434807e9966e3f48375f9419134d1b55.zip |
Support HP C++ on Tru64.
Patch (mostly) by Vincent Choinière <Choiniere.Vincent@hydro.qc.ca>.
Diffstat (limited to 'src/google/protobuf/repeated_field.h')
-rw-r--r-- | src/google/protobuf/repeated_field.h | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/google/protobuf/repeated_field.h b/src/google/protobuf/repeated_field.h index c81d27ef..203aa9bf 100644 --- a/src/google/protobuf/repeated_field.h +++ b/src/google/protobuf/repeated_field.h @@ -69,7 +69,12 @@ namespace internal { class LIBPROTOBUF_EXPORT GenericRepeatedField { public: inline GenericRepeatedField() {} +#if defined(__DECCXX) && defined(__osf__) + // HP C++ on Tru64 has trouble when this is not defined inline. + virtual ~GenericRepeatedField() {} +#else virtual ~GenericRepeatedField(); +#endif private: // We only want GeneratedMessageReflection to see and use these, so we @@ -516,9 +521,20 @@ void RepeatedPtrField<Element>::Clear() { current_size_ = 0; } +#if defined(__DECCXX) && defined(__osf__) +// HP C++ on Tru64 has trouble when this is not defined inline. +template <> +inline void RepeatedPtrField<string>::Clear() { + for (int i = 0; i < current_size_; i++) { + elements_[i]->clear(); + } + current_size_ = 0; +} +#else // Specialization defined in repeated_field.cc. template <> void LIBPROTOBUF_EXPORT RepeatedPtrField<string>::Clear(); +#endif template <typename Element> void RepeatedPtrField<Element>::MergeFrom(const RepeatedPtrField& other) { @@ -698,9 +714,16 @@ class RepeatedPtrIterator typename internal::remove_pointer<It>::type>::type> { public: typedef RepeatedPtrIterator<It> iterator; - typedef typename iterator::reference reference; - typedef typename iterator::pointer pointer; - typedef typename iterator::difference_type difference_type; + typedef std::iterator< + std::random_access_iterator_tag, + typename internal::remove_pointer< + typename internal::remove_pointer<It>::type>::type> superclass; + + // Let the compiler know that these are type names, so we don't have to + // write "typename" in front of them everywhere. + typedef typename superclass::reference reference; + typedef typename superclass::pointer pointer; + typedef typename superclass::difference_type difference_type; RepeatedPtrIterator() : it_(NULL) {} explicit RepeatedPtrIterator(const It& it) : it_(it) {} |