Hi! I want to implement a list (which operates like ArrayList in Java). I can use ArrayType from llvm, but at creation time I have to specify size so there is a problem when I want to extend it (I can reallocate it ofc). Moreover I need to implement all the operations (inserting, removing etc.) manually. I though that maybe I can use std::vector, but there is another problem - std::vector is a template class, so I have to specify type before compiling it to llvm bytecode. Is there some solution to specify that type dynamically? What is the best method to implement such things in llvm? I would be grateful for any solutions or tips.
Hi, I guess you could use a template with a std::vector: you don't need to define right away the type, if you create a template of it. It should look something like that: template<class B> class List { std::vector<B> myList; void insert (int pos, B elem); } template <class B> void List::add (int pos, B elem) { myList.insert(myList.begin()+pos, elem); } Then, wherever you'll use this class, you should define for which class B your class List should match (such as "List<int> intList;" or "List< std::vector<long> > longVectors;"). -- Cristianno Martins On Monday, 15 de April de 2013 at 07:13, B B wrote:> Hi! > I want to implement a list (which operates like ArrayList in Java). > > I can use ArrayType from llvm, but at creation time I have to specify > size so there is a problem when I want to extend it (I can reallocate > it ofc). Moreover I need to implement all the operations (inserting, > removing etc.) manually. > > I though that maybe I can use std::vector, but there is another > problem - std::vector is a template class, so I have to specify type > before compiling it to llvm bytecode. Is there some solution to > specify that type dynamically? > > What is the best method to implement such things in llvm? > > I would be grateful for any solutions or tips. > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130415/495f0050/attachment.html>
Thank you for your answer! You are right, but I still don't know how to build such a list dynamically using LLVM API with user type inside (I don't know this type yet ofc). 2013/4/15 Cristianno Martins <cristiannomartins at gmail.com>> Hi, > > I guess you could use a template with a std::vector: you don't need to > define right away the type, if you create a template of it. > > It should look something like that: > > template<class B> class List { > std::vector<B> myList; > void insert (int pos, B elem); > } > > template <class B> > void List::add (int pos, B elem) { > myList.insert(myList.begin()+pos, elem); > } > > Then, wherever you'll use this class, you should define for which class B > your class List should match (such as "List<int> intList;" or "List< > std::vector<long> > longVectors;"). > > -- > Cristianno Martins > > On Monday, 15 de April de 2013 at 07:13, B B wrote: > > Hi! > I want to implement a list (which operates like ArrayList in Java). > > I can use ArrayType from llvm, but at creation time I have to specify > size so there is a problem when I want to extend it (I can reallocate > it ofc). Moreover I need to implement all the operations (inserting, > removing etc.) manually. > > I though that maybe I can use std::vector, but there is another > problem - std::vector is a template class, so I have to specify type > before compiling it to llvm bytecode. Is there some solution to > specify that type dynamically? > > What is the best method to implement such things in llvm? > > I would be grateful for any solutions or tips. > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130416/4f50d244/attachment.html>