Variant NameValueTableWrapper::next() {
  if (m_pos != ArrayData::invalid_index) {
    m_pos = iter_advance(m_pos);
    return current();
  }
  return Variant(false);
}
示例#2
0
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);
}
示例#3
0
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);
}
示例#4
0
	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;
}
示例#7
0
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);
  }
}
示例#8
0
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);
}
示例#10
0
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);
}
示例#11
0
文件: main.c 项目: jrubill/2101
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;
}