assign.cpp

来自「在手机操作系统symbina上使用的一个脚本扩展语言的代码实现,可以参考用于自己」· C++ 代码 · 共 64 行

CPP
64
字号
// ASSIGN.CPP
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#include <e32std.h>
#include <opcodes.h>
#include <opldb.h>
#include "oplutil.h"

void OpCode::AssignInt(CStack& aStack, COplRuntime& aRuntime, CFrame* /*aFramePtr*/)
	{
	TInt16 integer=aStack.PopInt16();
	if (aStack.PopInt16()==KLeftSideField)
		{
		aRuntime.DbManager()->Assign(integer);
		return;
		}
	OplUtil::PutWord(&(aStack.PopRefInt16()),integer);
	}
	
void OpCode::AssignLong(CStack& aStack, COplRuntime& aRuntime, CFrame* /*aFramePtr*/)
	{
	TInt32 longInt=aStack.PopInt32();
	if (aStack.PopInt16()==KLeftSideField)
		{
		aRuntime.DbManager()->Assign(longInt);
		return;
		}		
	OplUtil::PutLong(&(aStack.PopRefInt32()),longInt);
	}

	
void OpCode::AssignFloat(CStack& aStack, COplRuntime& aRuntime, CFrame* /*aFramePtr*/)
	{
	TReal64 real=aStack.PopReal64();
	if (aStack.PopInt16()==KLeftSideField)
		{
		aRuntime.DbManager()->Assign(real);
		return;
		}		
	OplUtil::PutFloat(&aStack.PopRefReal64(),real);
	}
	
void OpCode::AssignString(CStack& aStack, COplRuntime& aRuntime, CFrame* /*aFramePtr*/)
	{
	TPtrC src(aStack.PopString());
	if (aStack.PopInt16()==KLeftSideField)
		{
		aRuntime.DbManager()->Assign(src);
		return;
		}
	TUint8* trg=(TUint8*)aStack.PopRefString();
	TUint16 len=(TUint16)src.Length();
	__ASSERT_ISALIGNED(trg);
	__ASSERT_DEBUG(len<=KOplMaxStrLen,AlignPanic(KErrOplAlignBadLength));
	if (len>aStack.PopInt16())
		User::Leave(KOplErrStrTooLong);
	*trg++=(TUint8)len;
	trg++; //skip lbc2
	Mem::Copy((TUint8*)trg,(TUint8*)src.Ptr(),len<<1);
	}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?