bool supervised_data_mem_reader::read(
		void * input_neurons,
		float * output_neurons)
	{
		if (!entry_available())
			return false;

		if (input_neurons)
		{
			const void * input_src;
			switch (type_code)
			{
			case neuron_data_type::type_byte:
				input_src = &(*input_data_list_byte[entry_read_count]->begin());
				break;
			case neuron_data_type::type_float:
				input_src = &(*input_data_list_float[entry_read_count]->begin());
				break;
			}
			memcpy(input_neurons, input_src, input_neuron_count * neuron_data_type::get_input_size(type_code));
		}

		if (output_neurons)
		{
			const float * output_src = &(*output_data_list[entry_read_count]->begin());
			memcpy(output_neurons, output_src, input_neuron_count * sizeof(float));
		}

		entry_read_count++;

		return true;
	}
	bool supervised_limited_entry_count_data_reader::raw_read(std::vector<unsigned char>& all_elems)
	{
		if (!entry_available())
			return false;

		++entry_read_count;
		return original_reader->raw_read(all_elems);
	}
	bool supervised_limited_entry_count_data_reader::read(
		void * input_elems,
		float * output_elems)
	{
		if (!entry_available())
			return false;

		++entry_read_count;
		return original_reader->read(input_elems, output_elems);
	}