Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //////////////
- // List Tag //
- //////////////
- // Code omitted
- void NBT::Tag::List::ClearMismatchedTypes(){
- for (std::vector<std::shared_ptr<NBT::Tag::Base> >::iterator i = Value.begin(); i != Value.end();){
- if ((*i)->GetType() != Type)
- i = Value.erase(i);
- else
- ++i;
- }
- }
- // Code omitted
- bool NBT::Tag::List::Load(std::istream &Stream, bool LoadExtra){
- // Code omitted
- int8_t ID = ReadByte(Stream);
- if (!Stream.good() || ID < 0 || ID > 10)
- return false;
- SetTagType(ID);
- int32_t Length = ReadInt(Stream);
- if (!Stream.good())
- return false;
- std::vector<std::shared_ptr<NBT::Tag::Base> > NewValue;
- for (int32_t i = 0; i < Length; i++){
- std::shared_ptr<NBT::Tag::Base> NewTag;
- switch (ID){
- case NBT::TagID::Byte:{
- NewTag.reset(new NBT::Tag::Byte("", 0));
- break;
- }
- case NBT::TagID::Short:{
- NewTag.reset(new NBT::Tag::Short("", 0));
- break;
- }
- case NBT::TagID::Int:{
- NewTag.reset(new NBT::Tag::Int("", 0));
- break;
- }
- case NBT::TagID::Long:{
- NewTag.reset(new NBT::Tag::Long("", 0));
- break;
- }
- case NBT::TagID::Float:{
- NewTag.reset(new NBT::Tag::Float("", 0));
- break;
- }
- case NBT::TagID::Double:{
- NewTag.reset(new NBT::Tag::Double("", 0));
- break;
- }
- case NBT::TagID::ByteArray:{
- NewTag.reset(new NBT::Tag::ByteArray("", std::vector<int8_t>()));
- break;
- }
- case NBT::TagID::String:{
- NewTag.reset(new NBT::Tag::String("", ""));
- break;
- }
- case NBT::TagID::List:{
- NewTag.reset(new NBT::Tag::List("", std::vector<std::shared_ptr<NBT::Tag::Base> >()));
- break;
- }
- case NBT::TagID::Compound:{
- NewTag.reset(new NBT::Tag::Compound("", std::map<std::string, std::shared_ptr<NBT::Tag::Base> >()));
- break;
- }
- default:
- break;
- }
- if (NewTag.get() == NULL){
- NewValue.clear();
- return false;
- }
- if (!NewTag->Load(Stream, false) || !Stream.good()){
- NewTag.reset();
- NewValue.clear();
- return false;
- }
- std::cout << "Pointer: " << NewTag.get() << '\n';
- NewValue.push_back(NewTag);
- }
- if (!Stream.good()){
- NewValue.clear();
- return false;
- }
- SetValue(NewValue);
- std::cout << Value.size() << " entries\n";
- std::cout << "Pointers:\n";
- for (std::vector<std::shared_ptr<NBT::Tag::Base> >::iterator i = Value.begin(); i != Value.end(); i++)
- std::cout << i->get() << '\n';
- std::cout << "}\n";
- return true;
- }
- // Code omitted
- void NBT::Tag::List::SetTagType(int8_t NewType){
- Type = NewType;
- ClearMismatchedTypes();
- }
- void NBT::Tag::List::SetValue(std::vector<std::shared_ptr<NBT::Tag::Base> > &NewValue){
- Value.clear();
- for (std::vector<std::shared_ptr<NBT::Tag::Base> >::iterator i = NewValue.begin(); i != NewValue.end(); i++)
- Value.push_back(*i);
- if (Value.size() > 0)
- SetTagType(Value.front()->GetType());
- else
- SetTagType(-1);
- }
- // Code omitted
- //////////////////
- // Compound Tag //
- //////////////////
- // Code omitted
- bool NBT::Tag::Compound::Load(std::istream &Stream, bool LoadExtra){
- // Code omitted
- std::map<std::string, std::shared_ptr<NBT::Tag::Base> > NewValue;
- while (true){
- std::shared_ptr<NBT::Tag::Base> NewTag;
- int8_t ID = ReadByte(Stream);
- if (!Stream.good() || ID < 0 || ID > 10){
- NewValue.clear();
- return false;
- }
- if (ID == 0)
- break;
- switch (ID){
- case NBT::TagID::Byte:{
- NewTag.reset(new NBT::Tag::Byte("", 0));
- break;
- }
- case NBT::TagID::Short:{
- NewTag.reset(new NBT::Tag::Short("", 0));
- break;
- }
- case NBT::TagID::Int:{
- NewTag.reset(new NBT::Tag::Int("", 0));
- break;
- }
- case NBT::TagID::Long:{
- NewTag.reset(new NBT::Tag::Long("", 0));
- break;
- }
- case NBT::TagID::Float:{
- NewTag.reset(new NBT::Tag::Float("", 0));
- break;
- }
- case NBT::TagID::Double:{
- NewTag.reset(new NBT::Tag::Double("", 0));
- break;
- }
- case NBT::TagID::ByteArray:{
- NewTag.reset(new NBT::Tag::ByteArray("", std::vector<int8_t>()));
- break;
- }
- case NBT::TagID::String:{
- NewTag.reset(new NBT::Tag::String("", ""));
- break;
- }
- case NBT::TagID::List:{
- NewTag.reset(new NBT::Tag::List("", std::vector<std::shared_ptr<NBT::Tag::Base> >()));
- break;
- }
- case NBT::TagID::Compound:{
- NewTag.reset(new NBT::Tag::Compound("", std::map<std::string, std::shared_ptr<NBT::Tag::Base> >()));
- break;
- }
- default:
- break;
- }
- if (NewTag.get() == NULL){
- NewValue.clear();
- return false;
- }
- if (!NewTag->Load(Stream, true) || !Stream.good()){
- NewTag.reset();
- NewValue.clear();
- return false;
- }
- std::cout << "Pointer: " << NewTag.get() << '\n';
- NewValue.insert(std::pair<std::string, std::shared_ptr<NBT::Tag::Base> >(NewTag->GetName(), NewTag));
- }
- if (!Stream.good()){
- NewValue.clear();
- return false;
- }
- SetValue(NewValue);
- std::cout << Value.size() << " entries\n";
- std::cout << "Pointers:\n";
- for (std::map<std::string, std::shared_ptr<NBT::Tag::Base> >::iterator i = Value.begin(); i != Value.end(); i++)
- std::cout << i->second.get() << '\n';
- std::cout << "}\n";
- return true;
- }
- // Code omitted
- void NBT::Tag::Compound::SetValue(std::map<std::string, std::shared_ptr<NBT::Tag::Base> > &NewValue){
- Value.clear();
- Value = NewValue;
- }
- // Code omitted
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement