1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 1997,2008 Oracle. All rights reserved. 5 * 6 * $Id: cxx_multi.cpp,v 12.10 2008/01/08 20:58:09 bostic Exp $ 7 */ 8 9#include "db_config.h" 10 11#include "db_int.h" 12 13#include "db_cxx.h" 14 15DbMultipleIterator::DbMultipleIterator(const Dbt &dbt) 16 : data_((u_int8_t*)dbt.get_data()), 17 p_((u_int32_t*)(data_ + dbt.get_ulen() - sizeof(u_int32_t))) 18{ 19} 20 21bool DbMultipleDataIterator::next(Dbt &data) 22{ 23 if (*p_ == (u_int32_t)-1) { 24 data.set_data(0); 25 data.set_size(0); 26 p_ = 0; 27 } else { 28 data.set_data(data_ + *p_--); 29 data.set_size(*p_--); 30 if (data.get_size() == 0 && data.get_data() == data_) 31 data.set_data(0); 32 } 33 return (p_ != 0); 34} 35 36bool DbMultipleKeyDataIterator::next(Dbt &key, Dbt &data) 37{ 38 if (*p_ == (u_int32_t)-1) { 39 key.set_data(0); 40 key.set_size(0); 41 data.set_data(0); 42 data.set_size(0); 43 p_ = 0; 44 } else { 45 key.set_data(data_ + *p_--); 46 key.set_size(*p_--); 47 data.set_data(data_ + *p_--); 48 data.set_size(*p_--); 49 } 50 return (p_ != 0); 51} 52 53bool DbMultipleRecnoDataIterator::next(db_recno_t &recno, Dbt &data) 54{ 55 if (*p_ == (u_int32_t)0) { 56 recno = 0; 57 data.set_data(0); 58 data.set_size(0); 59 p_ = 0; 60 } else { 61 recno = *p_--; 62 data.set_data(data_ + *p_--); 63 data.set_size(*p_--); 64 } 65 return (p_ != 0); 66} 67