X-Git-Url: https://deadsoftware.ru/gitweb?p=odcread.git;a=blobdiff_plain;f=alien.h;h=77db1febc2239e3d12886ff7ee8e44e2a8edc90f;hp=0c4b51dd4e810eb0c52b175a26469cb0e146c999;hb=41d9c65ec79728a8771cd2288dfc3458569c6801;hpb=32b22b42cd974e98e8a56f5ac39a51c8990ef57c diff --git a/alien.h b/alien.h index 0c4b51d..77db1fe 100644 --- a/alien.h +++ b/alien.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -14,6 +15,7 @@ namespace odc { */ struct AlienComponent { virtual std::string toString() = 0; + virtual void accept(Visitor &visitor) const = 0; }; /** @@ -26,19 +28,26 @@ struct AlienPiece : public AlienComponent { AlienPiece(const char * const data, const size_t len); virtual std::string toString(); + virtual void accept(Visitor &visitor) const; }; /** * Store component of an alien store */ struct AlienPart : public AlienComponent { - Store * const store; + Store * const d_store; - AlienPart(Store * const _store); + AlienPart(Store * const store); virtual std::string toString(); + virtual void accept(Visitor &visitor) const; }; +/** + * Any type that's not registered is treated as an "Alien". + * This allows us to read files even if they contain things we're not aware of. + * The alien will consist of AlienComponents, some of which we may be able to read. + */ class Alien : public Store { const TypePath d_path; std::vector d_comps; @@ -54,6 +63,7 @@ class Alien : public Store { // comps-: AlienComp (** the constituent components of this alien store **) virtual std::string toString(); + virtual void accept(Visitor &visitor) const; }; }