示例#1
0
unsigned long Serialization::unserialize(const std::vector<char> &buf, Transformable &tr_data, unsigned long start_loc)
{
	// delete all existing items
	tr_data.clear();
	unsigned long names_arg_sz;
	unsigned long n_rec;
	unsigned long bytes_read;
	size_t i_start = 0;
	// get size of names record
	i_start = start_loc;
	w_memcpy_s(&names_arg_sz, sizeof(names_arg_sz), buf.data()+i_start, sizeof(names_arg_sz));
	i_start += sizeof(names_arg_sz);
	unique_ptr<char[]> names_buf(new char[names_arg_sz]);
	w_memcpy_s(names_buf.get(), sizeof(char)*names_arg_sz,  buf.data()+i_start, sizeof(char)*names_arg_sz);
	i_start += sizeof(char)*names_arg_sz;
	w_memcpy_s(&n_rec, sizeof(n_rec),  buf.data()+i_start, sizeof(n_rec));
	i_start += sizeof(n_rec);
	// build transformable data set
	double *value_ptr = (double *) ( buf.data()+i_start);
	vector<string> names_vec;
	tokenize(strip_cp(string(names_buf.get(), names_arg_sz)), names_vec);
	assert(names_vec.size() == n_rec);
	for (unsigned long i=0; i< n_rec; ++i)
	{
		tr_data.insert(names_vec[i], *(value_ptr+i));
	}
	bytes_read = i_start + n_rec * sizeof(double);
	return bytes_read;
}
示例#2
0
void TranFixed::reverse(Transformable &data)
{
	for (map<string,double>::iterator b=items.begin(), e=items.end(); b!=e; ++b)
	{
		data.insert(b->first, b->second);
	}
}
示例#3
0
void TranFixed::d2_to_d1(Transformable &del_data, Transformable &data)
{
	for (map<string, double>::iterator b = items.begin(), e = items.end(); b != e; ++b)
	{
		del_data.insert(b->first, 0.0);
	}
	reverse(data);
}
示例#4
0
void TranTied::reverse(Transformable &data)
{
	string const *base_name;
	double *factor;
	Transformable::iterator base_iter;
	for (map<string, pair_string_double>::iterator b=items.begin(), e=items.end();
		b!=e; ++b)
	{
		base_name = &(b->second.first);
		factor = &(b->second.second);
		base_iter = data.find(*base_name);
		if (base_iter != data.end())
		{
			data.insert(b->first, (*base_iter).second * (*factor));
		}
	}
}
示例#5
0
unsigned long Serialization::unserialize(const vector<char> &ser_data, Transformable &items, const vector<string> &names_vec, unsigned long start_loc)
{
	unsigned long total_bytes_read = 0;
	size_t vec_size = (ser_data.size() - start_loc) / sizeof(double);
	assert(vec_size >= names_vec.size());

	items.clear();
	double *value = 0;
	size_t iloc = start_loc;
	size_t n_read = 0;
	size_t n_val = names_vec.size();
	for (n_read=0; n_read<n_val; ++n_read)
	{
		value = (double*)&ser_data[iloc];
		items.insert(names_vec[n_read], *value);
		iloc += sizeof(double);
	}
	total_bytes_read = n_read * sizeof(double);
	return total_bytes_read;
}
示例#6
0
void read_data_file(const string &filename, Transformable &data)
{
	ifstream fin;
	fin.open(filename);
	string line;
	string name;
	double value;
	data.clear();
	while (getline(fin, line))
	{
		vector<string> tokens;
		pest_utils::strip_ip(line);
		if (!line.empty() && line[0] != '#')
		{
			pest_utils::tokenize(line, tokens);
			name = pest_utils::upper_cp(tokens[0]);
			pest_utils::convert_ip(tokens[1], value);
			data.insert(name, value);
		}
	}
	fin.close();
}