I would love to see an example as well ... I am trying with most difficulties to convert the following to 0.9
CODE
class cfg_tagz_list_t : public cfg_var
{
private:
struct entry
{
pfc::string8 name;
pfc::string8 value;
entry(const char * p_name,const char * p_value) : name(p_name), value(p_value) {}
entry() {}
};
pfc::ptr_list_t<entry> data;
public:
~cfg_tagz_list_t() {data.delete_all();}
virtual bool get_raw_data(write_config_callback * out)
{
unsigned n,m=data.get_count();
#if 0
if (m==tabsize(cfg_tagz_list_defaults))
{
bool same = true;
for(n=0;n<m;n++)
{
if (strcmp(data[n]->name,cfg_tagz_list_defaults[n].name) || strcmp(data[n]->value,cfg_tagz_list_defaults[n].value)) {same=false; break;}
}
if (same) return false;
}
#endif
for(n=0;n<m;n++)
{
out->write_string(data[n]->name);
out->write_string(data[n]->value);
}
return true;
}
virtual void set_raw_data(const void * pdata,int psize)
{
data.delete_all();
read_config_helper r(pdata,psize);
for(;;)
{
entry * item = new entry;
if (!r.read_string(item->name)) {delete item; break;}
if (!r.read_string(item->value)) {delete item; break;}
data.add_item(item);
}
}
virtual void reset()
{
data.delete_all();
unsigned n;
for(n=0;n<tabsize(cfg_tagz_list_defaults);n++)
{
data.add_item(new entry(cfg_tagz_list_defaults[n].name,cfg_tagz_list_defaults[n].value));
}
}
const char * get_name(unsigned idx) const
{
if (idx>=0 && idx<data.get_count()) return data[idx]->name;
else return 0;
}
const char * get_value(unsigned idx) const
{
if (idx>=0 && idx<data.get_count()) return data[idx]->value;
else return 0;
}
unsigned find_name(const char * name) const
{
unsigned n,m=data.get_count();
for(n=0;n<m;n++) if (!stricmp_utf8(data[n]->name,name)) return n;
return (unsigned)(-1);
}
unsigned find_value(const char * value) const
{
unsigned n,m=data.get_count();
for(n=0;n<m;n++) if (!stricmp_utf8(data[n]->value,value)) return n;
return (unsigned)(-1);
}
unsigned add_item(const char * name,const char * value)
{
return data.add_item(new entry(name,value));
}
void remove_item(unsigned idx)
{
data.delete_by_idx(idx);
}
void modify_item(unsigned idx,const char * name,const char * value)
{
entry * p_entry = data[idx];
p_entry->name = name;
p_entry->value = value;
}
unsigned get_count() const {return data.get_count();}
void swap(unsigned idx1,unsigned idx2) {data.swap(idx1,idx2);}
cfg_tagz_list_t(const char * name) : cfg_var(name)
{
reset();
}
void format_display(unsigned n,string_base & out) const
{
out = get_name(n);
//out += " : ";
out += "\t";
out += get_value(n);
}
};
static cfg_tagz_list_t cfg_tagz_list(---some GUID should go here, I know----);