switch looping over vectors to use iterators

This commit is contained in:
Vern Paxson 2021-11-18 08:58:04 -08:00
parent 6f82c1610e
commit ffbbacd3b1

View file

@ -57,13 +57,10 @@ template <class T>
void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<ListValPtr>& ivec, int offset, void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<ListValPtr>& ivec, int offset,
ValElemVec& init_vals) const ValElemVec& init_vals) const
{ {
auto n = init_vals.size();
auto i = 0U;
auto l = make_intrusive<ListVal>(TYPE_ANY); auto l = make_intrusive<ListVal>(TYPE_ANY);
while ( i < n ) for ( auto& iv : init_vals )
l->Append(im->ConstVals(init_vals[i++])); l->Append(im->ConstVals(iv));
ivec[offset] = l; ivec[offset] = l;
} }
@ -72,15 +69,15 @@ template <class T>
void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<VectorValPtr>& ivec, int offset, void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<VectorValPtr>& ivec, int offset,
ValElemVec& init_vals) const ValElemVec& init_vals) const
{ {
auto n = init_vals.size(); auto iv_it = init_vals.begin();
auto i = 0U; auto iv_end = init_vals.end();
auto t = init_vals[i++]; auto t = *(iv_it++);
auto vt = cast_intrusive<VectorType>(im->Types(t)); auto vt = cast_intrusive<VectorType>(im->Types(t));
auto vv = make_intrusive<VectorVal>(vt); auto vv = make_intrusive<VectorVal>(vt);
while ( i < n ) while ( iv_it != iv_end )
vv->Append(im->ConstVals(init_vals[i++])); vv->Append(im->ConstVals(*(iv_it++)));
ivec[offset] = vv; ivec[offset] = vv;
} }
@ -89,19 +86,20 @@ template <class T>
void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<RecordValPtr>& ivec, int offset, void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<RecordValPtr>& ivec, int offset,
ValElemVec& init_vals) const ValElemVec& init_vals) const
{ {
auto n = init_vals.size(); auto iv_it = init_vals.begin();
auto i = 0U; auto iv_end = init_vals.end();
auto t = init_vals[i++]; auto t = *(iv_it++);
auto rt = cast_intrusive<RecordType>(im->Types(t)); auto rt = cast_intrusive<RecordType>(im->Types(t));
auto rv = make_intrusive<RecordVal>(rt); auto rv = make_intrusive<RecordVal>(rt);
while ( i < n ) auto field = 0;
while ( iv_it != iv_end )
{ {
auto v = init_vals[i]; auto v = *(iv_it++);
if ( v >= 0 ) if ( v >= 0 )
rv->Assign(i - 1, im->ConstVals(v)); rv->Assign(field, im->ConstVals(v));
++i; ++field;
} }
ivec[offset] = rv; ivec[offset] = rv;
@ -111,17 +109,17 @@ template <class T>
void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<TableValPtr>& ivec, int offset, void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<TableValPtr>& ivec, int offset,
ValElemVec& init_vals) const ValElemVec& init_vals) const
{ {
auto n = init_vals.size(); auto iv_it = init_vals.begin();
auto i = 0U; auto iv_end = init_vals.end();
auto t = init_vals[i++]; auto t = *(iv_it++);
auto tt = cast_intrusive<TableType>(im->Types(t)); auto tt = cast_intrusive<TableType>(im->Types(t));
auto tv = make_intrusive<TableVal>(tt); auto tv = make_intrusive<TableVal>(tt);
while ( i < n ) while ( iv_it != iv_end )
{ {
auto index = im->ConstVals(init_vals[i++]); auto index = im->ConstVals(*(iv_it++));
auto v = init_vals[i++]; auto v = *(iv_it++);
auto value = v >= 0 ? im->ConstVals(v) : nullptr; auto value = v >= 0 ? im->ConstVals(v) : nullptr;
tv->Assign(index, value); tv->Assign(index, value);
} }
@ -133,11 +131,9 @@ template <class T>
void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<FileValPtr>& ivec, int offset, void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<FileValPtr>& ivec, int offset,
ValElemVec& init_vals) const ValElemVec& init_vals) const
{ {
auto n = init_vals.size(); // Note, in the following we use element 1, not 0, because we
auto i = 0U; // don't need the "type" value in element 0.
auto t = init_vals[i++]; // not used auto fn = im->Strings(init_vals[1]);
auto fn = im->Strings(init_vals[i++]);
auto fv = make_intrusive<FileVal>(make_intrusive<File>(fn, "w")); auto fv = make_intrusive<FileVal>(make_intrusive<File>(fn, "w"));
ivec[offset] = fv; ivec[offset] = fv;
@ -147,16 +143,15 @@ template <class T>
void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<FuncValPtr>& ivec, int offset, void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<FuncValPtr>& ivec, int offset,
ValElemVec& init_vals) const ValElemVec& init_vals) const
{ {
auto n = init_vals.size(); auto iv_it = init_vals.begin();
auto i = 0U; auto iv_end = init_vals.end();
auto t = init_vals[i++]; auto t = *(iv_it++);
auto fn = im->Strings(*(iv_it++));
auto fn = im->Strings(init_vals[i++]);
std::vector<p_hash_type> hashes; std::vector<p_hash_type> hashes;
while ( i < n ) while ( iv_it != iv_end )
hashes.push_back(im->Hashes(init_vals[i++])); hashes.push_back(im->Hashes(*(iv_it++)));
ivec[offset] = lookup_func__CPP(fn, hashes, im->Types(t)); ivec[offset] = lookup_func__CPP(fn, hashes, im->Types(t));
} }
@ -211,12 +206,10 @@ template <class T>
void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<AttributesPtr>& ivec, int offset, void CPP_IndexedInits<T>::Generate(InitsManager* im, std::vector<AttributesPtr>& ivec, int offset,
ValElemVec& init_vals) const ValElemVec& init_vals) const
{ {
auto n = init_vals.size();
auto i = 0U;
std::vector<AttrPtr> a_list; std::vector<AttrPtr> a_list;
while ( i < n )
a_list.emplace_back(im->Attrs(init_vals[i++])); for ( auto& iv : init_vals )
a_list.emplace_back(im->Attrs(iv));
ivec[offset] = make_intrusive<Attributes>(a_list, nullptr, false, false); ivec[offset] = make_intrusive<Attributes>(a_list, nullptr, false, false);
} }
@ -333,18 +326,18 @@ void CPP_TypeInits::Generate(InitsManager* im, vector<TypePtr>& ivec, int offset
TypePtr CPP_TypeInits::BuildEnumType(InitsManager* im, ValElemVec& init_vals) const TypePtr CPP_TypeInits::BuildEnumType(InitsManager* im, ValElemVec& init_vals) const
{ {
auto name = im->Strings(init_vals[1]); auto iv_it = init_vals.begin();
auto iv_end = init_vals.end();
auto name = im->Strings(*++iv_it); // skip element [0]
auto et = get_enum_type__CPP(name); auto et = get_enum_type__CPP(name);
if ( et->Names().empty() ) if ( et->Names().empty() )
{ {
auto n = init_vals.size(); ++iv_it;
auto i = 2U; while ( iv_it != iv_end )
while ( i < n )
{ {
auto e_name = im->Strings(init_vals[i++]); auto e_name = im->Strings(*(iv_it++));
auto e_val = init_vals[i++]; auto e_val = *(iv_it++);
et->AddNameInternal(e_name, e_val); et->AddNameInternal(e_name, e_val);
} }
} }
@ -374,11 +367,13 @@ TypePtr CPP_TypeInits::BuildTypeList(InitsManager* im, ValElemVec& init_vals, in
{ {
const auto& tl = cast_intrusive<TypeList>(inits_vec[offset]); const auto& tl = cast_intrusive<TypeList>(inits_vec[offset]);
auto n = init_vals.size(); auto iv_it = init_vals.begin();
auto i = 1U; auto iv_end = init_vals.end();
while ( i < n ) ++iv_it;
tl->Append(im->Types(init_vals[i++]));
while ( iv_it != iv_end )
tl->Append(im->Types(*(iv_it++)));
return tl; return tl;
} }