79 int iter_bytes_16 = 0;
82#if defined __SSE2__ || _M_IX86_FP == 2
83 iter_bytes_16 = (packet_size/16)*16;
85 if ( iter_bytes_16 > 0)
89 __m128i* wrd_ptr = (__m128i *)(
void *)
source;
90 __m128i* wrd_end = (__m128i *)(
void *) (
source + iter_bytes_16);
91 __m128i* dst_ptr = (__m128i *)(
void *) dest;
96 __m128i xmm1 = _mm_loadu_si128(wrd_ptr);
97 __m128i xmm2 = _mm_loadu_si128(dst_ptr);
99 xmm1 = _mm_xor_si128(xmm1, xmm2);
100 _mm_storeu_si128(dst_ptr, xmm1);
104 }
while (wrd_ptr < wrd_end);
108 if ( iter_bytes_16 < packet_size )
110 char *mark_source =
source + iter_bytes_16;
111 char *mark_dest = dest + iter_bytes_16;
113 iter_bytes_4 = ((packet_size - iter_bytes_16)/4)*4;
115 for (
int i = 0; i < (packet_size - iter_bytes_16)/4; i++)
117 int *s = ((
int*)(
void *) mark_source) + i;
118 int *d = ((
int*)(
void *) mark_dest) + i;
122 mark_source += iter_bytes_4;
123 mark_dest += iter_bytes_4;
125 iter_bytes_1 = packet_size - iter_bytes_16 - iter_bytes_4;
127 for (
int i = 0; i < iter_bytes_1; i++)
129 *(mark_dest + i) ^= *(mark_source+i);
248 std::map<int, int> valid_data )
275 for ( i = 0; i <
param_k; ++i )
309 map <int, int> merged_intervals;
310 map<int,int>::iterator map_it;
312 if ( valid_data.size() != 0 )
314 for ( map_it = valid_data.begin(); map_it != valid_data.end(); )
316 int start = map_it->first;
317 int length = map_it->second;
319 length += map_it->second;
320 merged_intervals.insert ( pair<int, int> (
start, length) );
341 map<int, Node>::iterator it;
342 if ( merged_intervals.size() != 0)
344 it = graph.
nodes.find(0);
346 assert(variable_node_end_it != graph.
nodes.end());
347 while (it != variable_node_end_it) {
348 (*it).second.setDone(
false);
349 int node_offset = (*it).second.getDataPtr() - received;
352 map_it = merged_intervals.begin();
356 while ( (map_it->first <= node_offset) && map_it != merged_intervals.end() )
365 if ( found && (map_it->first + map_it->second) >=
366 (node_offset + p_size) )
368 (*it).second.setDone(
true);
380 if ( !it->second.isDone())
382 memset(it->second.getDataPtr(), 0, p_size);
408 it = graph.
nodes.find(0);
410 if (!(*it).second.isDone())
418 if ( undecoded == 0 )
422 unsigned char bytes[4];
425 memcpy(&(fs.bytes), received, 4);
426 *frame_size = fs.number;
448 map<int, Node>::iterator it_c;
457 while ( it_c != graph->
nodes.end() ) {
459 for(vector<int>::iterator j = it_c->second.neighbours.begin();
460 j != it_c->second.neighbours.end(); ++j) {
461 const auto it_v = graph->
nodes.find(*j);
462 if ( !it_v->second.isDone() )
468 if ( vec.size() == 1)
470 int r_index = vec.front();
476 auto &node = graph->
nodes.at(r_index);
478 char *r_data = node.getDataPtr();
481 for(vector<int>::iterator j = it_c->second.neighbours.begin();
482 j != it_c->second.neighbours.end(); ++j)
487 char *g_data = (graph->
nodes.find(*j))->second.getDataPtr();