Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 0 additions & 79 deletions src/ExpandingArray.h

This file was deleted.

11 changes: 6 additions & 5 deletions src/IDs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,13 @@
*/


#include<set>
#include<string>
#include<cassert>
#include<fstream>
#include<errno.h>
#include<cstdlib>
#include<vector>


#include"nforenum.h"
Expand All @@ -33,7 +35,6 @@
#include"sanity_defines.h"
#include"data.h"
#include"command.h"
#include"ExpandingArray.h"

class IDs {
public:
Expand All @@ -59,9 +60,9 @@ class TextIDs{
std::vector<uchar> specials;
SINGLETON(TextIDs);
private:
static Expanding0Array<bool> _m;
static std::set<uint> _m;
};
Expanding0Array<bool> TextIDs::_m;
std::set<uint> TextIDs::_m;

TextIDs::TextIDs(){
FILE*pFile=myfopen(TextIDs);
Expand Down Expand Up @@ -89,12 +90,12 @@ bool TextIDs::CheckID(uint feature,uint ID){
void TextIDs::Define(uint ID){
if(idClasses[ID>>11]==0xFFFF){
ID-=0xC000;
_m[ID]=true;
_m.insert(ID);
}
}
bool TextIDs::IsDefined(uint ID){
if(idClasses[ID>>11]==0xFFFF)
return const_cast<const Expanding0Array<bool>& >(_m)[ID-0xC000];
return _m.contains(ID-0xC000);
return (ID&0x7FF)<idClasses[ID>>11];
}

Expand Down
36 changes: 19 additions & 17 deletions src/act0.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,13 @@
#include<cassert>
#include<errno.h>
#include<cstdlib>
#include<map>
#include<set>


#include"nforenum.h"
#include"inlines.h"
#include"messages.h"
#include"ExpandingArray.h"
#include"sanity_defines.h"
#include"data.h"
#include"pseudo.h"
Expand Down Expand Up @@ -213,19 +214,19 @@ class Prop08Tracking{
STATIC(Prop08Tracking)
public:
static void Set(uint feat,uint id){
_m[feat][id]=true;
_m.insert(std::make_pair(feat, id));
}
static void Reset(){
_m.clear();
}
static bool Check(uint feat,uint id){
return ((const ExpandingArray<Expanding0Array<bool> >)_m)[feat][id];
return _m.contains(std::make_pair(feat, id));
}
private:
static ExpandingArray<Expanding0Array<bool> > _m;
static std::set<std::pair<uint, uint>> _m;
};

ExpandingArray<Expanding0Array<bool> > Prop08Tracking::_m;
std::set<std::pair<uint, uint>> Prop08Tracking::_m;

bool IsProp08Set(uint feature,uint id){
return Prop08Tracking::Check(feature,id);
Expand Down Expand Up @@ -270,10 +271,10 @@ static void FormatSprite(PseudoSprite&str, uint&ofs, const uint format, const ui
for (uint i=0;i<=MaxFeature();i++)
if (Check2v::GetEffFeature(i,0x82)==feature && (k==UINT_MAX||k==feature)) k=i;

static Expanding0Array<bool> warned;
static std::set<uint> warned;
if (k>MaxFeature()) {
if (!warned[feature]) IssueMessage(WARNING1,COULD_NOT_VERIFY);
warned[feature]=true;
auto [_, inserted] = warned.insert(feature);
if (inserted) IssueMessage(WARNING1,COULD_NOT_VERIFY);
break;
}

Expand Down Expand Up @@ -332,7 +333,7 @@ void Check0::Check(PseudoSprite&str){
return;
}
feature!=8&&IDs&&CheckID(feature,firstID)&&CheckID(feature,maxID);
Expanding0Array<uint>propLoc, idWidth;
std::map<uint, uint> propLoc;
try{
while(propsRemain||_autocorrect){
try{
Expand Down Expand Up @@ -379,7 +380,7 @@ void Check0::Check(PseudoSprite&str){
if (IDs && maxID > prop_data.maxlast(prop))
IssueMessage(ERROR, INVALID_ID, maxID, 0, prop_data. maxlast(prop));
}
if(propLoc[prop]&&!(len&0x80))
if(propLoc[prop] > 0 &&!(len&0x80))
IssueMessage(WARNING2,REPEATED_PROP,i,prop,propLoc[prop]);
propLoc[prop]=i++;
if(len==0xFE){
Expand Down Expand Up @@ -429,15 +430,16 @@ void Check0::Check(PseudoSprite&str){
bool linebreaks=(IDs>1||GetState(LINEBREAKS)==3)&&str.ExtractByte(2)>1;
const PropData &prop_data = data.at(feature);
uint data;
for(i=0;i<propLoc.size();i++)
linebreaks |= propLoc[i] && prop_data.GetData(i) == 0xFE;
for (const auto &[prop, loc] : propLoc) {
linebreaks |= loc > 0 && prop_data.GetData(prop) == 0xFE;
}
if(!linebreaks)return;
for(i=0;i<propLoc.size();i++){
if(!propLoc[i])continue;
str.SetEol(propLoc[i]-1,1);
if ((data = prop_data.GetData(i)) == 0xFE) continue;
for (const auto &[prop, loc] : propLoc) {
if(loc == 0) continue;
str.SetEol(loc-1,1);
if ((data = prop_data.GetData(prop)) == 0xFE) continue;
for(uint j=IDs;j;j--)
str.ColumnAfter(propLoc[i]+GetWidth(data)*j);
str.ColumnAfter(loc+GetWidth(data)*j);
}
}
}catch(uint off){
Expand Down
15 changes: 8 additions & 7 deletions src/act123.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@
#include<cassert>
#include<errno.h>
#include<cstdlib>
#include<map>


#include"inlines.h"
#include"ExpandingArray.h"
#include"sanity_defines.h"
#include"data.h"
#include"rangedint.h"
Expand Down Expand Up @@ -446,13 +446,14 @@ CHANGED_FEATURE(act3)
if(!isGeneric&&!IsValidFeature(ACT3,feature)){IssueMessage(FATAL,INVALID_FEATURE);return;}
else if(isOverride&&!IsValidFeature(OVERRIDE3,feature))IssueMessage(ERROR,INVALID_FEATURE);
else if(isGeneric&&!IsValidFeature(GENERIC3,feature))IssueMessage(ERROR,INVALID_FEATURE);
Expanding0Array<int> ids;
std::map<uint, int> ids;
PseudoSprite::ExtByte id;
for(i=0;i<(numIDs&0x7F);i++){
data>>id;
if(ids[id])
auto [_, inserted] = ids.insert({static_cast<uint>(id), id.loc()});
if (!inserted) {
IssueMessage(WARNING1,DUPLICATE,id.loc(),ID,id.val(),ids[id]);
ids[id]=id.loc();
}
CheckID(feature,id);
if(!IsValidFeature(ACT3_BEFORE_PROP08,feature) && !IsProp08Set(feature,id))
IssueMessage(ERROR,ACT3_PRECEDES_PROP08,id.loc(),id.val());
Expand All @@ -474,16 +475,16 @@ CHANGED_FEATURE(act3)
data.Extract(def,numCIDs.loc()+1+numCIDs*3);

ids.clear(); // Reuse as cargos
ids.reserve(256);
for (i=0; i<numCIDs; i++) {
data>>cargo>>cid;
if ((feature == 0x0F && cargo != 0x00 && cargo != 0xFF) ||
(feature == 0x10 && cargo > 0x0A) ||
(feature <= 0x04 && cargo>CargoTransTable() && cargo != 0xFF && (cargo != 0xFE || feature != 4)))
IssueMessage(ERROR,INVALID_CARGO_TYPE,cargo.loc(),cargo.val());
if(ids[cargo])
auto [_, inserted] = ids.insert({static_cast<uint>(cargo), cargo.loc()});
if(!inserted) {
IssueMessage(WARNING1,DUPLICATE,cargo.loc(),CARGO,cargo.val(),ids[cargo]);
ids[cargo] = cargo.loc();
}
CheckCargoID(cid.loc(),cid,feature,newfeature);
if(def==cid)
IssueMessage(WARNING1,REUSED_DEFAULT);
Expand Down
65 changes: 43 additions & 22 deletions src/act123.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#include <set>
#include <map>
#include <vector>

#include "singleton.h"
#include "message_mgr.h"

Expand All @@ -31,25 +34,41 @@ struct act123{

class Act1{
public:
Act1(){init();}
void init(){spritenum=0;used.resize(0);}
bool is_used(int set)const{return used[set];}
void use(int set){used[set]=true;}
unsigned int feature,numsets,spritenum;
Act1() = default;
void init() { spritenum = 0; used.clear(); }
bool is_used(int set) const { return used.contains(set); }
void use(int set) { used.insert(set); }
unsigned int feature,numsets,spritenum = 0;
private:
Expanding0Array<bool>used;
std::set<int> used;
}act1;

class IDarray{
public:
void init(){_m.resize(0);}
bool is_defined(int id)const{return _m[id].sprite!=0;}
bool is_used(int id)const{return _m[id].used;}
unsigned int defined_at(int id)const{return _m[id].sprite;}
void define(uint feature,unsigned int id,bool checks1C);
bool checks1C(int id)const{return _m[id].v1C;}
void use(int id){_m[id].used=true;}
bool test(uint,uint)const;
unsigned short GetFeature(uint id)const{return _m[id].feature;}
void init() { _m.clear(); }
bool is_defined(int id) const {
if (_m.contains(id)) return _m.at(id).sprite != 0;
return false;
}
bool is_used(int id) const {
if (_m.contains(id)) return _m.at(id).used;
return false;
}
unsigned int defined_at(int id) const {
if (_m.contains(id)) return _m.at(id).sprite;
return 0;
}
void define(uint feature, int id, bool checks1C);
bool checks1C(int id) const {
if (_m.contains(id)) return _m.at(id).v1C;
return false;
}
void use(int id) { _m[id].used = true; }
bool test(uint, int) const;
unsigned short GetFeature(int id) const {
if (_m.contains(id)) return _m.at(id).feature;
return (unsigned short)-1;
}
friend uint act123::MaxFoundFeat()const;
private:
struct info{
Expand All @@ -58,10 +77,12 @@ struct act123{
unsigned short feature;
unsigned int sprite;
};
ExpandingArray<info>_m;
}defined2IDs;
std::map<int, info> _m;
};

IDarray defined2IDs;

uint act3feature,act3spritenum;
uint act3feature,act3spritenum = 0;
SINGLETON(act123)
};

Expand All @@ -73,9 +94,9 @@ class Check2v{
uint min,max,width,maxparam;
};
struct FeatData{
FeatData():var80(VarData(1)){}
ExpandingArray<VarData>vars;
ExpandingArray<VarData>var80;
FeatData() = default;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is defining a constructor actually needed here?

std::map<uint, VarData>vars;
std::map<uint, VarData>var80;
uint last80,featfor82;
};
public:
Expand All @@ -86,7 +107,7 @@ class Check2v{
bool IsValid(uint feature, uint var)const;
SINGLETON(Check2v)
private:
ExpandingArray<VarData>globvars;
std::map<uint, VarData> globvars;
std::vector<FeatData> data;
uint maxop;
uint MaxParam(uint feature, uint var)const;
Expand Down
Loading
Loading