I am trying write a contract like below.
pragma solidity ^0.4.9;
/* Contract accepting ethers during 10 minutes */
contract Trading {
address receivingAccount;
uint deadline;
struct Asset {
string name;
uint price;
uint barcode;
}
struct Stock {
Asset asset;
uint count;
}
struct Vendor {
string name;
address account;
Stock[] stocks;
}
Asset[] assets;
Vendor[] vendors;
/* at initialization, setup the owner */
function Trading(address _vendor0, address _vendor1) {
// create 2 assets
assets.push(Asset("Asset0", 12, 1234));
Asset memory asset1 = Asset("Asset1", 34, 5678);
assets.push(asset1);
// create 2 vendors
Vendor memory vendor0 = Vendor("Vendor0", _vendor0, new Stock[](5));
Vendor memory vendor1 = Vendor("Vendor1", _vendor1, new Stock[](5));
// add assets to the stock of vendor0
vendor0.stocks[0] = Stock(assets[0], 2);
vendor0.stocks[1] = Stock(assets[1], 2);
vendors.push(vendor0);
// add assets to the stock of vendor1
vendor1.stocks[0] = Stock(assets[0], 1);
vendor1.stocks[1] = Stock(assets[1], 1);
// set the deadline as 10 minutes
deadline = now + 10 * 1 minutes;
}
function listAssetBarcodes() constant returns (uint[]) {
uint[] memory barcodes = new uint[](assets.length);
for (uint i=0; i<assets.length; i++) {
barcodes[i] = assets[i].barcode;
}
return barcodes;
}
modifier afterDeadline() { if (now >= deadline) _; }
/* checks if the time limit has been reached and ends the contract */
function dispose() afterDeadline {
suicide(receivingAccount);
}
}
However, when I add the statement vendors.push(vendor0);
to the constructor (as above) I am having the following compilation error from the online compiler:
Unimplemented feature (/src/libsolidity/codegen/ArrayUtils.cpp:215): Copying of type struct Trading.Stock memory[] memory to storage not yet supported.
Can anyone help me how can I use the arrays in Solidity properly? Or is there a list or vector like structure we can use or we are obligated to use arrays for the moment?