Files
UnrealEngineUWP/Engine/Source/Programs/UnrealHeaderTool/Private/UHTMakefile/TokenArchiveProxy.cpp
Ben Marsh 20bf0eb6a1 Updating copyright notices to 2017 (copying from //Tasks/UE4/Dev-Copyright-2017).
#rb none
#lockdown Nick.Penwarden

[CL 3226823 by Ben Marsh in Main branch]
2016-12-08 08:52:44 -05:00

153 lines
3.6 KiB
C++

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#include "TokenArchiveProxy.h"
#include "UnrealHeaderTool.h"
#include "UHTMakefile.h"
#include "ParserHelper.h"
/* See UHTMakefile.h for overview how makefiles work. */
FTokenArchiveProxy::FTokenArchiveProxy(const FUHTMakefile& UHTMakefile, const FToken* Token)
: FPropertyBaseArchiveProxy(UHTMakefile, Token)
{
TokenType = Token->TokenType;
TokenName = FNameArchiveProxy(UHTMakefile, Token->TokenName);
StartPos = Token->StartPos;
StartLine = Token->StartLine;
FMemory::Memcpy(Identifier, Token->Identifier, sizeof(TCHAR) * NAME_SIZE);
TokenPropertyIndex = UHTMakefile.GetPropertyIndex(Token->TokenProperty);
switch (Token->Type)
{
case CPT_Byte:
Byte = Token->Byte;
break;
case CPT_Int:
Int = Token->Int;
break;
case CPT_Int64:
Int64 = Token->Int64;
break;
case CPT_Bool:
NativeBool = Token->NativeBool;
break;
case CPT_Float:
Float = Token->Float;
break;
case CPT_Double:
Double = Token->Double;
break;
case CPT_Name:
FMemory::Memcpy(NameBytes, Token->NameBytes, sizeof(FName));
break;
case CPT_String:
FMemory::Memcpy(String, Token->String, sizeof(TCHAR) * MAX_STRING_CONST_SIZE);
break;
default:
break;
}
}
void FTokenArchiveProxy::AddReferencedNames(const FToken* Token, FUHTMakefile& UHTMakefile)
{
FPropertyBaseArchiveProxy::AddReferencedNames(Token, UHTMakefile);
UHTMakefile.AddName(Token->TokenName);
}
FToken* FTokenArchiveProxy::CreateToken() const
{
FToken* Token = new FToken(Type);
PostConstruct(Token);
return Token;
}
void FTokenArchiveProxy::PostConstruct(FToken* Token) const
{
FPropertyBaseArchiveProxy::PostConstruct(Token);
Token->TokenType = TokenType;
Token->StartPos = StartPos;
Token->StartLine = StartLine;
FMemory::Memcpy(Token->Identifier, Identifier, sizeof(TCHAR) * NAME_SIZE);
switch (Type)
{
case CPT_Byte:
Token->Byte = Byte;
break;
case CPT_Int:
Token->Int = Int;
break;
case CPT_Int64:
Token->Int64 = Int64;
break;
case CPT_Bool:
Token->NativeBool = NativeBool;
break;
case CPT_Float:
Token->Float = Float;
break;
case CPT_Double:
Token->Double = Double;
break;
case CPT_Name:
FMemory::Memcpy(Token->NameBytes, NameBytes, sizeof(FName));
break;
case CPT_String:
FMemory::Memcpy(Token->String, String, sizeof(TCHAR) * MAX_STRING_CONST_SIZE);
break;
default:
break;
}
}
void FTokenArchiveProxy::Resolve(FToken* Token, const FUHTMakefile& UHTMakefile) const
{
FPropertyBaseArchiveProxy::Resolve(Token, UHTMakefile);
Token->TokenName = TokenName.CreateName(UHTMakefile);
Token->TokenProperty = UHTMakefile.GetPropertyByIndex(TokenPropertyIndex);
}
FArchive& operator<<(FArchive& Ar, FTokenArchiveProxy& TokenArchiveProxy)
{
Ar << static_cast<FPropertyBaseArchiveProxy&>(TokenArchiveProxy);
Ar << TokenArchiveProxy.TokenType;
Ar << TokenArchiveProxy.TokenName;
Ar << TokenArchiveProxy.StartPos;
Ar << TokenArchiveProxy.StartLine;
Ar.Serialize(TokenArchiveProxy.Identifier, sizeof(TokenArchiveProxy.Identifier));
Ar << TokenArchiveProxy.TokenPropertyIndex;
switch (TokenArchiveProxy.Type)
{
case CPT_Byte:
Ar << TokenArchiveProxy.Byte;
break;
case CPT_Int:
Ar << TokenArchiveProxy.Int;
break;
case CPT_Int64:
Ar << TokenArchiveProxy.Int64;
break;
case CPT_Bool:
Ar << TokenArchiveProxy.NativeBool;
break;
case CPT_Float:
Ar << TokenArchiveProxy.Float;
break;
case CPT_Double:
Ar << TokenArchiveProxy.Double;
break;
case CPT_Name:
Ar.Serialize(TokenArchiveProxy.NameBytes, sizeof(TokenArchiveProxy.NameBytes));
break;
case CPT_String:
Ar.Serialize(TokenArchiveProxy.String, sizeof(TokenArchiveProxy.String));
break;
default:
break;
}
return Ar;
}