package com.gh.gamecenter.common.structure

import android.os.Parcel
import android.os.Parcelable

class ParcelableMap<K, V>(
    val map: HashMap<K, V> = HashMap()
) : Parcelable {

    constructor(parcel: Parcel) : this() {
        val size = parcel.readInt()
        for (i in 0 until size) {
            val key = parcel.readValue(ParcelableMap::class.java.classLoader) as K
            val value = parcel.readValue(ParcelableMap::class.java.classLoader) as V
            map[key] = value
        }
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeInt(map.size)
        for (entry in map.entries) {
            parcel.writeValue(entry.key)
            parcel.writeValue(entry.value)
        }
    }

    override fun describeContents(): Int = 0

    companion object CREATOR : Parcelable.Creator<ParcelableMap<*, *>> {
        override fun createFromParcel(parcel: Parcel): ParcelableMap<*, *> {
            return ParcelableMap<Any, Any>(parcel)
        }

        override fun newArray(size: Int): Array<ParcelableMap<*, *>?> {
            return arrayOfNulls(size)
        }
    }
}