|
@@ -30,10 +30,37 @@
|
|
|
|
|
|
#include <google/protobuf/map_field.h>
|
|
|
|
|
|
+#include <vector>
|
|
|
+
|
|
|
namespace google {
|
|
|
namespace protobuf {
|
|
|
namespace internal {
|
|
|
|
|
|
+ProtobufOnceType map_entry_default_instances_once_;
|
|
|
+Mutex* map_entry_default_instances_mutex_;
|
|
|
+vector<MessageLite*>* map_entry_default_instances_;
|
|
|
+
|
|
|
+void DeleteMapEntryDefaultInstances() {
|
|
|
+ for (int i = 0; i < map_entry_default_instances_->size(); ++i) {
|
|
|
+ delete map_entry_default_instances_->at(i);
|
|
|
+ }
|
|
|
+ delete map_entry_default_instances_mutex_;
|
|
|
+ delete map_entry_default_instances_;
|
|
|
+}
|
|
|
+
|
|
|
+void InitMapEntryDefaultInstances() {
|
|
|
+ map_entry_default_instances_mutex_ = new Mutex();
|
|
|
+ map_entry_default_instances_ = new vector<MessageLite*>();
|
|
|
+ OnShutdown(&DeleteMapEntryDefaultInstances);
|
|
|
+}
|
|
|
+
|
|
|
+void RegisterMapEntryDefaultInstance(MessageLite* default_instance) {
|
|
|
+ GoogleOnceInit(&map_entry_default_instances_once_,
|
|
|
+ &InitMapEntryDefaultInstances);
|
|
|
+ MutexLock lock(map_entry_default_instances_mutex_);
|
|
|
+ map_entry_default_instances_->push_back(default_instance);
|
|
|
+}
|
|
|
+
|
|
|
MapFieldBase::~MapFieldBase() {
|
|
|
if (repeated_field_ != NULL) delete repeated_field_;
|
|
|
}
|