blob: 7b6784c456594d3b2c858d8eba97292cd1f74ce0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "Portfolio.hpp"
#include <sstream>
namespace testobject {
const char* Portfolio::_secIds[] = {"SUN", "IBM", "YHOO", "GOOG", "MSFT",
"AOL", "APPL", "ORCL", "SAP", "DELL"};
Portfolio::Portfolio(int32_t i, uint32_t size,
std::shared_ptr<CacheableStringArray> nm)
: _names(nm) {
_ID = i;
_pkid = CacheableString::create(std::to_string(i));
_status = (i % 2 == 0) ? "active" : "inactive";
_type = CacheableString::create("_type" + std::to_string(i % 3));
int numSecIds = sizeof(_secIds) / sizeof(char*);
_position1 = std::make_shared<Position>(_secIds[Position::cnt % numSecIds],
Position::cnt * 1000);
if (i % 2 != 0) {
_position2 = std::make_shared<Position>(_secIds[Position::cnt % numSecIds],
Position::cnt * 1000);
} else {
_position2 = nullptr;
}
_positions = CacheableHashMap::create();
_positions->emplace(
CacheableString::create(_secIds[Position::cnt % numSecIds]), _position1);
_newVal = new uint8_t[size + 1];
memset(_newVal, 'B', size);
_newVal[size] = '\0';
_newValSize = size;
_creationDate = CacheableDate::create(time(nullptr));
_arrayNull = nullptr;
_arrayZeroSize = nullptr;
}
Portfolio::~Portfolio() noexcept {
if (_newVal) {
delete[] _newVal;
_newVal = nullptr;
}
}
void Portfolio::toData(DataOutput& output) const {
output.writeInt(_ID);
output.writeObject(_pkid);
output.writeObject(_position1);
output.writeObject(_position2);
output.writeObject(_positions);
output.writeObject(_type);
output.writeUTF(_status);
output.writeObject(_names);
output.writeBytes(_newVal, _newValSize + 1);
output.writeObject(_creationDate);
output.writeBytes(_arrayNull, 0);
output.writeBytes(_arrayZeroSize, 0);
}
void Portfolio::fromData(DataInput& input) {
_ID = input.readInt32();
_pkid = std::dynamic_pointer_cast<CacheableString>(input.readObject());
_position1 = std::dynamic_pointer_cast<Position>(input.readObject());
_position2 = std::dynamic_pointer_cast<Position>(input.readObject());
_positions = std::dynamic_pointer_cast<CacheableHashMap>(input.readObject());
_type = std::dynamic_pointer_cast<CacheableString>(input.readObject());
_status = input.readUTF();
_names = std::dynamic_pointer_cast<CacheableStringArray>(input.readObject());
input.readBytes(&_newVal, &_newValSize);
_creationDate = std::dynamic_pointer_cast<CacheableDate>(input.readObject());
int tmp = 0;
input.readBytes(&_arrayNull, &tmp);
input.readBytes(&_arrayZeroSize, &tmp);
}
std::string Portfolio::toString() const {
std::stringstream result;
auto suffix = "\n ";
result << "PortfolioObject: [" << suffix;
result << "ID = " << _ID << suffix;
result << " status=" << _status << suffix;
result << " type=" << (_type ? _type->toString() : "NULL") << suffix;
result << " pkid=" << (_pkid ? _pkid->toString() : "NULL") << suffix;
result << " creation Date="
<< (_creationDate ? _creationDate->toString() : "NULL") << suffix;
result << "P1: " << (_position1 ? _position1->toString() : "NULL") << suffix;
result << "P2: " << (_position2 ? _position2->toString() : "NULL") << "\n";
result << "]";
return result.str();
}
} // namespace testobject