bool NoPointerData::hidratate(const ByteStream& stream) { if (stream.getTamanioOcupado() >= sizeof(entero) + sizeof(real) + sizeof(caracter)) { const byte_t* data = stream.obtenerStream(); memcpy(&entero, data, sizeof(entero)); data += sizeof(entero); memcpy(&real, data, sizeof(real)); data += sizeof(real); memcpy(&caracter, data, sizeof(caracter)); return true; } else { return false; } }
size_t SharedMemoryBlock::write(const ByteStream& data) { size_t dataSize = data.getTamanioOcupado(); if (blockSize < dataSize) { throw SharedMemoryException(SharedMemoryException::write_size); } try { lock.seizeExclusiveLock(); memcpy(ptrData, &dataSize, sizeof(size_t)); memcpy(ptrData + sizeof(size_t), data.obtenerStream(), dataSize); lock.releaseLock(); } catch(const LockException &e) { throw SharedMemoryException(SharedMemoryException::write_lock); } return dataSize; }