1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
#pragma once
#include "SrcPos.h"
#include "Type.h"
#include "Thread.h"
#include "License.h"
#include "Version.h"
#include "Auto.h"
#include "NameMap.h"
#include "Doc.h"
/**
* Describes all types and functions known.
*/
class World : NoCopy {
public:
// Create.
World();
// Using namespace declarations.
vector<CppName> usingDecl;
// Type aliases.
map<CppName, CppName> aliases;
// All types.
NameMap<Type> types;
// All templates.
NameMap<Template> templates;
// All threads.
NameMap<Thread> threads;
// All functions.
vector<Function> functions;
// Built-in types (into C++).
map<String, Size> builtIn;
// Licenses.
vector<License> licenses;
// Versions.
vector<Version> versions;
// Documentation in use. Built up during the output phase.
vector<Auto<Doc>> documentation;
// ...
// Add a type (and do the proper checking).
void add(Auto<Type> type);
// Prepare the world for serialization (ie. resolving types, ...).
void prepare();
// Find a wrapper for an unknown type.
UnknownPrimitive *unknown(const String &name, const SrcPos &pos);
private:
// Fast lookup of UnknownPrimitive objects.
map<String, Auto<UnknownPrimitive>> unknownLookup;
// Sort types so we get a deterministic order.
void orderTypes();
// Sort functions so we get a deterministic order.
void orderFunctions();
// Sort templates.
void orderTemplates();
// Sort threads so we get a deterministic order.
void orderThreads();
// Order licenses.
void orderLicenses();
// Resolve all types in this world.
void resolveTypes();
};
|