diff options
Diffstat (limited to 'source/20-codegen-compiler/CodegenOutput.cpp')
-rw-r--r-- | source/20-codegen-compiler/CodegenOutput.cpp | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/source/20-codegen-compiler/CodegenOutput.cpp b/source/20-codegen-compiler/CodegenOutput.cpp index ccd163c..d85feac 100644 --- a/source/20-codegen-compiler/CodegenOutput.cpp +++ b/source/20-codegen-compiler/CodegenOutput.cpp @@ -8,15 +8,22 @@ void CodegenOutput::AddRequestInclude(std::string_view include) { } } -void CodegenOutput::AddOutputThing(CodegenOutputThing thing) { - mOutThings.push_back(std::move(thing)); +void CodegenOutput::AddOutputThing(CodegenOutputThing thing, int placementLocation) { + if (placementLocation < 0 || placementLocation >= mOutThings.size()) { + mOutThings.push_back(std::move(thing)); + } else { + int maxIndex = (int)mOutThings.size() - 1; + if (placementLocation > maxIndex) { + placementLocation = maxIndex; + } + + auto placementIter = mOutThings.begin() + placementLocation; + mOutThings.insert(placementIter, std::move(thing)); + } } void CodegenOutput::MergeContents(CodegenOutput other) { std::move(other.mOutThings.begin(), other.mOutThings.end(), std::back_inserter(this->mOutThings)); - std::move(other.mOutStructs.begin(), other.mOutStructs.end(), std::back_inserter(this->mOutStructs)); - std::move(other.mOutEnums.begin(), other.mOutEnums.end(), std::back_inserter(this->mOutEnums)); - std::move(other.mOutFunctions.begin(), other.mOutFunctions.end(), std::back_inserter(this->mOutFunctions)); } void CodegenOutput::Write(FILE* file) const { @@ -29,18 +36,4 @@ void CodegenOutput::Write(FILE* file) const { fwrite(thing.text.c_str(), sizeof(char), thing.text.size(), file); WRITE_LIT(file, "\n"); } - - for (auto& declStruct : mOutStructs) { - WRITE_FMT_LN(file, "struct %s {", declStruct.name.c_str()); - // TODO - WRITE_LIT_LN(file, "};"); - } - - for (auto& declEnum : mOutEnums) { - // TODO - } - - for (auto& declFunc : mOutFunctions) { - // TODO - } } |