Exemplo n.º 1
0
bool CContainerTypeInfo::Equals(TConstObjectPtr object1, TConstObjectPtr object2,
                                ESerialRecursionMode how) const
{
    if (how == eShallowChildless) {
        return true;
    }
    TTypeInfo elementType = GetElementType();
    CConstIterator i1, i2;
    if ( InitIterator(i1, object1) ) {
        if ( !InitIterator(i2, object2) )
            return false;
        if ( !elementType->Equals(GetElementPtr(i1),
                                  GetElementPtr(i2), how) )
            return false;
        while ( NextElement(i1) ) {
            if ( !NextElement(i2) )
                return false;
            if ( !elementType->Equals(GetElementPtr(i1),
                                      GetElementPtr(i2), how) )
                return false;
        }
        return !NextElement(i2);
    }
    else {
        return !InitIterator(i2, object2);
    }
}
Exemplo n.º 2
0
void CContainerTypeInfo::Assign(TObjectPtr dst, TConstObjectPtr src,
                                ESerialRecursionMode how) const
{
    if (how == eShallowChildless) {
        SetDefault(dst); // clear destination container
        return;
    }
    CIterator idst;
    CConstIterator isrc;
    bool old_element = InitIterator(idst,dst);
    if ( InitIterator(isrc, src) ) {
        TTypeInfo elementType = GetElementType();
        do {
            TConstObjectPtr elementPtr = GetElementPtr(isrc);
            if (old_element) {
                elementType->Assign(GetElementPtr(idst), elementPtr, how);
                old_element = NextElement(idst);
            } else {
                AddElement(dst, elementPtr, how);
            }
        } while ( NextElement(isrc) );
    }
    if (old_element) {
        EraseAllElements(idst);
    }
}
Exemplo n.º 3
0
float StaticArray::ReadFloat(const char *address, intptr_t offset)
{
    const char *el_ptr = GetElementPtr(address, offset);
    if (_staticMgr)
    {
        return _staticMgr->ReadFloat(el_ptr, offset % _elemScriptSize);
    }
    else if (_dynamicMgr)
    {
        return _dynamicMgr->ReadFloat(el_ptr, offset % _elemScriptSize);
    }
    return *(float*)(el_ptr + offset % _elemScriptSize);
}
Exemplo n.º 4
0
void StaticArray::Read(const char *address, intptr_t offset, void *dest, int size)
{
    const char *el_ptr = GetElementPtr(address, offset);
    if (_staticMgr)
    {
        return _staticMgr->Read(el_ptr, offset % _elemScriptSize, dest, size);
    }
    else if (_dynamicMgr)
    {
        return _dynamicMgr->Read(el_ptr, offset % _elemScriptSize, dest, size);
    }
    memcpy(dest, el_ptr + offset % _elemScriptSize, size);
}
Exemplo n.º 5
0
void StaticArray::WriteFloat(const char *address, intptr_t offset, float val)
{
    const char *el_ptr = GetElementPtr(address, offset);
    if (_staticMgr)
    {
        return _staticMgr->WriteFloat(el_ptr, offset % _elemScriptSize, val);
    }
    else if (_dynamicMgr)
    {
        return _dynamicMgr->WriteFloat(el_ptr, offset % _elemScriptSize, val);
    }
    else
    {
        *(float*)(el_ptr + offset % _elemScriptSize) = val;
    }
}
Exemplo n.º 6
0
void StaticArray::Write(const char *address, intptr_t offset, void *src, int size)
{
    const char *el_ptr = GetElementPtr(address, offset);
    if (_staticMgr)
    {
        return _staticMgr->Write(el_ptr, offset % _elemScriptSize, src, size);
    }
    else if (_dynamicMgr)
    {
        return _dynamicMgr->Write(el_ptr, offset % _elemScriptSize, src, size);
    }
    else
    {
        memcpy((void*)(el_ptr + offset % _elemScriptSize), src, size);
    }
}
Exemplo n.º 7
0
bool Dictionary::RemoveFromDict(KeyPair *element)
{
	KeyPair * thisElement = GetElementPtr(*element);

	if (thisElement)
	{
		if (thisElement == this->FirstElement)
		{
			if ((*thisElement).NextItem)
			{
				this->FirstElement = (*thisElement).NextItem;
			}
			else
			{
				this->FirstElement = nullptr;
				this->LastElement = nullptr;
			}
		}

		//pass references
		if ((*thisElement).NextItem)
			(*thisElement).NextItem->PreviousItem = (*thisElement).PreviousItem;
		if ((*thisElement).PreviousItem)
			(*thisElement).PreviousItem->NextItem = (*thisElement).NextItem;

		//erase from existance
		//delete element;
		(*thisElement).Key = "";
		(*thisElement).NextItem = nullptr;
		(*thisElement).PreviousItem = nullptr;
		(*thisElement).Value = NULL;
		return false;
	}
	else
	{
		return true;
	}
	
}
Exemplo n.º 8
0
const char* StaticArray::GetFieldPtr(const char *address, intptr_t offset)
{
    return GetElementPtr(address, offset);
}