///|
let static_map_encoding_version = 51

///|
pub fn StaticIntMap::encode_words(self : StaticIntMap) -> Array[Int] {
  let index_words = self.index.encode_words()
  let words : Array[Int] = [
    static_map_encoding_version,
    index_words.length(),
    self.values.length(),
  ]
  for word in index_words {
    words.push(word)
  }
  for value in self.values {
    words.push(value)
  }
  words
}

///|
pub fn decode_static_map_words(
  words : Array[Int],
) -> Result[StaticIntMap, FuseError] {
  if words.length() < 3 ||
    words[0] != static_map_encoding_version ||
    words[1] <= 0 ||
    words[2] <= 0 ||
    words.length() != 3 + words[1] + words[2] {
    return Err(InvalidEncoding)
  }
  let encoded_index = Array::make(words[1], 0)
  for offset in 0.. Ok({ index, values })
    _ => Err(InvalidEncoding)
  }
}