mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-09 18:40:14 +00:00
Slowly moving through the open-cs errors Good progress in openCS Very good progress on openCS Getting closer with openCS OpenCS compiles and runs! Didn't have time to test it all though ix openMW everything compiles on windows?? Fix gcc Fix Clang
84 lines
2.3 KiB
C++
84 lines
2.3 KiB
C++
#ifndef CSM_WOLRD_REFCOLLECTION_H
|
|
#define CSM_WOLRD_REFCOLLECTION_H
|
|
|
|
#include <map>
|
|
#include <memory>
|
|
#include <string>
|
|
#include <string_view>
|
|
#include <vector>
|
|
|
|
#include <apps/opencs/model/world/universalid.hpp>
|
|
|
|
#include "collection.hpp"
|
|
#include "record.hpp"
|
|
#include "ref.hpp"
|
|
|
|
namespace ESM
|
|
{
|
|
class ESMReader;
|
|
}
|
|
|
|
namespace CSMDoc
|
|
{
|
|
class Messages;
|
|
}
|
|
|
|
namespace CSMWorld
|
|
{
|
|
struct Cell;
|
|
|
|
template <>
|
|
void Collection<CellRef, IdAccessor<CellRef>>::removeRows(int index, int count);
|
|
|
|
template <>
|
|
void Collection<CellRef, IdAccessor<CellRef>>::insertRecord(
|
|
std::unique_ptr<RecordBase> record, int index, UniversalId::Type type);
|
|
|
|
/// \brief References in cells
|
|
class RefCollection : public Collection<CellRef>
|
|
{
|
|
Collection<Cell>& mCells;
|
|
std::map<unsigned int, int> mRefIndex; // CellRef index keyed by CSMWorld::CellRef::mIdNum
|
|
|
|
int mNextId;
|
|
|
|
unsigned int extractIdNum(std::string_view id) const;
|
|
|
|
int getIntIndex(unsigned int id) const;
|
|
|
|
int searchId(unsigned int id) const;
|
|
|
|
public:
|
|
// MSVC needs the constructor for a class inheriting a template to be defined in header
|
|
RefCollection(Collection<Cell>& cells)
|
|
: mCells(cells)
|
|
, mNextId(0)
|
|
{
|
|
}
|
|
|
|
void load(ESM::ESMReader& reader, int cellIndex, bool base, std::map<unsigned int, unsigned int>& cache,
|
|
CSMDoc::Messages& messages);
|
|
///< Load a sequence of references.
|
|
|
|
std::string getNewId();
|
|
|
|
virtual void removeRows(int index, int count);
|
|
|
|
virtual void appendBlankRecord(const std::string& id, UniversalId::Type type = UniversalId::Type_None);
|
|
virtual void appendBlankRecord(const ESM::RefId& id, UniversalId::Type type = UniversalId::Type_None);
|
|
|
|
virtual void cloneRecord(
|
|
const ESM::RefId& origin, const ESM::RefId& destination, const UniversalId::Type type);
|
|
|
|
virtual int searchId(std::string_view id) const;
|
|
virtual int searchId(const ESM::RefId& id) const;
|
|
|
|
virtual void appendRecord(std::unique_ptr<RecordBase> record, UniversalId::Type type = UniversalId::Type_None);
|
|
|
|
virtual void insertRecord(
|
|
std::unique_ptr<RecordBase> record, int index, UniversalId::Type type = UniversalId::Type_None);
|
|
};
|
|
}
|
|
|
|
#endif
|