foobar2000 SDK  2015-01-14
file_list_helper.cpp
Go to the documentation of this file.
1 #include "stdafx.h"
2 
3 #ifndef _MSC_VER
4 #define _strdup strdup
5 #endif
6 
8 {
9  t_size n, m = out.get_count();
11  bit_array_bittable mask(m);
12  t_size duplicates = 0;
13  for(n=1;n<m;n++) {
14  if (!metadb::path_compare(out[n-1],out[n])) {duplicates++;mask.set(n,true);}
15  }
16  if (duplicates>0) {
17  out.free_mask(mask);
18  }
19 }
20 
21 
23 {
26  const t_size inCount = data.get_size();
27  for(t_size walk = 0; walk < inCount && content.get_count() < max; ++walk) {
28  content += data[walk]->get_path();
29  }
30  return content.get_count();
31  }
32  void file_list_from_metadb_handle_list::__add(const char * p_what) {
33  char * temp = _strdup(p_what);
34  if (temp == NULL) throw std::bad_alloc();
35  try {m_data.add_item(temp); } catch(...) {free(temp); throw;}
36  }
37 
38  void file_list_from_metadb_handle_list::init_from_list(const list_base_const_t<metadb_handle_ptr> & p_list)
39  {
40  m_data.free_all();
41 
42  t_size n, m = p_list.get_count();
43  for(n=0;n<m;n++) {
44  __add( p_list.get_item(n)->get_path() );
45  }
47  }
48 
49  void file_list_from_metadb_handle_list::init_from_list_display(const list_base_const_t<metadb_handle_ptr> & p_list)
50  {
51  m_data.free_all();
52 
54 
55  t_size n, m = p_list.get_count();
56  for(n=0;n<m;n++)
57  {
58  filesystem::g_get_display_path(p_list.get_item(n)->get_path(),temp);
59  __add(temp);
60  }
62 
63 
64  }
65 
67  void file_list_from_metadb_handle_list::get_item_ex(const char * & p_out,t_size n) const {p_out = m_data.get_item(n);}
68 
70  {
71  m_data.free_all();
72  }
73 
74 }
t_size get_count() const
Definition: avltree.h:453
T get_item(t_size n) const
Definition: list.h:358
Generic variable bit_array implementation. Needs to be initialized with requested array size before ...
void set(t_size n, bool val)
t_size get_count() const
Definition: list.h:365
static t_size g_get_count(const list_base_const_t< metadb_handle_ptr > &p_list, t_size max=~0)
void free_mask(const bit_array &p_mask)
Definition: ptr_list.h:15
t_size get_size() const
Definition: list.h:14
size_t t_size
Definition: int_types.h:48
t_size add_item(const T &item)
Definition: list.h:522
void init_from_list(const list_base_const_t< metadb_handle_ptr > &p_list)
static int path_compare(const char *p1, const char *p2)
Definition: metadb.h:245
void get_item_ex(const char *&p_out, t_size n) const
void free_all()
Definition: ptr_list.h:14
void init_from_list_display(const list_base_const_t< metadb_handle_ptr > &p_list)
void sort_t(t_compare p_compare)
Definition: list.h:461
static void file_list_remove_duplicates(pfc::ptr_list_t< char > &out)
string8_t< pfc::alloc_fast_aggressive > string8_fastalloc
Definition: string_base.h:435