-
Notifications
You must be signed in to change notification settings - Fork 80
Expand file tree
/
Copy pathField.cpp
More file actions
158 lines (152 loc) · 6.4 KB
/
Copy pathField.cpp
File metadata and controls
158 lines (152 loc) · 6.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
// Copyright (c) 2009, Object Computing, Inc.
// All rights reserved.
// See the file license.txt for licensing information.
#include "StdAfx.h"
#include "Field.h"
#include "FieldSet.h"
#include "Sequence.h"
#include "Decimal.h"
#include "StlDotNet.h"
#include "Exceptions.h"
#include "ManagedHelpers.h"
using namespace QuickFASTDotNet::Messages;
using namespace System;
using namespace System::Runtime::InteropServices;
using namespace System::Text;
using namespace cli;
namespace QuickFASTDotNet{
namespace Messages{
QuickFAST::Messages::FieldCPtr cast_field(QuickFASTDotNet::Messages::Field^ field)
{
typedef QuickFAST::Messages::FieldCPtr FTFieldCPtr;
FTFieldCPtr retVal;
switch(field->FieldType)
{
case FieldType::AsciString:
retVal = FTFieldCPtr(QuickFAST::Messages::FieldAscii::create(StlDotNet::string_cast<std::string>(safe_cast<AsciStringField^>(field)->Value)));
break;
case FieldType::ByteVector:
{
ByteVectorField^ bvField = safe_cast<ByteVectorField^>(field);
int bufferLen = bvField->Value->Length;
QuickFAST::uchar* buffer = new QuickFAST::uchar[bufferLen];
Marshal::Copy(bvField->Value, 0, System::IntPtr(buffer), bufferLen);
retVal = FTFieldCPtr(QuickFAST::Messages::FieldByteVector::create(buffer, bufferLen));
}
break;
case FieldType::Decimal:
{
DecimalField^ dField = safe_cast<DecimalField^>(field);
retVal = FTFieldCPtr(QuickFAST::Messages::FieldDecimal::create(QuickFAST::Decimal(dField->Value.Mantissa, dField->Value.Exponent)));
}
break;
case FieldType::Group:
{
GroupField^ gField = safe_cast<GroupField^>(field);
retVal = FTFieldCPtr(QuickFAST::Messages::FieldGroup::create(QuickFAST::Messages::GroupCPtr(new QuickFAST::Messages::Group(gField->Value->FieldSetRef))));
//retVal = FTFieldCPtr(new QuickFAST::Messages::FieldGroup(safe_cast<GroupField^>(field)->Value->FieldSetPtr.GetBoostPtr()));
}
break;
case FieldType::Int32:
retVal = FTFieldCPtr(QuickFAST::Messages::FieldInt32::create(safe_cast<Int32Field^>(field)->Value));
break;
case FieldType::Int64:
retVal = FTFieldCPtr(QuickFAST::Messages::FieldInt64::create(safe_cast<Int64Field^>(field)->Value));
break;
case FieldType::UInt32:
retVal = FTFieldCPtr(QuickFAST::Messages::FieldUInt32::create(safe_cast<UInt32Field^>(field)->Value));
break;
case FieldType::UInt64:
retVal = FTFieldCPtr(QuickFAST::Messages::FieldUInt64::create(safe_cast<UInt64Field^>(field)->Value));
break;
case FieldType::Sequence:
retVal = FTFieldCPtr(QuickFAST::Messages::FieldSequence::create(QuickFAST::Messages::SequenceCPtr(new QuickFAST::Messages::Sequence(safe_cast<SequenceField^>(field)->Value->Ref))));
//retVal = FTFieldCPtr(new QuickFAST::Messages::FieldSequence(safe_cast<SequenceField^>(field)->Value->BoostPtr));
break;
case FieldType::UnicodeString:
retVal = FTFieldCPtr(QuickFAST::Messages::FieldUtf8::create(StlDotNet::string_cast<std::string>(safe_cast<UnicodeStringField^>(field)->Value)));
break;
case FieldType::Int8:
retVal = FTFieldCPtr(QuickFAST::Messages::FieldInt8::create(safe_cast<Int8Field^>(field)->Value));
break;
case FieldType::UInt8:
retVal = FTFieldCPtr(QuickFAST::Messages::FieldUInt8::create(safe_cast<UInt8Field^>(field)->Value));
break;
case FieldType::Int16:
retVal = FTFieldCPtr(QuickFAST::Messages::FieldInt16::create(safe_cast<Int16Field^>(field)->Value));
break;
case FieldType::UInt16:
retVal = FTFieldCPtr(QuickFAST::Messages::FieldUInt16::create(safe_cast<UInt16Field^>(field)->Value));
break;
case FieldType::Bitmap:
{
BitmapField^ bmField = safe_cast<BitmapField^>(field);
int bufferLen = bmField->Value->Length;
QuickFAST::uchar* buffer = new QuickFAST::uchar[bufferLen];
Marshal::Copy(bmField->Value, 0, System::IntPtr(buffer), bufferLen);
retVal = FTFieldCPtr(QuickFAST::Messages::FieldBitMap::create(buffer, bufferLen));
}
break;
default:
throw gcnew UnexpectedError();
;
};
return retVal;
}
QuickFASTDotNet::Messages::Field^ cast_field(QuickFAST::Messages::FieldCPtr field)
{
Field^ retVal;
switch(field->getType())
{
case QuickFAST::Messages::Field::INT32:
retVal = gcnew Int32Field(field->toInt32());
break;
case QuickFAST::Messages::Field::UINT32:
retVal = gcnew UInt32Field(field->toUInt32());
break;
case QuickFAST::Messages::Field::INT64:
retVal = gcnew Int64Field(field->toInt64());
break;
case QuickFAST::Messages::Field::UINT64:
retVal = gcnew UInt64Field(field->toUInt64());
break;
case QuickFAST::Messages::Field::DECIMAL:
retVal = gcnew DecimalField(Decimal(field->toDecimal()));
break;
case QuickFAST::Messages::Field::ASCII:
retVal = gcnew AsciStringField(StlDotNet::string_cast(field->toAscii()));
break;
case QuickFAST::Messages::Field::UTF8:
retVal = gcnew UnicodeStringField(StlDotNet::string_cast(field->toUtf8()));
break;
case QuickFAST::Messages::Field::BYTEVECTOR:
retVal = gcnew ByteVectorField(Encoding::ASCII->GetBytes(StlDotNet::string_cast(field->toByteVector())));
break;
case QuickFAST::Messages::Field::SEQUENCE:
retVal = gcnew SequenceField(gcnew Sequence(*field->toSequence()));
break;
case QuickFAST::Messages::Field::GROUP:
retVal = gcnew GroupField(gcnew FieldSet(*field->toGroup()));
break;
case QuickFAST::Messages::Field::INT8:
retVal = gcnew Int8Field(field->toInt8());
break;
case QuickFAST::Messages::Field::UINT8:
retVal = gcnew UInt8Field(field->toUInt8());
break;
case QuickFAST::Messages::Field::INT16:
retVal = gcnew Int16Field(field->toInt16());
break;
case QuickFAST::Messages::Field::UINT16:
retVal = gcnew UInt16Field(field->toUInt16());
break;
case QuickFAST::Messages::Field::BITMAP:
retVal = gcnew UInt16Field(field->toUInt16());
break;
default:
throw gcnew UnexpectedError();
};
return retVal;
}
}
}