можно ли std::vector создать как wrapper над имеющимся blob
От: IROV..  
Дата: 24.01.08 15:14
Оценка:
есть

void * blob = new char [ size ];

могули я сконфигурировать так std::vector что бы
_Myfirst = blob;
_Mylast = blob + size;
_Myend = blob + size;

как мне кажется это не реально, из за политики алокаторов
я не волшебник, я только учусь!
Re: можно ли std::vector создать как wrapper над имеющимся b
От: Bell Россия  
Дата: 24.01.08 15:17
Оценка:
Здравствуйте, IROV.., Вы писали:

IRO>есть


IRO>void * blob = new char [ size ];


IRO>могули я сконфигурировать так std::vector что бы

IRO>_Myfirst = blob;
IRO>_Mylast = blob + size;
IRO>_Myend = blob + size;

IRO>как мне кажется это не реально, из за политики алокаторов

Да, нереально.
А void * blob нельзя переделать в vector<char> blob(size);?
Любите книгу — источник знаний (с) М.Горький
Re[2]: можно ли std::vector создать как wrapper над имеющимс
От: IROV..  
Дата: 24.01.08 15:20
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, IROV.., Вы писали:


IRO>>есть


IRO>>void * blob = new char [ size ];


IRO>>могули я сконфигурировать так std::vector что бы

IRO>>_Myfirst = blob;
IRO>>_Mylast = blob + size;
IRO>>_Myend = blob + size;

IRO>>как мне кажется это не реально, из за политики алокаторов

B>Да, нереально.
B>А void * blob нельзя переделать в vector<char> blob(size);?
данные приходят по сети

хотелось бы их обернуть в std::vector а не хранить

void * m_buffer;
size_t m_size;

я не волшебник, я только учусь!
Re[3]: можно ли std::vector создать как wrapper над имеющимс
От: NikeByNike Россия  
Дата: 24.01.08 15:59
Оценка: 2 (1)
Здравствуйте, IROV.., Вы писали:

Ну почему, можно. Сделать хитрый аллокатор выполняюющий следующие условия:
1. в конструктор аллокатора передаются сишный буфер.
2. при первом выделении памяти аллокатор смотрит — равен ли запрашиваемый размер — размеру буфера. Если не равен — выделяем память обычными средствами, после чего по любому обнуляем размер буфера (чтобы любое последующее выделение памяти происходило штатными средствами).
3. vector<char, smart_allocator> vec(buffer, buffer + size, smart_allocator(buffer, size))
Нужно разобрать угил.
Re: можно ли std::vector создать как wrapper над имеющимся b
От: Roman Odaisky Украина  
Дата: 24.01.08 16:00
Оценка: 7 (3) +1
Здравствуйте, IROV.., Вы писали:

IRO>void * blob = new char [ size ];


Во-первых, если код выглядит похоже на это:
size_t const size = getSize();
void* const blob = new unsigned char[size];
somePlainOldCFunction(whatever, blob, size);

то лучше использовать std::vector с самого начала. Если же кто-то чрезмерно услужливый сам выделяет память и уже дает тебе void *, то сделай из него пару итераторов и будет тебе счастье:
size_t size;
void* const blob = overservicingFunction(whatever, &size);
unsigned char* const begin = reinterpret_cast<unsigned char *>(blob);
unsigned char* const end = begin + size;
boost::iterator_range<unsigned char> data(begin, end);

if(std::find(data.begin(), data.end(), 42) == data.end())
{
    whatAPity();
}

Если же тебе нужно использовать, например, resize, то нужно с самого начала использовать std::vector.
До последнего не верил в пирамиду Лебедева.
Re[4]: можно ли std::vector создать как wrapper над имеющимс
От: IROV..  
Дата: 24.01.08 16:20
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Здравствуйте, IROV.., Вы писали:


NBN>Ну почему, можно. Сделать хитрый аллокатор выполняюющий следующие условия:

NBN>1. в конструктор аллокатора передаются сишный буфер.
NBN>2. при первом выделении памяти аллокатор смотрит — равен ли запрашиваемый размер — размеру буфера. Если не равен — выделяем память обычными средствами, после чего по любому обнуляем размер буфера (чтобы любое последующее выделение памяти происходило штатными средствами).
NBN>3. vector<char, smart_allocator> vec(buffer, buffer + size, smart_allocator(buffer, size))

идея понравилась!
я не волшебник, я только учусь!
Re: можно ли std::vector создать как wrapper над имеющимся b
От: MasterZiv СССР  
Дата: 24.01.08 17:09
Оценка:
IROV.. wrote:

Можно сделат наоборот. Выделить в векторе память нужного объема
и эту память ( &my_vector[0] ) использовать для хранения BLOB-а.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: можно ли std::vector создать как wrapper над имеющимс
От: landerhigh Пират  
Дата: 24.01.08 22:51
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Если же тебе нужно использовать, например, resize, то нужно с самого начала использовать std::vector.

Топикстартеру — именно так всегда и делаю когда речь заходит о данных, получаемых откуда-то.
www.blinnov.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.