annotate foosdk/sdk/foobar2000/SDK/file_info_impl.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "foobar2000-sdk-pch.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include <pfc/bit_array_impl.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #include <pfc/sort.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 #include "file_info_impl.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 t_size file_info_impl::meta_get_count() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 return m_meta.get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 const char* file_info_impl::meta_enum_name(t_size p_index) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 return m_meta.get_name(p_index);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 t_size file_info_impl::meta_enum_value_count(t_size p_index) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 return m_meta.get_value_count(p_index);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 const char* file_info_impl::meta_enum_value(t_size p_index,t_size p_value_number) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 return m_meta.get_value(p_index,p_value_number);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 t_size file_info_impl::meta_set_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 meta_remove_field_ex(p_name,p_name_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 return meta_set_nocheck_ex(p_name,p_name_length,p_value,p_value_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 t_size file_info_impl::meta_set_nocheck_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 return m_meta.add_entry(p_name,p_name_length,p_value,p_value_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 void file_info_impl::meta_insert_value_ex(t_size p_index,t_size p_value_index,const char * p_value,t_size p_value_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 m_meta.insert_value(p_index,p_value_index,p_value,p_value_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 void file_info_impl::meta_remove_mask(const bit_array & p_mask)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 m_meta.remove_mask(p_mask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 void file_info_impl::meta_reorder(const t_size * p_order)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 m_meta.reorder(p_order);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 void file_info_impl::meta_remove_values(t_size p_index,const bit_array & p_mask)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 m_meta.remove_values(p_index,p_mask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 if (m_meta.get_value_count(p_index) == 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 m_meta.remove_mask(pfc::bit_array_one(p_index));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 t_size file_info_impl::info_get_count() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 return m_info.get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 const char* file_info_impl::info_enum_name(t_size p_index) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 return m_info.get_name(p_index);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 const char* file_info_impl::info_enum_value(t_size p_index) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 return m_info.get_value(p_index);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 t_size file_info_impl::info_set_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 info_remove_ex(p_name,p_name_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 return info_set_nocheck_ex(p_name,p_name_length,p_value,p_value_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 t_size file_info_impl::info_set_nocheck_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 return m_info.add_item(p_name,p_name_length,p_value,p_value_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 void file_info_impl::info_remove_mask(const bit_array & p_mask)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 m_info.remove_mask(p_mask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 file_info_impl::file_info_impl(const file_info & p_source)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 copy(p_source);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 file_info_impl::file_info_impl(const file_info_impl & p_source)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 copy(p_source);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 const file_info_impl & file_info_impl::operator=(const file_info_impl & p_source)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 copy(p_source);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 file_info_impl::file_info_impl() {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 double file_info_impl::get_length() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 return m_length;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 void file_info_impl::set_length(double p_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 m_length = p_length;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 void file_info_impl::meta_modify_value_ex(t_size p_index,t_size p_value_index,const char * p_value,t_size p_value_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 m_meta.modify_value(p_index,p_value_index,p_value,p_value_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 replaygain_info file_info_impl::get_replaygain() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 return m_replaygain;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 void file_info_impl::set_replaygain(const replaygain_info & p_info)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 m_replaygain = p_info;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 file_info_impl::~file_info_impl()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 t_size file_info_impl_utils::info_storage::add_item(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 t_size index = m_info.get_size();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 m_info.set_size(index + 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 m_info[index].init(p_name,p_name_length,p_value,p_value_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 return index;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 void file_info_impl_utils::info_storage::remove_mask(const bit_array & p_mask) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 pfc::remove_mask_t(m_info,p_mask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 size_t file_info_impl_utils::meta_storage::add_blank(const char* name) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 meta_entry e;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 e.m_name = name;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 const auto ret = m_data.size();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 m_data.add_item(std::move(e));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 return ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 t_size file_info_impl_utils::meta_storage::add_entry(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 const auto ret = m_data.size();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 m_data.add_item(meta_entry(p_name, p_name_length, p_value, p_value_length));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 return ret;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 void file_info_impl_utils::meta_storage::insert_value(t_size p_index,t_size p_value_index,const char * p_value,t_size p_value_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 m_data[p_index].insert_value(p_value_index,p_value,p_value_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 void file_info_impl_utils::meta_storage::modify_value(t_size p_index,t_size p_value_index,const char * p_value,t_size p_value_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 m_data[p_index].modify_value(p_value_index,p_value,p_value_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 void file_info_impl_utils::meta_storage::remove_values(t_size p_index,const bit_array & p_mask)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 m_data[p_index].remove_values(p_mask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 void file_info_impl_utils::meta_storage::remove_mask(const bit_array & p_mask)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 pfc::remove_mask_t(m_data,p_mask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 file_info_impl_utils::meta_entry::meta_entry(const char * p_name,t_size p_name_len,const char * p_value,t_size p_value_len)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 m_name.set_string(p_name,p_name_len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 m_values.set_size(1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 m_values[0].set_string(p_value,p_value_len);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 void file_info_impl_utils::meta_entry::remove_values(const bit_array & p_mask)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 pfc::remove_mask_t(m_values,p_mask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 void file_info_impl_utils::meta_entry::insert_value(t_size p_value_index,const char * p_value,t_size p_value_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 pfc::string_simple temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 temp.set_string(p_value,p_value_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 pfc::insert_t(m_values,temp,p_value_index);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 void file_info_impl_utils::meta_entry::modify_value(t_size p_value_index,const char * p_value,t_size p_value_length)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 m_values[p_value_index].set_string(p_value,p_value_length);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 void file_info_impl_utils::meta_storage::reorder(const t_size * p_order)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 pfc::reorder_t(m_data,p_order,m_data.get_size());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 void file_info_impl::copy_meta(const file_info & p_source)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 m_meta.copy_from(p_source);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 void file_info_impl::copy_info(const file_info & p_source)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 m_info.copy_from(p_source);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 void file_info_impl_utils::meta_storage::copy_from(const file_info & p_info)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234 t_size meta_index,meta_count = p_info.meta_get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 m_data.set_size(meta_count);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236 for(meta_index=0;meta_index<meta_count;meta_index++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 meta_entry & entry = m_data[meta_index];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239 t_size value_index,value_count = p_info.meta_enum_value_count(meta_index);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 entry.m_name = p_info.meta_enum_name(meta_index);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 entry.m_values.set_size(value_count);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 for(value_index=0;value_index<value_count;value_index++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 entry.m_values[value_index] = p_info.meta_enum_value(meta_index,value_index);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 void file_info_impl_utils::info_storage::copy_from(const file_info & p_info)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 t_size n, count;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 count = p_info.info_get_count();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 m_info.set_count(count);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 for(n=0;n<count;n++) m_info[n].init(p_info.info_enum_name(n),SIZE_MAX,p_info.info_enum_value(n),SIZE_MAX);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 }