Variant NameValueTableWrapper::next() { if (m_pos != ArrayData::invalid_index) { m_pos = iter_advance(m_pos); return current(); } return Variant(false); }
Variant ArrayData::next() { // We call iter_advance() without checking if m_pos is the canonical invalid // position. This is okay, since all IterAdvance() impls handle this // correctly, but it means that EmptyArray::IterAdvance() is reachable. setPosition(iter_advance(m_pos)); return m_pos != iter_end() ? getValue(m_pos) : Variant(false); }
Variant ArrayData::next() { if (m_pos != invalid_index) { m_pos = iter_advance(m_pos); if (m_pos != invalid_index) { return getValue(m_pos); } } return Variant(false); }
ByteIter copy_to_buffer(ByteIter begin, ByteType* buffer, std::size_t size) {//用于OutputIterator,以及规避ms的std::copy对char和wchar_t的警告 //顺带还能返回个copy以后begin的位置,多好 iter_advance(begin, size, [&](int index, ByteIter& iter) { buffer[index] = *iter; }); return begin; }
Array Globals::getDefinedVars() { Array ret = Array::Create(); for (ssize_t iter = iter_begin(); iter != ArrayData::invalid_index; iter = iter_advance(iter)) { Variant k; Variant v = getByIdx(iter, k); ret.set(k, v); } return ret; }
ssize_t NameValueTableWrapper::vsize() const { // We need to iterate to find out the actual size, since // KindOfIndirect elements in the array may have been set to // KindOfUninit. ssize_t count = 0; for (ssize_t iter = iter_begin(); iter != ArrayData::invalid_index; iter = iter_advance(iter)) { ++count; } return count; }
void ArrayData::getChildren(std::vector<TypedValue *> &out) { if (isSharedMap()) { SharedMap *sm = static_cast<SharedMap *>(this); sm->getChildren(out); return; } for (ssize_t pos = iter_begin(); pos != ArrayData::invalid_index; pos = iter_advance(pos)) { TypedValue *tv = nvGetValueRef(pos); out.push_back(tv); } }
Variant ArrayData::each() { if (m_pos != iter_end()) { ArrayInit ret(4, ArrayInit::Mixed{}); Variant key(getKey(m_pos)); Variant value(getValue(m_pos)); ret.set(1, value); ret.set(s_value, value); ret.set(0, key); ret.set(s_key, key); setPosition(iter_advance(m_pos)); return ret.toVariant(); } return Variant(false); }
Variant NameValueTableWrapper::each() { if (m_pos != ArrayData::invalid_index) { ArrayInit init(4); Variant key = getKey(m_pos); Variant value = getValue(m_pos); init.set(1, value); init.set(s_value, value, true); init.set(0, key); init.set(s_key, key, true); m_pos = iter_advance(m_pos); return Array(init.create()); } return Variant(false); }
Variant ArrayData::each() { if (m_pos != invalid_index) { ArrayInit ret(4); Variant key(getKey(m_pos)); Variant value(getValue(m_pos)); ret.set(1, value); ret.set(s_value, value); ret.set(0, key); ret.set(s_key, key); m_pos = iter_advance(m_pos); return ret.toVariant(); } return Variant(false); }
int main() { list* list1 = list_create(); list* list2 = list_create(); list* list3 = list_create(); int data[] = {1, 2, 3, 4, 5}; char* strings[] = {"a", "b", "c", "d", "e", "f"}; int data_size = 5; for(int i = 0; i < data_size; i++) { list_append(list1, &data[i]); } int string_size = 6; for(int i = 0; i < string_size; i++) { list_append(list2, strings[i]); } iterator* iter1 = iter_create(list1); printf("Data List Print Test....\n"); printf("Data List: "); while(!iter_at_end(iter1)) { node* n = iter_get(iter1); int* val = n->data; printf("%d ", *val); iter_advance(iter1); } printf("\n"); printf("Removing 2nd Element From Data\n"); iter1 = iter_create(list1); iter_advance(iter1); iter_remove(iter1); printf("Data List: "); while(!iter_at_end(iter1)) { node* n = iter_get(iter1); int* val = n->data; printf("%d ", *val); iter_advance(iter1); } printf("\n"); printf("\n"); printf("String List Print Test.......\n"); iterator* iter2 = iter_create(list2); printf("Strings List: "); while(!iter_at_end(iter2)) { node* n = iter_get(iter2); char* val = n->data; printf("%s ", val); iter_advance(iter2); } printf("\n"); list_remove_last(list2); iter2 = iter_create(list2); printf("Removing Last Element from String List\n"); printf("Strings List: "); while(!iter_at_end(iter2)) { node* n = iter_get(iter2); char* val = n->data; printf("%s ", val); iter_advance(iter2); } printf("\n"); printf("\n"); printf("Done Printing\n"); return 0; }