stream: use indexing operator for pointer arithmetics

This commit is contained in:
Simon Rozman 2024-10-22 17:25:54 +02:00
parent 4477706f06
commit 0ae7fb6c7c

View File

@ -3557,7 +3557,7 @@ namespace stdex
#endif #endif
size_t available = m_size - m_offset; size_t available = m_size - m_offset;
if (length <= available) { if (length <= available) {
memcpy(data, m_data + m_offset, length); memcpy(data, &m_data[m_offset], length);
m_offset += length; m_offset += length;
m_state = state_t::ok; m_state = state_t::ok;
return length; return length;
@ -3566,7 +3566,7 @@ namespace stdex
m_state = state_t::eof; m_state = state_t::eof;
return 0; return 0;
} }
memcpy(data, m_data + m_offset, available); memcpy(data, &m_data[m_offset], available);
m_offset += available; m_offset += available;
m_state = state_t::ok; m_state = state_t::ok;
return available; return available;
@ -3598,7 +3598,7 @@ namespace stdex
} }
size_t end_offset = m_offset + sizeof(T); size_t end_offset = m_offset + sizeof(T);
if (end_offset <= m_size) { if (end_offset <= m_size) {
data = LE2HE(*reinterpret_cast<T*>(m_data + m_offset)); data = LE2HE(*reinterpret_cast<T*>(&m_data[m_offset]));
m_offset = end_offset; m_offset = end_offset;
#if !CHECK_STREAM_STATE #if !CHECK_STREAM_STATE
m_state = state_t::ok; m_state = state_t::ok;
@ -3638,10 +3638,10 @@ namespace stdex
} }
size_t end_offset = m_offset + sizeof(uint32_t); size_t end_offset = m_offset + sizeof(uint32_t);
if (end_offset <= m_size) { if (end_offset <= m_size) {
uint32_t num_chars = LE2HE(*reinterpret_cast<uint32_t*>(m_data + m_offset)); uint32_t num_chars = LE2HE(*reinterpret_cast<uint32_t*>(&m_data[m_offset]));
m_offset = end_offset; m_offset = end_offset;
end_offset = stdex::add(m_offset, stdex::mul(num_chars, sizeof(T))); end_offset = stdex::add(m_offset, stdex::mul(num_chars, sizeof(T)));
T* start = reinterpret_cast<T*>(m_data + m_offset); T* start = reinterpret_cast<T*>(&m_data[m_offset]);
if (end_offset <= m_size) { if (end_offset <= m_size) {
data.assign(start, start + num_chars); data.assign(start, start + num_chars);
m_offset = end_offset; m_offset = end_offset;
@ -3651,7 +3651,7 @@ namespace stdex
return *this; return *this;
} }
if (end_offset <= m_size) if (end_offset <= m_size)
data.assign(start, reinterpret_cast<T*>(m_data + m_size)); data.assign(start, reinterpret_cast<T*>(&m_data[m_size]));
} }
m_offset = m_size; m_offset = m_size;
m_state = state_t::eof; m_state = state_t::eof;
@ -3671,7 +3671,7 @@ namespace stdex
if (!ok()) _Unlikely_ if (!ok()) _Unlikely_
return 0; return 0;
} }
memcpy(m_data + m_offset, data, length); memcpy(&m_data[m_offset], data, length);
m_offset = end_offset; m_offset = end_offset;
if (m_offset > m_size) if (m_offset > m_size)
m_size = m_offset; m_size = m_offset;
@ -3693,7 +3693,7 @@ namespace stdex
if (!ok()) _Unlikely_ if (!ok()) _Unlikely_
return; return;
} }
memset(m_data + m_offset, byte, amount); memset(&m_data[m_offset], byte, amount);
m_offset = end_offset; m_offset = end_offset;
if (m_offset > m_size) if (m_offset > m_size)
m_size = m_offset; m_size = m_offset;
@ -3728,7 +3728,7 @@ namespace stdex
if (!ok()) _Unlikely_ if (!ok()) _Unlikely_
return *this; return *this;
} }
(*reinterpret_cast<T*>(m_data + m_offset)) = HE2LE(data); (*reinterpret_cast<T*>(&m_data[m_offset])) = HE2LE(data);
m_offset = end_offset; m_offset = end_offset;
if (m_offset > m_size) if (m_offset > m_size)
m_size = m_offset; m_size = m_offset;
@ -3771,7 +3771,7 @@ namespace stdex
if (!ok()) _Unlikely_ if (!ok()) _Unlikely_
return *this; return *this;
} }
auto p = m_data + m_offset; auto p = &m_data[m_offset];
*reinterpret_cast<uint32_t*>(p) = HE2LE((uint32_t)num_chars); *reinterpret_cast<uint32_t*>(p) = HE2LE((uint32_t)num_chars);
memcpy(p + sizeof(uint32_t), data, size_chars); memcpy(p + sizeof(uint32_t), data, size_chars);
m_offset = end_offset; m_offset = end_offset;
@ -3816,7 +3816,7 @@ namespace stdex
if (!ok()) _Unlikely_ if (!ok()) _Unlikely_
return *this; return *this;
} }
auto p = m_data + m_offset; auto p = &m_data[m_offset];
*reinterpret_cast<uint32_t*>(p) = HE2LE((uint32_t)num_chars); *reinterpret_cast<uint32_t*>(p) = HE2LE((uint32_t)num_chars);
memcpy(p + sizeof(uint32_t), data.data(), size_chars); memcpy(p + sizeof(uint32_t), data.data(), size_chars);
m_offset = end_offset; m_offset = end_offset;
@ -3847,7 +3847,7 @@ namespace stdex
if (!ok()) _Unlikely_ if (!ok()) _Unlikely_
return 0; return 0;
while (to_write) { while (to_write) {
num_read = stream.read(m_data + dst_offset, to_write); num_read = stream.read(&m_data[dst_offset], to_write);
/*dst_size =*/ dst_offset += num_read; /*dst_size =*/ dst_offset += num_read;
num_copied += num_read; num_copied += num_read;
to_write -= num_read; to_write -= num_read;
@ -3866,7 +3866,7 @@ namespace stdex
reserve(dst_size); reserve(dst_size);
if (!ok()) _Unlikely_ if (!ok()) _Unlikely_
break; break;
num_read = stream.read(m_data + dst_offset, block_size); num_read = stream.read(&m_data[dst_offset], block_size);
dst_size = dst_offset += num_read; dst_size = dst_offset += num_read;
num_copied += num_read; num_copied += num_read;
to_write -= num_read; to_write -= num_read;
@ -3979,7 +3979,7 @@ namespace stdex
m_atime = m_mtime = time_point::now(); m_atime = m_mtime = time_point::now();
#endif #endif
stdex_assert(offset + sizeof(T) < m_size); stdex_assert(offset + sizeof(T) < m_size);
(*reinterpret_cast<T*>(m_data + offset)) = HE2LE(data); (*reinterpret_cast<T*>(&m_data[offset])) = HE2LE(data);
} }
public: public:
@ -4010,7 +4010,7 @@ namespace stdex
void get(_In_ fpos_t offset, _Out_ T & data) void get(_In_ fpos_t offset, _Out_ T & data)
{ {
stdex_assert(offset + sizeof(T) < m_size); stdex_assert(offset + sizeof(T) < m_size);
data = LE2HE(*(T*)(m_data + offset)); data = LE2HE(*(T*)(&m_data[offset]));
#if SET_FILE_OP_TIMES #if SET_FILE_OP_TIMES
m_atime = time_point::now(); m_atime = time_point::now();
#endif #endif