нужно создать циклический буфер, в который можно было бы класть блоки данных (например по 5 байт) и
чтобы можно было бы обращаться к контейнеру как к блоку памяти.
То есть чтоб данные лежали как в векторе.
Можно ли это сделать это с помощью boost::circular_buffer ?
З.Ы. Если нет, то есть ли какой другой подходящий контейнер ?
Здравствуйте, gpepsi, Вы писали:
G>нужно создать циклический буфер, в который можно было бы класть блоки данных (например по 5 байт) и G>чтобы можно было бы обращаться к контейнеру как к блоку памяти.
Если буффер круговой то "как к блоку" нельзя никак(особенно на концах).
Как к блоку можно к элементам буффера(например если они сами вектора). И boost — да поможет.
G>>нужно создать циклический буфер, в который можно было бы класть блоки данных (например по 5 байт) и G>>чтобы можно было бы обращаться к контейнеру как к блоку памяти.
_>Если буффер круговой то "как к блоку" нельзя никак(особенно на концах).
Если элементом буфера будет "блок", а не байт, то почему нет? Ограничение — размер блока должен быть постоянным.
_>Как к блоку можно к элементам буффера(например если они сами вектора). И boost — да поможет.
Буст удобнее, согласен. Надо только проверить, не будет ли проблем с выравниванием.
Здравствуйте, TheBeard, Вы писали:
G>>>нужно создать циклический буфер, в который можно было бы класть блоки данных (например по 5 байт) и G>>>чтобы можно было бы обращаться к контейнеру как к блоку памяти.
_>>Если буффер круговой то "как к блоку" нельзя никак(особенно на концах).
TB>Если элементом буфера будет "блок", а не байт, то почему нет? Ограничение — размер блока должен быть постоянным.
так что — это реально ?
Только не понятно как
_>>Как к блоку можно к элементам буффера(например если они сами вектора). И boost — да поможет.
TB>Буст удобнее, согласен. Надо только проверить, не будет ли проблем с выравниванием.
Здравствуйте, gpepsi, Вы писали:
TB>>Если элементом буфера будет "блок", а не байт, то почему нет? Ограничение — размер блока должен быть постоянным.
G>так что — это реально ? G>Только не понятно как
Здравствуйте, Ytz, Вы писали:
Ytz>Здравствуйте, gpepsi, Вы писали:
TB>>>Если элементом буфера будет "блок", а не байт, то почему нет? Ограничение — размер блока должен быть постоянным.
G>>так что — это реально ? G>>Только не понятно как
Ytz>
Ytz>boost::ptr_circular_buffer<std::vector>
Ytz>
это для объектов. Но блоки будут созданы вектором на куче, а не в литом блоке памяти.
Здравствуйте, gpepsi, Вы писали:
G>Здравствуйте, Ytz, Вы писали:
Ytz>>Здравствуйте, gpepsi, Вы писали:
TB>>>>Если элементом буфера будет "блок", а не байт, то почему нет? Ограничение — размер блока должен быть постоянным.
G>>>так что — это реально ? G>>>Только не понятно как
Здравствуйте, gpepsi, Вы писали:
G>Здравствуйте, Ytz, Вы писали:
Ytz>>Не могу представить для чего тебе это надо, но на тебе "литой" блок:
G>пакеты приходят фрагментированные. в конце crc. копятся пакеты и разом проверяется crc
И для чего здесь как ты выражаешься "литой" блок нужен?
Здравствуйте, gpepsi, Вы писали:
G>Здравствуйте, Ytz, Вы писали:
Ytz>>И для чего здесь как ты выражаешься "литой" блок нужен? G>чтоб зная длину пакета отдать его сразу на подсчет crc
Здравствуйте, Ytz, Вы писали:
Ytz>Здравствуйте, gpepsi, Вы писали:
G>>Здравствуйте, Ytz, Вы писали:
Ytz>>>И для чего здесь как ты выражаешься "литой" блок нужен? G>>чтоб зная длину пакета отдать его сразу на подсчет crc
Ytz>Для чего здесь circular buffer?
для синхронизации начала пакета. я могу начать принимать фрагментированный пакет не сначала.
приходит пакет. добавляется к конец. считается crc, если не сходится — удаляется сначала.
если сошлось — удаляются все накопленные пакеты.
Здравствуйте, gpepsi, Вы писали:
G>Здравствуйте, Ytz, Вы писали:
Ytz>>Здравствуйте, gpepsi, Вы писали:
G>>>Здравствуйте, Ytz, Вы писали:
Ytz>>>>И для чего здесь как ты выражаешься "литой" блок нужен? G>>>чтоб зная длину пакета отдать его сразу на подсчет crc
Ytz>>Для чего здесь circular buffer?
G>для синхронизации начала пакета. я могу начать принимать фрагментированный пакет не сначала. G>приходит пакет. добавляется к конец. считается crc, если не сходится — удаляется сначала. G>если сошлось — удаляются все накопленные пакеты.
G>где-то так ....