//TODO: Исправить этот метод, так чтобы он работал только с корневыми или со всеми пространствами имен. /// <summary> /// Просматривает список модулей, и объединяет одни и те-же пространства имен разных модулей. /// </summary> /// <param name="units">Список модулей.</param> /// <returns>Список пространств имен.</returns> private static common_namespace_node[] get_units_namespaces(common_unit_node_list units) { /*System.Collections.Generic.Dictionary<string, common_namespace_node> namespaces = * new System.Collections.Generic.Dictionary<string, common_namespace_node>( * SystemLibrary.SystemLibrary.string_comparer); * * foreach (common_unit_node un in units) * { * foreach (common_namespace_node cnn in un.namespaces) * { * string full_name = cnn.namespace_full_name; * common_namespace_node new_namespace; * if (!(namespaces.TryGetValue(full_name,out new_namespace))) * { * new_namespace = cnn.clone(); * namespaces[full_name] = new_namespace; * } * else * { * new_namespace.merge_with_namespace(cnn); * } * } * } * common_namespace_node[] ret = new common_namespace_node[namespaces.Count]; * namespaces.Values.CopyTo(ret, 0); * return ret;*/ System.Collections.Hashtable ht = new System.Collections.Hashtable(); System.Collections.ArrayList al = new System.Collections.ArrayList(); common_namespace_node main_cnn = null; foreach (common_unit_node un in units) { foreach (common_namespace_node cnn in un.namespaces) { //if (cnn.namespace_full_name != "") //{ if (ht[cnn.namespace_name] == null) { al.Add(cnn); ht[cnn.namespace_name] = cnn; } //else // throw new Errors.CompilerInternalError("MergeNamespaces", new Errors.LocatedError("Dupblicate nammespace name: "+cnn.namespace_name)); //} //else main_cnn = cnn; } } int num = 0; if (main_cnn != null) { num++; } common_namespace_node[] namespaces_to_ret = new common_namespace_node[al.Count + num]; if (main_cnn != null) { namespaces_to_ret[0] = main_cnn; } al.CopyTo(namespaces_to_ret, num); return(namespaces_to_ret); /*System.Collections.Hashtable ht = new System.Collections.Hashtable(); * System.Collections.ArrayList al = new System.Collections.ArrayList(); * foreach (common_unit_node un in units) * { * foreach (common_namespace_node cnn in un.namespaces) * if (ht[cnn.namespace_name] == null) * { * al.Add(cnn); * ht[cnn.namespace_name] = cnn; * } * } * common_namespace_node[] namespaces_to_ret = new common_namespace_node[al.Count]; * al.CopyTo(namespaces_to_ret); * return namespaces_to_ret;*/ }
//TODO: Исправить этот метод, так чтобы он работал только с корневыми или со всеми пространствами имен. /// <summary> /// Просматривает список модулей, и объединяет одни и те-же пространства имен разных модулей. /// </summary> /// <param name="units">Список модулей.</param> /// <returns>Список пространств имен.</returns> private static common_namespace_node[] get_units_namespaces(common_unit_node_list units) { /*System.Collections.Generic.Dictionary<string, common_namespace_node> namespaces = new System.Collections.Generic.Dictionary<string, common_namespace_node>( SystemLibrary.SystemLibrary.string_comparer); foreach (common_unit_node un in units) { foreach (common_namespace_node cnn in un.namespaces) { string full_name = cnn.namespace_full_name; common_namespace_node new_namespace; if (!(namespaces.TryGetValue(full_name,out new_namespace))) { new_namespace = cnn.clone(); namespaces[full_name] = new_namespace; } else { new_namespace.merge_with_namespace(cnn); } } } common_namespace_node[] ret = new common_namespace_node[namespaces.Count]; namespaces.Values.CopyTo(ret, 0); return ret;*/ System.Collections.Hashtable ht = new System.Collections.Hashtable(); System.Collections.ArrayList al = new System.Collections.ArrayList(); common_namespace_node main_cnn = null; foreach (common_unit_node un in units) { foreach (common_namespace_node cnn in un.namespaces) { //if (cnn.namespace_full_name != "") //{ if (ht[cnn.namespace_name] == null) { al.Add(cnn); ht[cnn.namespace_name] = cnn; } //else // throw new Errors.CompilerInternalError("MergeNamespaces", new Errors.LocatedError("Dupblicate nammespace name: "+cnn.namespace_name)); //} //else main_cnn = cnn; } } int num = 0; if (main_cnn != null) num++; common_namespace_node[] namespaces_to_ret = new common_namespace_node[al.Count + num]; if (main_cnn != null) namespaces_to_ret[0] = main_cnn; al.CopyTo(namespaces_to_ret, num); return namespaces_to_ret; /*System.Collections.Hashtable ht = new System.Collections.Hashtable(); System.Collections.ArrayList al = new System.Collections.ArrayList(); foreach (common_unit_node un in units) { foreach (common_namespace_node cnn in un.namespaces) if (ht[cnn.namespace_name] == null) { al.Add(cnn); ht[cnn.namespace_name] = cnn; } } common_namespace_node[] namespaces_to_ret = new common_namespace_node[al.Count]; al.CopyTo(namespaces_to_ret); return namespaces_to_ret;*/ }