예전에 님프 코드 좀 봤는데


g_hash_table_iter_init (&iter, server->priv->services);


  while (g_hash_table_iter_next (&iter, NULL, &service))

  {

    if (!g_strcmp0 (server->priv->last_focused_service,

                    nimf_service_get_id (service)))

      nimf_service_change_engine_by_id (service, engine_id);

  }


이 부분 있는데 서비스 ID 를 키로 쓰는데 특정 ID 가진 서비스 찾으려고 while 문 전체 비교하는데


해시 테이블 자체가 O(1) 룩업해서 한줄로 쓸 수 있고


왜 sort 안에서 


static gint

on_comparison (gconstpointer engine_id_a, gconstpointer engine_id_b)

{

  ...

  settings_a = g_settings_new (schema_id_a);

  settings_b = g_settings_new (schema_id_b);

  schema_name_a = g_settings_get_string (settings_a, "hidden-schema-name");

  ...

  g_object_unref (settings_a);

}


객체 생성을 하는지


그리고 싱글톤 패턴내에도 댕글링 포인터가 있고


그래서 뭐 잘치는지는 모르겠음


C를 잘쓴다면 이해를 하겠는데, 그냥 저냥 보이는 아마추어 코드라.