示例#1
0
bool CBuffPacket::WriteStream(const char* szData, uint32 u4Len)
{
	//ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock);
	if(u4Len + m_u4PacketLen >= MAX_PACKET_SIZE)
	{
		OUR_DEBUG((LM_ERROR, "[CBuffPacket::WriteStream] nSize = [%d] m_u4PacketLen = [%d] is more than MAX_PACKET_SIZE.\n", u4Len, m_u4PacketLen));
		sprintf_safe(m_szError, MAX_BUFF_500, "[CBuffPacket::WriteStream] nSize = [%d] m_u4PacketLen = [%d] is more than MAX_PACKET_SIZE.\n", u4Len, m_u4PacketLen);
		return false;
	}

	if(m_u4WritePtr + u4Len > m_u4PacketLen)
	{
		if(false == AddBuff(u4Len))
		{
			OUR_DEBUG((LM_ERROR, "[CBuffPacket::WriteStream] nSize = [%d] m_u4PacketLen = [%d] AddBuff false.\n", u4Len, m_u4PacketLen));
			return false;
		}

		//写入文本内容
		ACE_OS::memcpy(WritePtr(), szData, u4Len);
		WritePtr(u4Len);
		return true;
	}
	else
	{
		//写入文本内容
		ACE_OS::memcpy(WritePtr(), szData, u4Len);
		WritePtr(u4Len);
		return true;
	}
}
示例#2
0
文件: BR_Update.cpp 项目: Breeder/sws
void GetStartupSearchOptions (bool* official, bool* beta, unsigned int* lastTime)
{
	char tmp[256];
	GetPrivateProfileString("SWS", STARTUP_VERSION_KEY, "", tmp, sizeof(tmp), get_ini_file());

	LineParser lp(false);
	lp.parse(tmp);
	WritePtr(official, (lp.getnumtokens() > 0) ? !!lp.gettoken_int(0) : true);
	WritePtr(beta,     (lp.getnumtokens() > 1) ? !!lp.gettoken_int(1) : false);
	WritePtr(lastTime, lp.gettoken_uint(2));
}
示例#3
0
double GetMidiSourceLengthPPQ (MediaItem_Take* take, bool accountPlayrateIfIgnoringProjTempo, bool* isMidiSource /*=NULL*/)
{
	bool   isMidi = false;
	double length = 0;
	if (take && IsMidi(take))
	{
		MediaItem* item = GetMediaItemTake_Item(take);
		double itemStart    = GetMediaItemInfo_Value(item, "D_POSITION");
		double takeOffset   = GetMediaItemTakeInfo_Value(take, "D_STARTOFFS");
		double sourceLength = GetMediaItemTake_Source(take)->GetLength();
		double startPPQ = MIDI_GetPPQPosFromProjTime(take, itemStart - takeOffset);
		double endPPQ   = MIDI_GetPPQPosFromProjTime(take, itemStart - takeOffset + sourceLength);

		isMidi = true;
		length = endPPQ - startPPQ;

		if (accountPlayrateIfIgnoringProjTempo)
		{
			bool ignoreProjTempo;
			if (GetMidiTakeTempoInfo(take, &ignoreProjTempo, NULL, NULL, NULL) && ignoreProjTempo)
				length /= GetMediaItemTakeInfo_Value(take, "D_PLAYRATE");
		}
	}

	WritePtr(isMidiSource, isMidi);
	return length;
}
示例#4
0
void CDead6800::Write(u32 addr,u8 data)
{
if(addr >= 0x10000)
	{
	message("write invalid memory address '$%X', cycle %ld, PC = $%04X\n",addr,Cycle,PC);
	addr &= 0xFFFF;
	}
if(WritePages[addr >> ADDR_SHIFT])
	WritePages[addr >> ADDR_SHIFT][addr & ADDR_MASK] = data;
WritePtr(User,addr,data);
}
示例#5
0
bool IsMidi (MediaItem_Take* take, bool* inProject /*= NULL*/)
{
	if (PCM_source* source = GetMediaItemTake_Source(take))
	{
		const char* type = source->GetType();
		if (!strcmp(type, "MIDI") || !strcmp(type, "MIDIPOOL"))
		{
			if (inProject)
			{
				const char* fileName = source->GetFileName();
				*inProject = (fileName && !strcmp(fileName, ""));
			}
			return true;
		}
	}
	WritePtr(inProject, false);
	return false;
}
示例#6
0
文件: wol_Util.cpp 项目: Lazzle/sws
int GetEnvelopeOverlapState(TrackEnvelope* envelope, int* laneCount, int* envCount)
{
	bool lane, visible;
	visible = EnvVis(envelope, &lane);
	if (!visible || lane)
		return -1;

	int visEnvCount = CountVisibleTrackEnvelopesInTrackLane(GetEnvParent(envelope));
	int overlapMinHeight = *(int*)GetConfigVar("env_ol_minh");
	if (overlapMinHeight < 0)
		return (WritePtr(laneCount, visEnvCount), WritePtr(envCount, visEnvCount), 0);

	if (GetTrackEnvHeight(envelope, NULL, false) < overlapMinHeight)
		return (WritePtr(laneCount, 1), WritePtr(envCount, visEnvCount), (visEnvCount > 1) ? 2 : 1);

	return (WritePtr(laneCount, (visEnvCount > 1) ? visEnvCount : 1), WritePtr(envCount, (visEnvCount > 1) ? visEnvCount : 1), (visEnvCount > 1) ? 4 : 3);
}
示例#7
0
void CBuffPacket::WriteBuffPtr(uint32 u4Size)
{
	//ACE_Guard<ACE_Recursive_Thread_Mutex> WGuard(m_ThreadLock);
	WritePtr(u4Size);
}
示例#8
0
文件: VM.cpp 项目: Valtis/ToyLanguage
void VM::Execute()
{
  while (m_running)
  {
    ByteCode code = m_functions[m_frames.back().FunctionID()].GetByteCode(m_frames.back().NextInstruction());
    switch (code.GetInstruction())
    {
    case Instruction::NOP:
      break;
    case Instruction::STOP:
      m_running = false;
      break;
    case Instruction::ADD:
      Add(m_frames.back());
      break;
    case Instruction::SUB:
      Sub(m_frames.back());
      break;
    case Instruction::MUL:
      Mul(m_frames.back());
      break;
    case Instruction::DIV:
      Div(m_frames.back());
      break;


    case Instruction::PRINT:
      Print(m_frames.back());
      break;
    case Instruction::PRINTLINE:
      PrintLine(m_frames.back());
      break;
    case Instruction::COMPARE:
      Compare(m_frames.back());
      break;
    case Instruction::COMPARE_NULL:
      CompareNull(m_frames.back());
      break;
    case Instruction::JUMP_IF_TRUE:
      JumpIfTrue(m_frames.back(), code.GetObject());
      break;

    case Instruction::JUMP_IF_FALSE:
      JumpIfFalse(m_frames.back(), code.GetObject());
      break;
    case Instruction::JUMP:
      Jump(m_frames.back(), code.GetObject()); 
        break;

    case Instruction::CALLFUNCTION:
      CallFunction(this, m_frames.back());
      break;
    case  Instruction::RETURN:
      Return(this, m_frames.back());
      break;

    case Instruction::PUSH:
      Push(m_frames.back(), code.GetObject());
      break;

    case Instruction::POP:
      Pop(m_frames.back());
      break;
    case Instruction::LOAD_VARIABLE:
      LoadVariable(m_frames.back(), code.GetObject());
      break;
    case Instruction::STORE_VARIABLE:
      StoreVariable(m_frames.back(), code.GetObject());
      break;

    case Instruction::ALLOCATE_PTR:
      AllocatePtr(m_frames.back(), m_memory_manager);
      break;

    case Instruction::WRITE_PTR:
      WritePtr(m_frames.back(), m_memory_manager);
      break;

    case Instruction::READ_PTR:
      ReadPtr(m_frames.back(), m_memory_manager);
      break;

    case Instruction::SWAP:
      Swap(m_frames.back());
      break;

    default:
      throw UndefinedInstructionError(std::string("Instruction ") + std::to_string(static_cast<int>(code.GetInstruction())) + " was not recognized by the virtual machine");
    }
  }
}
示例#9
0
double GetOriginalPpqPos (MediaItem_Take* take, double ppqPos, bool* loopedItem, double* posVisInsertStartPpq, double* posVisInsertEndPpq)
{
	double returnPos = 0;
	MediaItem* item = GetMediaItemTake_Item(take);
	if (!take || !item || !IsMidi(take, NULL))
	{
		WritePtr(loopedItem,          false);
		WritePtr(posVisInsertStartPpq, 0.0);
		WritePtr(posVisInsertEndPpq,   0.0);
	}
	else
	{
		double itemStart = GetMediaItemInfo_Value(item, "D_POSITION");
		double itemEnd   = itemStart + GetMediaItemInfo_Value(item, "D_LENGTH");

		if (GetMediaItemInfo_Value(item, "B_LOOPSRC") == 0)
		{
			WritePtr(loopedItem,           false);
			WritePtr(posVisInsertStartPpq, MIDI_GetPPQPosFromProjTime(take, itemStart));
			WritePtr(posVisInsertEndPpq,   MIDI_GetPPQPosFromProjTime(take, itemEnd));
			returnPos = ppqPos;
		}
		else
		{
			WritePtr(loopedItem, true);

			double visibleItemStartPpq = MIDI_GetPPQPosFromProjTime(take, itemStart);
			double visibleItemEndPpq   = MIDI_GetPPQPosFromProjTime(take, itemEnd);
			double sourceLenPpq = GetMidiSourceLengthPPQ(take, true);

			// Deduct take offset to get correct current loop iteration
			double itemStartPpq = MIDI_GetPPQPosFromProjTime(take, itemStart - GetMediaItemTakeInfo_Value(take, "D_STARTOFFS"));
			int currentLoop;
			int loopCount = GetLoopCount(take, MIDI_GetProjTimeFromPPQPos(take, ppqPos), &currentLoop);

			returnPos = (ppqPos >= visibleItemStartPpq) ? (ppqPos - (currentLoop * sourceLenPpq)) : ppqPos;

			if (ppqPos > visibleItemEndPpq)                            // position after item end
			{
				WritePtr(posVisInsertStartPpq, 0.0);
				WritePtr(posVisInsertEndPpq,   0.0);
			}
			else if (ppqPos < visibleItemStartPpq || currentLoop == 0) // position in first loop iteration or before it
			{
				WritePtr(posVisInsertStartPpq, visibleItemStartPpq);
				WritePtr(posVisInsertEndPpq,   (visibleItemEndPpq - visibleItemStartPpq >= sourceLenPpq) ? itemStartPpq + sourceLenPpq : visibleItemEndPpq);
			}
			else if (currentLoop == loopCount)                        // position in last loop iteration
			{
				WritePtr(posVisInsertStartPpq, itemStartPpq);
				WritePtr(posVisInsertEndPpq,   itemStartPpq + (visibleItemEndPpq - (currentLoop * sourceLenPpq)));
			}
			else                                                     // position in other loop iterations
			{
				WritePtr(posVisInsertStartPpq, itemStartPpq);
				WritePtr(posVisInsertEndPpq,   itemStartPpq + sourceLenPpq);
			}
		}
	}

	return returnPos;
}