+ if(data.empty())
+ min_index = max_index = i;
+ else
+ {
+ min_index = min(min_index, i);
+ max_index = max(max_index, i);
+ }
+
+ if((data_type==UNSIGNED_BYTE || data_type==UNSIGNED_SHORT) && max_index>0xFFFE)
+ set_data_type(UNSIGNED_INT);
+ else if(data_type==UNSIGNED_BYTE && max_index>0xFE)
+ set_data_type(UNSIGNED_SHORT);
+
+ if(data_type==UNSIGNED_SHORT)
+ ::append<unsigned short>(data, i);
+ else if(data_type==UNSIGNED_INT)
+ ::append<unsigned>(data, i);
+ else
+ data.push_back(i);
+}
+
+unsigned Batch::get_index_size() const
+{
+ if(data_type==UNSIGNED_SHORT)
+ return sizeof(unsigned short);
+ else if(data_type==UNSIGNED_INT)
+ return sizeof(unsigned);
+ return sizeof(unsigned char);
+}
+
+unsigned Batch::get_index(unsigned i) const
+{
+ if(data_type==UNSIGNED_SHORT)
+ return *(unsigned short *)&data[i*sizeof(unsigned short)];
+ else if(data_type==UNSIGNED_INT)
+ return *(unsigned *)&data[i*sizeof(unsigned )];
+ else
+ return data[i];