11 #ifndef hifi_model_Asset_h
12 #define hifi_model_Asset_h
25 typedef std::vector< T > Vector;
28 static const ID INVALID_ID = 0;
37 static Version evalVersionFromID(ID
id) {
44 static Index evalIndexFromID(ID
id) {
45 return Index(
id < 0 ? -
id :
id) - 1;
47 static ID evalID(Index index, Version version) {
48 return (version == DRAFT ? -
int(index + 1) :
int(index + 1));
52 for (
auto e : _elements) {
58 Index getNumElements()
const {
59 return _elements[DRAFT].size();
62 ID add(
const T& element) {
63 for (
auto e : _elements) {
66 return evalID(_elements[DRAFT].size(), DRAFT);
69 void set(ID
id,
const T& element) {
70 Index index = evalIndexFromID(
id);
71 if (index < getNumElements()) {
72 _elements[DRAFT][index] = element;
76 const T& get(ID
id,
const T& element)
const {
77 Index index = evalIndexFromID(
id);
78 if (index < getNumElements()) {
79 return _elements[DRAFT][index];
85 Vector _elements[NUM_VERSIONS];
89 typedef Table< MaterialPointer > MaterialTable;
91 typedef Table< MeshPointer > MeshTable;
97 MeshTable::ID _meshID{ MeshTable::INVALID_ID };
100 MaterialTable::ID _materialID{ MaterialTable::INVALID_ID };
103 typedef Table< Shape > ShapeTable;
112 MeshTable& editMeshes() {
return _meshes; }
113 const MeshTable& getMeshes()
const {
return _meshes; }
115 MaterialTable& editMaterials() {
return _materials; }
116 const MaterialTable& getMaterials()
const {
return _materials; }
118 ShapeTable& editShapes() {
return _shapes; }
119 const ShapeTable& getShapes()
const {
return _shapes; }
124 MaterialTable _materials;
129 typedef std::shared_ptr< Asset > AssetPointer;