def _MapCppType(t, other_types, is_public):
  """Returns a C++ type name for the given IDL type."""
  if t.element_type:
    assert t.name == 'sequence'
    ret = 'std::vector<%s>' % _MapCppType(
        t.element_type, other_types, is_public)
  elif t.name in other_types:
    if is_public:
      return 'shaka::' + t.name
    else:
      return 'shaka::js::' + t.name
  else:
    type_map = {
        # IDL   ->  C++
        'boolean': 'bool',
        'double': 'double',
        'DOMString': 'std::string',
    }
    assert t.name in type_map, 'Type %s not found' % t.name
    ret = type_map[t.name]

  return 'shaka::optional<%s>' % ret if t.nullable else ret