#include <vector>
#include <string>
#include <algorithm>
class BlockRepresentation
{
private:
class Block
{
public:
int id;
int fpDimensions;
int *position;
int *blockDimensions;
Block() : position(nullptr), blockDimensions(nullptr),
id(0), fpDimensions(0) {}
~Block()
{
delete [] position;
delete [] blockDimensions;
}
Block(const Block& rhs) : id(rhs.id), fpDimensions(rhs.fpDimensions),
position(new int[rhs.fpDimensions]),
blockDimensions(new int[rhs.fpDimensions])
{
std::copy(rhs.position, rhs.position + fpDimensions, position);
std::copy(rhs.blockDimensions, rhs.blockDimensions + fpDimensions,
blockDimensions);
}
Block& operator=(const Block& rhs)
{
Block temp(rhs);
std::swap(temp.position, position);
std::swap(temp.blockDimensions, blockDimensions);
std::swap(temp.id, id);
std::swap(temp.fpDimensions, fpDimensions);
return *this;
}
};
std::vector<Block> all_blocks;
public:
BlockRepresentation() {}
void AddBlock( int id, int fpDimensions, int position[], int dimensions[] );
std::string ToGPL();
};
void BlockRepresentation::AddBlock( int id, int fpDimensions, int position[], int dimensions[] )
{
Block newBlock;
newBlock.id = id;
newBlock.fpDimensions = fpDimensions;
newBlock.position = new int[fpDimensions]; // pointers in question
newBlock.blockDimensions = new int[fpDimensions]; // pointers in question
for (int i = 0; i < fpDimensions; ++i)
{
newBlock.position[i] = position[i];
newBlock.blockDimensions[i] = dimensions[i];
}
all_blocks.push_back( newBlock );
}
int main()
{
int x[] = {1,2,3,4,5};
int y[] = {2,4,6,8,10};
BlockRepresentation br;
br.AddBlock(1,5,x,y);
br.AddBlock(2,5,y,x);
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCmNsYXNzIEJsb2NrUmVwcmVzZW50YXRpb24KewogICAgcHJpdmF0ZToKICAgIGNsYXNzIEJsb2NrCiAgICB7CiAgICBwdWJsaWM6CiAgICAgICBpbnQgaWQ7CiAgICAgICBpbnQgZnBEaW1lbnNpb25zOwogICAgICAgaW50ICpwb3NpdGlvbjsgCiAgICAgICBpbnQgKmJsb2NrRGltZW5zaW9uczsgCiAgICAgICAKICAgICAgIEJsb2NrKCkgOiBwb3NpdGlvbihudWxscHRyKSwgYmxvY2tEaW1lbnNpb25zKG51bGxwdHIpLAogICAgICAgICAgICAgICAgIGlkKDApLCBmcERpbWVuc2lvbnMoMCkge30KICAgICAgIH5CbG9jaygpIAogICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIHBvc2l0aW9uOwogICAgICAgICAgZGVsZXRlIFtdIGJsb2NrRGltZW5zaW9uczsKICAgICAgIH0KCiAgICAgICBCbG9jayhjb25zdCBCbG9jayYgcmhzKSA6IGlkKHJocy5pZCksIGZwRGltZW5zaW9ucyhyaHMuZnBEaW1lbnNpb25zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uKG5ldyBpbnRbcmhzLmZwRGltZW5zaW9uc10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEaW1lbnNpb25zKG5ldyBpbnRbcmhzLmZwRGltZW5zaW9uc10pCiAgICAgICB7CiAgICAgICAgICBzdGQ6OmNvcHkocmhzLnBvc2l0aW9uLCByaHMucG9zaXRpb24gKyBmcERpbWVuc2lvbnMsIHBvc2l0aW9uKTsgICAKICAgICAgICAgIHN0ZDo6Y29weShyaHMuYmxvY2tEaW1lbnNpb25zLCByaHMuYmxvY2tEaW1lbnNpb25zICsgZnBEaW1lbnNpb25zLCAKICAgICAgICAgICAgICAgICAgICBibG9ja0RpbWVuc2lvbnMpOyAgIAogICAgICAgfQoKICAgICAgIEJsb2NrJiBvcGVyYXRvcj0oY29uc3QgQmxvY2smIHJocykKICAgICAgIHsKICAgICAgICAgIEJsb2NrIHRlbXAocmhzKTsKICAgICAgICAgIHN0ZDo6c3dhcCh0ZW1wLnBvc2l0aW9uLCBwb3NpdGlvbik7CiAgICAgICAgICBzdGQ6OnN3YXAodGVtcC5ibG9ja0RpbWVuc2lvbnMsIGJsb2NrRGltZW5zaW9ucyk7CiAgICAgICAgICBzdGQ6OnN3YXAodGVtcC5pZCwgaWQpOwogICAgICAgICAgc3RkOjpzd2FwKHRlbXAuZnBEaW1lbnNpb25zLCBmcERpbWVuc2lvbnMpOwogICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgfQogICAgfTsKICAgICAgICBzdGQ6OnZlY3RvcjxCbG9jaz4gYWxsX2Jsb2NrczsKICAgIHB1YmxpYzoKICAgICAgICBCbG9ja1JlcHJlc2VudGF0aW9uKCkge30KICAgICAgICB2b2lkIEFkZEJsb2NrKCBpbnQgaWQsIGludCBmcERpbWVuc2lvbnMsIGludCBwb3NpdGlvbltdLCBpbnQgZGltZW5zaW9uc1tdICk7CiAgICAgICAgc3RkOjpzdHJpbmcgVG9HUEwoKTsKfTsKCnZvaWQgQmxvY2tSZXByZXNlbnRhdGlvbjo6QWRkQmxvY2soIGludCBpZCwgaW50IGZwRGltZW5zaW9ucywgaW50IHBvc2l0aW9uW10sIGludCBkaW1lbnNpb25zW10gKQp7CiAgICBCbG9jayBuZXdCbG9jazsKICAgIG5ld0Jsb2NrLmlkID0gaWQ7CiAgICBuZXdCbG9jay5mcERpbWVuc2lvbnMgPSBmcERpbWVuc2lvbnM7CiAgICBuZXdCbG9jay5wb3NpdGlvbiA9IG5ldyBpbnRbZnBEaW1lbnNpb25zXTsgICAgICAgIC8vIHBvaW50ZXJzIGluIHF1ZXN0aW9uCiAgICBuZXdCbG9jay5ibG9ja0RpbWVuc2lvbnMgPSBuZXcgaW50W2ZwRGltZW5zaW9uc107IC8vIHBvaW50ZXJzIGluIHF1ZXN0aW9uCgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcERpbWVuc2lvbnM7ICsraSkKICAgIHsKICAgICAgICBuZXdCbG9jay5wb3NpdGlvbltpXSA9IHBvc2l0aW9uW2ldOwogICAgICAgIG5ld0Jsb2NrLmJsb2NrRGltZW5zaW9uc1tpXSA9IGRpbWVuc2lvbnNbaV07CiAgICB9CiAgICBhbGxfYmxvY2tzLnB1c2hfYmFjayggbmV3QmxvY2sgKTsKfQoKaW50IG1haW4oKQp7CglpbnQgeFtdICA9IHsxLDIsMyw0LDV9OwoJaW50IHlbXSA9IHsyLDQsNiw4LDEwfTsKCUJsb2NrUmVwcmVzZW50YXRpb24gYnI7Cglici5BZGRCbG9jaygxLDUseCx5KTsKCWJyLkFkZEJsb2NrKDIsNSx5LHgpOwp9