Код: Выделить всё
class CSaver
{
private:
explicit CSaver();
public:
static inline class CSerializer Save(const class CMap &map, const CVariableNames &varName);
static inline class CSerializer Save(const CMapBlockArray &mapBlock, const CVariableNames &varName);
static inline class CSerializer Save(const class CCoordinate &place, const CVariableNames &varName);
static inline class CSerializer Save(const class CSize &size, const CVariableNames &varName);
static inline class CSerializer Save(const class CRect &rect, const CVariableNames &varName);
static inline class CSerializer Save(const signed int &value, const CVariableNames &varName);
static inline class CSerializer Save(const NSMapBlock::CMapBlockType &value, const CVariableNames &varName);
static inline class CSerializer Save(const unsigned int &value, const CVariableNames &varName);
static inline class CSerializer Save(const double &value, const CVariableNames &varName);
static inline class CSerializer Save(const long double &value, const CVariableNames &varName);
static inline class CSerializer Save(const bool &value, const CVariableNames &varName);
static inline class CSerializer Save(const class CHeroParamValue &value, const CVariableNames &varName);
static inline class CSerializer Save(const class CGoldBag &goldBag, const CVariableNames &varName);
static inline class CSerializer Save(const class CInventory &inventory, const CVariableNames &varName);
static inline class CSerializer Save(const CItems &items, const CVariableNames &varName);
static inline class CSerializer Save(const class CItem &item, const CVariableNames &varName);
static inline class CSerializer Save(const class CMeasurement &measurement, const CVariableNames &varName);
static inline class CSerializer Save(const CMeasures &measures, const CVariableNames &varName);
static inline class CSerializer Save(const class CHero &hero, const CVariableNames &varName);
static inline class CSerializer Save(const class CGame &game, const char *varName);
static inline class CSerializer Save(const class CMapBlock &mapBlock, const CVariableNames &varName);
static inline class CSerializer Save(const CBlockDatas &blockDatas, const CVariableNames &varName);
static inline class CSerializer Save(const class CBlockData &blockData, const CVariableNames &varName);
static inline class CSerializer Save(const CBuildings &buildings, const CVariableNames &varName);
static inline class CSerializer Save(const class CBuilding &building, const CVariableNames &varName);
static inline class CSerializer Save(const class CHouse &house, const CVariableNames &varName);
static inline class CSerializer Save(const class CTown &town, const CVariableNames &varName);
static inline class CSerializer Save(const class CPriceList &price, const CVariableNames &varName);
static inline class CSerializer Save(const CPriceMap &priceMap, const CVariableNames &varName);
static inline class CSerializer Save(const ::CPricePair &pricePair, const CVariableNames &varName);
static inline class CSerializer Save(const class CPriceItem &priceItem, const CVariableNames &varName);
static inline class CSerializer Save(const class CBrewer &brewer, const CVariableNames &varName);
static inline class CSerializer Save(const CReceiptMap &receiptMap, const CVariableNames &varName);
static inline class CSerializer Save(const ::CReceiptPair &receiptPair, const CVariableNames &varName);
static inline class CSerializer Save(const class CReceipt &receipt, const CVariableNames &varName);
static inline class CSerializer Save(const class CItemQuality &quality, const CVariableNames &varName);
static inline class CSerializer Save(const class CValue &value, const CVariableNames &varName);
};
CSaver::CSaver()
{
}
CSerializer CSaver::Save(const CMap &map, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CMap, varName)
<< Save(map.m_rect, m_rect)
<< Save(map.m_blocks, m_blocks)
<< CHasher::Hash(map)
<< "}";
return t;
}
CSerializer CSaver::Save(const CMapBlockArray &mapBlock, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
CMapBlocksList blocks = CMap::GetUniqueBlocks(mapBlock);
t << t.StartClassVariable(NSClassName::CMapBlockArray, varName);
for (CMapBlocksList::const_iterator it = blocks.begin(); it != blocks.end(); it++)
{
FUNC_MEASURE;
const ::CMapBlock* item = *it;
t << Save(*item, NSVariableName::CMapBlock);
}
t << CHasher::Hash(mapBlock)
<< "}";
return t;
}
CSerializer CSaver::Save(const ::CCoordinate &place, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CCoordinate, varName)
<< Save(place.x, x)
<< Save(place.y, y)
<< CHasher::Hash(place)
<< "}";
return t;
}
CSerializer CSaver::Save(const ::CSize &size, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CSize, varName)
<< Save(size.width, width)
<< Save(size.height, height)
<< CHasher::Hash(size)
<< "}";
return t;
}
CSerializer CSaver::Save(const CRect &rect, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CRect, varName)
<< Save((::CCoordinate)rect, NSVariableName::CCoordinate)
<< Save((::CSize)rect, NSVariableName::CSize)
<< CHasher::Hash(rect)
<< "}";
return t;
}
CSerializer CSaver::Save(const signed int &value, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::signed_int, varName)
<< value
<< CHasher::Hash(value)
<< "}";
return t;
}
CSerializer CSaver::Save(const NSMapBlock::CMapBlockType &value, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CMapBlockType, varName)
<< value
<< CHasher::Hash(value)
<< "}";
return t;
}
CSerializer CSaver::Save(const unsigned int &value, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::unsigned_int, varName)
<< value
<< CHasher::Hash(value)
<< "}";
return t;
}
CSerializer CSaver::Save(const double &value, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
// D("dbl saver value", value);
signed long long temp = *(signed long long*)&value;
t << t.StartClassVariable(NSClassName::_double, varName)
<< temp
<< CHasher::Hash(value)
<< "}";
return t;
}
CSerializer CSaver::Save(const long double &value, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
// D("dbl saver value", value);
const void *pvalue = &value;
const signed long long *ptemp1 = (signed long long*)pvalue;
const signed long *ptemp2 = (signed long *)(ptemp1 + 1);
signed long long temp1 = *ptemp1;
signed long temp2 = *ptemp2;
t << t.StartClassVariable(NSClassName::_long_double, varName)
<< temp1
<< temp2
<< CHasher::Hash(value)
<< "}";
return t;
}
CSerializer CSaver::Save(const bool &value, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::_bool, varName)
<< value
<< CHasher::Hash(value)
<< "}";
return t;
}
CSerializer CSaver::Save(const CHeroParamValue &value, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CHeroParamValue, varName)
<< Save(value.value, NSVariableName::value)
<< Save(value.force, force)
<< CHasher::Hash(value)
<< "}";
return t;
}
CSerializer CSaver::Save(const CGoldBag &goldBag, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CGoldBag, varName)
<< Save(goldBag.m_amount, m_amount)
<< CHasher::Hash(goldBag)
<< "}";
return t;
}
CSerializer CSaver::Save(const CInventory &inventory, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CInventory, varName)
<< Save(inventory.m_items, m_items)
<< CHasher::Hash(inventory)
<< "}";
return t;
}
CSerializer CSaver::Save(const CItems &items, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CItems, varName);
for (CItems::const_iterator it = items.begin(); it != items.end(); it++)
{
const std::shared_ptr<::CItem> item = *it;
t << Save(*item, NSVariableName::CItem);
}
t << CHasher::Hash(items)
<< "}";
return t;
}
CSerializer CSaver::Save(const ::CItem &item, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CItem, varName)
<< Save(item.m_itemID, m_itemID)
<< Save(item.m_quality, m_quality)
<< CHasher::Hash(item)
<< "}";
return t;
}
CSerializer CSaver::Save(const CMeasurement &measurement, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CMeasurement, varName)
<< Save(measurement.m_seenTiles, m_seenTiles)
<< Save(measurement.m_seenTowns, m_seenTowns)
<< Save(measurement.m_seenIngredients, m_seenIngredients)
<< Save(measurement.m_seenIngredient, m_seenIngredient)
<< Save(measurement.m_createdIngredients, m_createdIngredients)
<< Save(measurement.m_createdIngredient, m_createdIngredient)
<< Save(measurement.m_heroMoves, m_heroMoves)
<< Save(measurement.m_heroMove, m_heroMove)
<< Save(measurement.m_catchTryItems, m_catchTryItems)
<< Save(measurement.m_catchTryItem, m_catchTryItem)
<< Save(measurement.m_catchItems, m_catchItems)
<< Save(measurement.m_catchItem, m_catchItem)
<< Save(measurement.m_brewTryPotions, m_brewTryPotions)
<< Save(measurement.m_brewTryPotion, m_brewTryPotion)
<< Save(measurement.m_brewPotions, m_brewPotions)
<< Save(measurement.m_brewPotion, m_brewPotion)
<< Save(measurement.m_selledItems, m_selledItems)
<< Save(measurement.m_selledItem, m_selledItem)
<< Save(measurement.m_sellTryItems, m_sellTryItems)
<< Save(measurement.m_sellTryItem, m_sellTryItem)
<< Save(measurement.m_buyedItems, m_buyedItems)
<< Save(measurement.m_buyedItem, m_buyedItem)
<< Save(measurement.m_buyTryItems, m_buyTryItems)
<< Save(measurement.m_buyTryItem, m_buyTryItem)
<< Save(measurement.m_goldGained, m_goldGained)
<< Save(measurement.m_goldPaid, m_goldPaid)
<< CHasher::Hash(measurement)
<< "}";
return t;
}
CSerializer CSaver::Save(const CMeasures &measures, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CMeasures, varName);
for (CMeasures::const_iterator it = measures.begin(); it != measures.end(); it++)
{
const ::CMeasure item = *it;
t << Save(item, NSVariableName::CMeasure);
}
t << CHasher::Hash(measures)
<< "}";
return t;
}
CSerializer CSaver::Save(const CHero &hero, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CHero, varName)
<< Save(hero.m_place, m_place)
<< Save(hero.m_inventory, m_inventory)
<< Save(hero.m_hunting, m_hunting)
<< Save(hero.m_entomology, m_entomology)
<< Save(hero.m_herbalism, m_herbalism)
<< Save(hero.m_perception, m_perception)
<< Save(hero.m_gold, m_gold)
<< Save(hero.m_brewer, m_brewer)
<< CHasher::Hash(hero)
<< "}";
return t;
}
CSerializer CSaver::Save(const CGame &game, const char * varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CGame, varName)
<< Save(*game.m_hero, m_hero)
<< Save(*game.m_measurer, m_measurer)
<< Save(*game.m_map, m_map)
<< Save(game.m_brewer, m_brewer)
<< CHasher::Hash(game)
<< "}";
return t;
}
CSerializer CSaver::Save(const ::CMapBlock &mapBlock, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CMapBlock, varName)
<< Save(mapBlock.m_type, m_type)
<< Save(mapBlock.m_rect, m_rect)
<< Save(mapBlock.m_ID, m_ID)
<< Save(mapBlock.m_datas, m_datas)
<< CHasher::Hash(mapBlock)
<< "}";
return t;
}
CSerializer CSaver::Save(const CBlockDatas &blockDatas, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CBlockDatas, varName);
for (CBlockDatas::const_iterator it = blockDatas.begin(); it != blockDatas.end(); it++)
{
t << Save(*it, NSVariableName::CBlockData);
}
t << CHasher::Hash(blockDatas)
<< "}";
return t;
}
CSerializer CSaver::Save(const ::CBlockData &blockData, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CBlockData, varName)
<< Save(blockData.visible, visible)
<< Save(blockData.itemIDs, itemIDs)
<< Save(blockData.buildings, buildings)
<< CHasher::Hash(blockData)
<< "}";
return t;
}
CSerializer CSaver::Save(const CBuildings &buildings, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CBuildings, varName);
for (CBuildings::const_iterator it = buildings.begin(); it != buildings.end(); it++)
{
t << Save(*it, NSVariableName::CBuilding);
}
t << CHasher::Hash(buildings)
<< "}";
return t;
}
CSerializer CSaver::Save(const ::CBuilding &building, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CBuilding, varName);
if (building.house) t << Save(*building.house, house);
if (building.town) t << Save(*building.town, town);
t << CHasher::Hash(building)
<< "}";
return t;
}
CSerializer CSaver::Save(const CHouse &house, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CHouse, varName)
<< CHasher::Hash(house)
<< "}";
return t;
}
CSerializer CSaver::Save(const CTown &town, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CTown, varName)
<< Save(town.m_gold, m_gold)
<< Save(town.m_price, m_price)
<< Save(town.m_quality, m_quality)
<< CHasher::Hash(town)
<< "}";
return t;
}
CSerializer CSaver::Save(const CPriceList &price, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CPriceList, varName)
<< Save(price.m_map, m_map)
<< CHasher::Hash(price)
<< "}";
return t;
}
CSerializer CSaver::Save(const CPriceMap &priceMap, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CPriceMap, varName);
for (CPriceMap::const_iterator it = priceMap.begin(); it != priceMap.end(); it++)
{
t << Save(*it, NSVariableName::CPricePair);
}
t << CHasher::Hash(priceMap)
<< "}";
return t;
}
CSerializer CSaver::Save(const ::CPricePair &pricePair, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CPricePair, varName)
<< Save(pricePair.first, first)
<< Save(pricePair.second, second)
<< CHasher::Hash(pricePair)
<< "}";
return t;
}
CSerializer CSaver::Save(const CPriceItem &priceItem, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CPriceItem, varName)
<< Save(priceItem.sell, sell)
<< Save(priceItem.buy, buy)
<< CHasher::Hash(priceItem)
<< "}";
return t;
}
CSerializer CSaver::Save(const CBrewer &brewer, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CBrewer, varName);
// if (brewer.m_parent) t << Save(*brewer.m_parent, m_parent); //Сохранение родителя не требуется т.к. он един и при загрузки он будет установлен загрузчиком.
t << Save(brewer.m_receipts, m_receipts)
<< CHasher::Hash(brewer)
<< "}";
return t;
}
CSerializer CSaver::Save(const CReceiptMap &receiptMap, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CReceiptMap, varName);
for (CReceiptMap::const_iterator it = receiptMap.begin(); it != receiptMap.end(); it++)
{
t << Save(*it, NSVariableName::CReceiptPair);
}
t << CHasher::Hash(receiptMap)
<< "}";
return t;
}
CSerializer CSaver::Save(const ::CReceiptPair &receiptPair, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CReceiptPair, varName)
<< Save(receiptPair.first, first)
<< Save(receiptPair.second, second)
<< CHasher::Hash(receiptPair)
<< "}";
return t;
}
CSerializer CSaver::Save(const CReceipt &receipt, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CReceipt, varName)
<< Save(receipt.m_items, m_items)
<< CHasher::Hash(receipt)
<< "}";
return t;
}
CSerializer CSaver::Save(const class CItemQuality &quality, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CItemQuality, varName)
<< Save(quality.m_moon, m_moon)
<< Save(quality.m_sun, m_sun)
<< Save(quality.m_magnetics, m_magnetics)
<< Save(quality.m_hardness, m_hardness)
<< Save(quality.m_divinity, m_divinity)
<< Save(quality.m_quality, m_quality)
<< CHasher::Hash(quality)
<< "}";
return t;
}
CSerializer CSaver::Save(const class CValue &value, const CVariableNames &varName)
{
FUNC_MEASURE;
CSerializer t;
t << t.StartClassVariable(NSClassName::CValue, varName)
/* << Save(value.m_min, m_min)
<< Save(value.m_max, m_max)
<< Save(value.m_range, m_range)*/ //Max, Min, Range is constant and not changed in game
<< Save(value.m_value, m_value)
<< CHasher::Hash(value)
<< "}";
return t;
}
CGameSaver::CGameSaver()
{
}
CSerializer CGameSaver::SaveGame(const CGame &game, const char *saveName)
{
FUNC_MEASURE;
CSerializer t = CSaver::Save(game, saveName);
return t;
}