,std::istream&        is
,std::istream&
    std::vector<double> particular_values        (std::vector<double> const& values        ,std::istream&        is        ,int                  // nominal_length        ,int                  min_age        ,int                  max_age        ,unsigned char        table_type        ,int                  max_select_age        ,int                  select_period        ,int                  age        ,int                  length        )    {        std::vector<double> v;        switch(table_type)          {          case 'A':            {            v = std::vector<double>                (values.begin() + age - min_age                ,values.begin() + age - min_age + length                );            }            break;          case 'D':            {            // TODO ?? Interpret duration as index 0; what does SOA software do?            v = std::vector<double>                (values.begin()                ,values.begin() + length                );            }            break;          case 'S':            {            int k =                    std::max(0, age - max_select_age)                +   std::min(max_select_age, age - min_age) * (1 + select_period)                ;            v.resize(length);            for(int j = 0; j < length; ++j, ++k)                {                v[j] = values[k];                if(j + age < max_select_age + select_period && select_period <= j)                    {                    k += select_period;                    }                }            }            break;          default:            {            fatal_error()                << "Table type '"                << table_type                << "' not recognized: must be one of 'A', 'D', or 'S'."                << LMI_FLUSH                ;            }          }        return v;    }