C/C++ trick: static lookup table generation

There are two major ways of using lookup tables (LUTs) in C/C++ code:

  • build them at runtime,
  • embed them in the code.

One major advantage of runtime initialisation is the choice between static initialisation (at program startup), or lazy initialisation (on demand) to save memory. Also, the generating code can be complex, or use information that is only available at runtime.

In the case of an embedded table, the generation cost is only at compile time, which can be very useful. Also, the compiler may take advantage of its early knowledge of the table contents to optimise code. However, quite often the content of embedded tables is abstruse and hardly useful to someone viewing the code. Usually this is due to the use of an external program for generation, sometimes in a completely different language. But the generation can also often be done using the C/C++ preprocessor.

Practical example

Consider the bit interleaving routine at Sean Eron Anderson's Bit Twiddling Hacks page (which, by the way, I recommend you read and bookmark). It uses the following LUT (shortened for brevity):

static const unsigned short MortonTable256[256] = 
  0x0000, 0x0001, 0x0004, 0x0005, 0x0010, 0x0011, 0x0014, 0x0015, 
  0x0040, 0x0041, 0x0044, 0x0045, 0x0050, 0x0051, 0x0054, 0x0055, 
  0x0100, 0x0101, 0x0104, 0x0105, 0x0110, 0x0111, 0x0114, 0x0115, 
  ... 32 lines in total ...
  0x5540, 0x5541, 0x5544, 0x5545, 0x5550, 0x5551, 0x5554, 0x5555

The MortonTable256 table has, as its name suggests, 256 elements. It was pregenerated by some external piece of code which probably looked like this:

for (int i = 0; i < 256; i++)
    MortonTable256[i] = (i & 1) | ((i & 2) << 1) | ((i & 4) << 2) | ((i & 8) << 3);

The problem with that external piece of code is that it is external. You cannot write it in this form and have it fill the table at compile time.

If you only take the output of this table, the information on how the table was created is lost. It makes it impractical to build another table that has, for instance, all values shifted one bit left. Even if such a table was created using a modified version of the above code, switching between the two tables would be a hassle unless both versions were kept between preprocessor tests.

Preprocessor iterator

Here is one way to get the best of both worlds. First, declare the following iterator macros. They can be declared somewhere in a global .h, maybe with more descriptive names:

#define S4(i)    S1((i)),   S1((i)+1),     S1((i)+2),     S1((i)+3)
#define S16(i)   S4((i)),   S4((i)+4),     S4((i)+8),     S4((i)+12)
#define S64(i)   S16((i)),  S16((i)+16),   S16((i)+32),   S16((i)+48)
#define S256(i)  S64((i)),  S64((i)+64),   S64((i)+128),  S64((i)+192)
#define S1024(i) S256((i)), S256((i)+256), S256((i)+512), S256((i)+768)

Their purpose is simple: calling eg. S16(i) will expand to S1(i), S1(i+1), …, S1(i+15). Similarly, S256(i) will call S1 with values from i to i + 255 times.

And this is how to use them in our example:

static const unsigned short MortonTable256[256] = 
#define S1(i) ((i & 1) | ((i & 2) << 1) | ((i & 4) << 2) | ((i & 8) << 3))
#undef S1

That's it! The table will be built at compile time, and you get to keep the logic behind it.

A more complex example

Jeroen van der Zijp's fast half float conversions paper describes table-based methods to convert between 16-bit and 32-bit floating point values. The construction of one of the LUTs is as follows:

void generatetables(){
  for(unsigned int i=0; i<256; ++i){
    int e=i-127;
    if(e<-24){                  // Very small numbers map to zero
    } else if(e<-14){             // Small numbers map to denorms
      basetable[i|0x100]=(0x0400>>(-e-14)) | 0x8000;
    } else if(e<=15){             // Normal numbers just lose precision
      basetable[i|0x100]=((e+15)<<10) | 0x8000;
    } else if(e<128){             // Large numbers map to Infinity
    } else{                       // Infinity and NaN's stay Infinity and NaN's

And this is the compile-time version :

static uint16_t const basetable[512] =
#define S1(i) (((i) < 103) ? 0x0000 : \
               ((i) < 113) ? 0x0400 >> (0x1f & (113 - (i))) : \
               ((i) < 143) ? ((i) - 112) << 10 : 0x7c00)
#undef S1
#define S1(i) (0x8000 | basetable[i])
#undef S1

In this case the macro code is slightly bigger and was slightly rewritten, but is no more complicated than the original code. Note also the elegant reuse of previous values in the second half of the table.

This trick is certainly not new, but since I have found practical uses for it, I thought you may find it useful, too.

  • Posted: 2011-12-20 22:21 (Updated: 2011-12-20 22:26)
  • Author: sam
  • Categories: code tip


1. anonymous -- 2011-12-21 11:21

An example of a trig lookup table (Taylor series maybe) would be excellent.

2. anonymous -- 2011-12-22 14:42

U should start using D Programming-Language ;).....

3. sam -- 2011-12-22 16:43

@anonymous #1: unfortunately there are two problems with this. First, most parameters for trigonometric functions would at some point use floating point computation, and constant expressions are only available in C++11. Second, I believe Taylor series are not a good solution and better polynomials should be preferred, but the complexity of these polynomials is such that I believe this kind of coefficients are best computed in a separate pass.

4. iliis.junk@gmail.com -- 2013-11-19 15:11

Thanks, this is indeed useful. Something that you may have to look out for is operator precedence:

#define S1(i)  i*10

This will produce wrong results, as i is first replaced by i+x and the evaluation happens afterwards:

S256(0) -> 0*10, 0+1*10, ... , 0+64+1*10, ...

In short: Always surround i with brackets when defining S1:

#define S1(i)  (i)*10
287. This Site -- 2017-02-01 07:26

30YGOE This blog is very good! How did you make it !?

288. Learn More -- 2017-02-01 11:03

7ZjvrB Wow, incredible blog format! How lengthy have you ever been running a blog for? you make blogging look easy. The whole glance of your website is great, as well as the content!

344. XRumerTest -- 2017-04-03 02:05

Hello. And Bye.

345. anonymous -- 2017-11-20 12:16

Practically by definition query tables can devour a great deal of room. Subsequently it is critical that you know about precisely how much space is being expended. The most ideal approach to do this is to utilize the C99 information sorts so you know for beyond any doubt what the fundamental stockpiling unit is. Thus, if your information sort is 'int' at that point I'd recommend that you are doing yourself an insult. If you want information about Assignments please visit our website http://www.assignmentbay.co.uk

346. anonymous -- 2017-11-28 12:30

Play the most amazing online happy wheel game one of the best site for the players you join the best action to play this happy wheels free just click here http://happywheels.me online thanks for the visit here i sure you like this very much.

347. anonymous -- 2018-01-16 08:03

You have posted a great tutorial which i like reading. I have learned a lot from this post. I will share the post with my friends hope they find it informative. Purchase Garage Shelving from http://garageshelvingco.uk/

348. anonymous -- 2018-01-26 08:06

Table generation has been done for the approval of the modes for the people. The use of the paper and https://www.huffingtonpost.com/nancy-laws/the-shocking-truth-about-_5_b_7041934.html to become sound and ideal for the advantageous looks for the individuals.

349. Jake William -- 2018-02-02 12:08

Which is the most excellent C programming book to C programming interviews and practice tricky C MCQ problems? Otherwise I will have to Buy Essay Online Any suggestion.

350. mark petterson -- 2018-02-28 12:49

Writing Spot is the best essay provider in the uk. students can get their essay and coursework project this is the best chance for students because writing spot giving best discounts on his service so get your | Academic Writing Services

351. Marlin -- 2018-03-01 10:36

These tricks are absolutely operating and amazingly easy to understand. I implement this coding peaks in table generation with the rule of C/C++. Now, I have done my essay assignment report on this programming subject but writing format is not accurate. Is there any https://www.7dollaressay.com/editing-services/formatting.php who can make my assignment with proper structure and make it professional?

352. Jane -- 2018-03-17 15:53

Thanks for giving us the explanation with detailed examples. You can try the movie hd app for android. Download this movies hd android app to enjoy films. You can do the download movie hd app new version here. Install the hd movie app and relish with it. Just get the movies application and make use of it.Thank you once again for putting your efforts on this topic. Best!

353. Scott Stevens -- 2018-05-05 07:34

Composing Spot is the best article supplier in the UK. understudies can get their paper and coursework venture this is the most obvious opportunity for understudies since composing spot giving best rebates on his administration so get your.https://www.writemyessays.org.uk/essay-writing-service.php

354. anonymous -- 2018-05-05 11:36

A basic essay includes three primary components: creation, frame, and end. Following this format will help you write and prepare an essay. however, flexibility is essential. even as retaining this primary Essay Writing Essay Writing format in thoughts, permit the topic and particular mission guide the writing and corporation.

355. Nathan -- 2018-05-05 18:43

Get expert Homework help. How often have you ever been sitting slumped over your desk late at night doing a 'warfare' with what looks as if a by no means finishing pile of Do My Homework and in frustration you have got cried out 'why cannot someone simply do my homework for me?' it is so clean to get pissed off.

356. Nina -- 2018-05-07 08:51

We are a Dublin based professional schooling development employer which provides academic assistance to that task Write My Assignment in 0.33 level publications in the USA. Our services encompass assist, consultation, and editing offerings in addition to sampling papers for undergraduate and postgraduate students.

357. Natasha -- 2018-05-07 08:53

Your pattern paper may be finished by using a postgraduate mentor who has completed your particular direction which guarantees an expertise of what's required to attain premiere results. Our Can You Write My Essay for Me true documents may be used as a guideline when drawing close the challenge yourself. We're the first provider in the USA to provide grinds for assignments!

358. quickbooks help support -- 2018-05-15 11:51

If you are using quickbook and if you are having any type of difficulty in using it then contact <a href="http://technicaldeputy.com/">intuit quickbooks support</a> anytime.

359. Ginger -- 2018-05-16 13:28

If you don"t mind proceed with this extraordinary work and I anticipate a greater amount of your magnificent blog entries Ginger

360. Leeks -- 2018-05-16 19:22

It's late finding this act. At least, it's a thing to be familiar with that there are such events exist. I agree with your Blog and I will be back to inspect it more in the future so please keep up your act. Leeks

361. Avocado -- 2018-05-16 22:01

I wish more writers of this sort of substance would take the time you did to explore and compose so well. I am exceptionally awed with your vision and knowledge. Avocado

362. Carrots -- 2018-05-18 21:39

I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well.. Carrots

363. Watermelon -- 2018-05-18 21:47

so happy to find good place to many here in the post, the writing is just great, thanks for the post. Watermelon

364. Carbohydrates -- 2018-05-18 21:53

Really impressive post. I read it whole and going to share it with my social circules. I enjoyed your article and planning to rewrite it on my own blog. Carbohydrates

365. Cucumber -- 2018-05-19 12:27

I would also motivate just about every person to save this web page for any favorite assistance to assist posted the appearance. Cucumber

366. Selenium -- 2018-05-19 14:10

This was incredibly an exquisite implementation of your ideas Selenium

367. Kevinngatess92 -- 2018-05-23 08:04

Programming in C++ (or for that remember, in any language) is an existence-lengthy pursuit, and you never prevent learning. In this Best Custom Writing Experts article, I’ve looked at simply the tip of the iceberg; but, in my programming experience going all of the way lower back to the Eighties and even earlier, the issues in this article are factors that, for me as a minimum, arise time and again.

368. Alfredo C. Burgess -- 2018-05-29 06:26

Only Professional Writers Can Make This Kind Of Material, Cheers Managerial Accounting Project Help

369. roberta.gray12 -- 2018-05-29 10:53

Only Professional Writers Can Make This Kind Of Material, Cheers Assignment Help Online

370. anonymous -- 2018-06-07 12:59

Create useful source code for an application and have it compile into linkable object code with no warnings or errors. That is to my knowledge the coolest thing that can happen. https://writecheapessay.com/

371. anonymous -- 2018-07-01 12:44

Thanks for the <a href="https://nrs.com/">great</a> post. [url="https://www.ua.com/"]great[/url]

Wiki Sentex

372. anonymous -- 2018-07-16 18:18

It is easier and more convenient for their employees, in which employees will be able to access Kroger-related news and information, work schedule, discounts and much more. https://greatpeopleme.xyz/www-greatpeople-me/

373. Jason -- 2018-07-24 11:21

Great post thanks for sharing https://mymaleextrareview.com/

374. anonymous -- 2018-07-28 14:32

I really like what you guys are usually up too. This sort of clever work and exposure! Keep up the superb works guys I've incorporated you guys to my blogroll.


375. free essay samples -- 2018-07-31 08:10

I have taken time to go through the article and i recommend to those students looking for research materials. We also offer free essay samples https://www.rightwritings.com/compare-two-cities-essay/

376. anonymous -- 2018-07-31 22:55

After the registration of your gift card you need activate your card by using your Gift Card verification number, card account number, and the CVV number. https://mygiftcardsitee.xyz/www-mygiftcardsite-com/

377. anonymous -- 2018-08-07 08:25

Students often feel issues in writing assignment, so to make students comfortable in assignment we help them to write their assignments. If ever you feel any problem in writing something you can visit our website Assignment Help. https://www.allassignmenthelp.com/

378. Best Writers Reviews -- 2018-08-08 13:07

Our My Assignment Help Reviews go through hundreds of websites each month to select only the best. We also offer reviews of such websites which are not up to the mark so that you may know about them as well. http://www.bestwritersreviews.com/a-review-on-allassignmenthelp-com

379. infonicnisha@gmail.com -- 2018-08-14 08:16

Be a topper of your university by taking nursing assignment help Nursing Assignment Help https://www.studentsassignmenthelp.com/nursing-assignment-help/ from the professional experts of StudentsAssignmentHelp.com. We have highly qualified and certified professionals they make your task easy.

380. Assignment help Ireland -- 2018-08-14 13:53

Get the assignment help Ireland services by the expert assignment writers at Students Assignment Help. Our experts are fluent in writing assignments without missing the deadlines as they have earned their degrees from the renowned colleges and universities around the world. For more info visit https://www.studentsassignmenthelp.com/ie/

381. anonymous -- 2018-08-18 09:33

this is the best option to track our courier ot http://dtdccouriertracking.net online services.

382. anonymous -- 2018-09-04 08:41
383. anonymous -- 2018-09-04 11:50

Our customers are allowed to create an account in our website and review the progress of https://ozwritingessay.com

384. anonymous -- 2018-09-04 11:52

The procedure for issuing https://ozloans300.com a card of this type in banking institutions generally coincides with the operation upon receipt of an ordinary, payment card. The bank manager will http://fastguaranteedloan.com require to issue a number of documents and wait a few days before the procedure is completed, activating the card with the http://www.californiaharprefinance.com established credit limit. As a rule, this limit is set by you, but it is also possible with its periodic change by the bank itself. From the http://www.financialserviceson.com moment of completion of this procedure, a credit card facility is available at your disposal to withdraw money from ATMs, make payments in a regular store or a worldwide network.

385. anonymous -- 2018-09-04 11:53

A typical reason for accessing a https://oz-cash.com consumer credit service is the need to make a purchase of goods https://zz-cash.com (less often services or services) of a significant price. For such purposes, a loan without certificates and sureties can be obtained at the bank institution itself or, for example, in a large trading center where there is a representative of the http://payday-loans-guaranteed-approval.com bank.

386. anonymous -- 2018-09-04 11:53

Summing up, it is possible to http://www.ozguaranteedloan.com say that the bank credit card is the most comfortable form of the loan without certificates and guarantors. But it is important to take into account that to start using it, it is necessary to do a number of preparatory procedures in time, to http://oz-paydayloans.com keep certain amounts in the bank.

387. anonymous -- 2018-09-04 11:54

This makes erection possible in a http://2-oz-rx.net/au/australia-viagra.html fairly easy manner. It is an oral consumption tablet. The efficiency is hampered once this tablet is chewed or crushed. Therefore, never crush or break this tablet. Beginners and first timers should take https://rx-au.com/buy-viagra-australia.html medical advice before they decide to buy Silagra online so as to avoid side effects.

388. anonymous -- 2018-09-06 11:51

I believe its a great idea. The programmers are always conscious to know more and more about such useful tricks. However the students may feel free to visit https://wowriters.com/assignment-writing-service, in order to acquire better grades in their academics

389. anonymous -- 2018-09-17 11:06

The information provided on the blog would be really useful for programmers as well as students. The students who are facing difficulties writing their assignments on such complex topics can visit https://wowriters.com/ to get plagiarism free assignments.

390. anonymous -- 2018-09-17 17:40

It's fantastic that you share this information with us. Olivia

391. mybkexperience -- 2018-09-20 08:44

Burger King is an American global https://mybkexperience.club/ chain of hamburger fast food restaurants. It was founded in 1953 in Jacksonville, Florida, as Insta-Burger King.

392. anonymous -- 2018-09-24 00:54
393. anonymous -- 2018-09-27 03:23

bloons tower defense 5 I like it :)) and play every days.

394. asianfanfics -- 2018-09-28 05:14

I have read through some similar topics! However, your post has given me a very special impression, unlike other posts. I hope you continue to have valuable articles like this or more to share with everyone! https://asian-fanfics.com

395. hansara911 -- 2018-10-03 10:34

I was a girl, but clumsy things. I do not know how to cook, sew, above, ca. I have too insipid and tedious, but that's my personality. It's hard to change hotmail entrar

396. Assignment Help Online -- 2018-10-03 12:36

I’m really impressed with your article, such great & usefull knowledge you mentioned here https://assignmentassistance.xyz

397. Writing A Case Study -- 2018-10-03 14:17

I appreciate your efforts in preparing this post. I really like your blog articles. https://casehelp.xyz

398. anonymous -- 2018-10-07 12:39

Excellent article. Very interesting to read. I really love to read such a nice article. Thanks! keep rocking. hair extensions germany https://www.oxyextensions.de/

399. anonymous -- 2018-10-09 16:06

Nice to be visiting your blog again, it has been months for me. Well this article that i've been waited for so long. I need this article to complete my assignment in the college, and it has same topic with your article. Thanks, great share. 3rd eye activation http://thirdeyeactivator.com/

400. anonymous -- 2018-10-10 09:39

Great Article it its really informative and innovative keep us posted with new updates. its was really valuable. thanks a lot. Dedetizadora https://hidrotex.com.br/

401. anonymous -- 2018-10-11 17:01

It was wondering if I could use this write-up on my other website, I will link it back to your website though.Great Thanks. EC Terminal http://ec-terminal-mieten.com

402. anonymous -- 2018-10-13 09:32

Please continue this great work and I look forward to more of your awesome blog posts. dedetizadora http://manutencaoresidencial.srv.br

403. anonymous -- 2018-10-14 08:28

These are some great tools that i definitely use for SEO work. This is a great list to use in the future.. snowtimes https://www.snowtimes.de/

404. anonymous -- 2018-10-15 08:55

This is such a great resource that you are providing and you give it away for free. <a href="https://pos4less.de/">pos4less Kassenrollen Großhandel</a>

405. anonymous -- 2018-10-16 15:05

I am continually amazed by the amount of information available on this subject. What you presented was well researched and well worded in order to get your stand on this across to all your readers. best matcha brands https://organicpowerfoods.com/health-topics/best-matcha-tea-brands-to-buy

406. anonymous -- 2018-10-16 18:13

Great content material and great layout. Your website deserves all of the positive feedback it’s been getting. petites annonces https://www.achat-vente-paris.fr/

407. anonymous -- 2018-10-17 15:30

Hi! Thanks for the great information you have provided! You have touched on crucuial points! 3 cuscaden condo https://www.3cuscaden-condo.com.sg/

408. anonymous -- 2018-10-20 14:56

I just want to let you know that I just check out your site and I find it very interesting and informative.. riverfront residences floor plan https://www.the-riverfront-residences.com.sg/

409. anonymous -- 2018-10-22 07:44

I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well.. best security camera system https://www.securitycameraonline.net

410. anonymous -- 2018-10-23 07:59

All the contents you mentioned in post is too good and can be very useful. I will keep it in mind, thanks for sharing the information keep updating, looking forward for more posts.Thanks IEPNW https://www.iepnw.com/

411. anonymous -- 2018-10-24 07:51

I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well. Thanks... gaming rig http://gamingrig.com

412. anonymous -- 2018-10-25 09:16

lookup tables is a database function where the item has a location this way, when you do sql for an element, it also retrieves the location. network research based on data retrieval tables. https://www.cheapessay247.com/

413. anonymous -- 2018-10-26 17:53

It is imperative that we read blog post very carefully. I am already done it and find that this post is really amazing. Die Skischule http://skischule-rusel.com

414. anonymous -- 2018-10-27 18:51

Great article with excellent idea!Thank you for such a valuable article. I really appreciate for this great information.. Poster Display https://www.indigodisplays.co.uk/office-retail-displays/display-stands/poster-display-stands-holdershtml

415. anonymous -- 2018-10-29 13:31

Your blog provided us with valuable information to work with. Each & every tips of your post are awesome. Thanks a lot for sharing. Keep blogging.. SEO Agentur Ruhrgebiet https://www.ruhrpott-marketing.de/seo_agentur-fuer-digitales-marketing-ruhrgebiet/

416. anonymous -- 2018-10-31 14:13

It was wondering if I could use this write-up on my other website, I will link it back to your website though.Great Thanks. Review and Bonus https://reviewproductbonus.com

417. anonymous -- 2018-10-31 16:19

good article thanks for sharing Download music http://hitmusic.ir


418. anonymous -- 2018-11-01 06:42

I love the way you write and share your niche! Very interesting and different! Keep it coming! Hd modulator https://www.provideoinstruments.com/HD-RF-Modulators_c_26.html

419. https://eshopcodes2018.yolasite.com -- 2018-11-02 10:30
420. anonymous -- 2018-11-03 07:29

I have read your article, it is very informative and helpful for me.I admire the valuable information you offer in your articles. Thanks for posting it.. Umzug http://www.techupdatepro.com/

421. anonymous -- 2018-11-04 15:21

Thanks for sharing the post.. parents are worlds best person in each lives of individual..they need or must succeed to sustain needs of the family. Foxy Pets http://www.foxypets.net

422. anonymous -- 2018-11-04 17:28

Positive site, where did u come up with the information on this posting? I'm pleased I discovered it though, ill be checking back soon to find out what additional posts you include. Hewitt Health http://hewitt-ct-usa.org

423. anonymous -- 2018-11-05 16:31

I am hoping the same best effort from you in the future as well. In fact your creative writing skills has inspired me. MW Select http://mwselect.com

424. anonymous -- 2018-11-17 10:05

Admiring the time and effort you put into your blog and detailed information you offer!.. air duct cleaning plymouth mi https://www.mirrorducts.com/

425. anonymous -- 2018-11-17 11:42

Thanks for the valuable information and insights you have so provided here... canton mi air duct cleaning https://www.mirrorducts.com/

426. anonymous -- 2018-11-22 13:37

This is an excellent post I saw thanks to sharing it. It is really what I wanted to see hope in future you will continue for sharing such an excellent post. https://www.moviesjacket.com/motorcycle-jackets-for-men

427. anonymous -- 2018-11-22 23:14

I'm so amazed together with you that will make your blog like this to be really great so we truly wanted to have a nice and interesting blogs such as this. https://smmpoint.com/

428. anonymous -- 2018-11-22 23:25

I read your whole blog, Your work is really good and inseparable, Thanks for sharing. https://smmraja.com

429. anonymous -- 2018-11-23 00:34

I am glad to read this post, its an interesting one. I am always searching for quality posts and articles and this is what I found here, I hope you will be adding more in future. Thanks https://www.productivityapps.org/how-to-run-android-apps-on-windows/

430. anonymous -- 2018-11-23 00:54

I simply want to tell you that I am new to weblog and definitely liked this blog site. Very likely I’m going to bookmark your blog .https://99tech.co.uk/santander-business-online-banking/

431. anonymous -- 2018-11-23 01:59

Mate, you have a endowment. A talent to write highly wonderful articles and on a very ordered basis. I must say that this is a rare talent and you are really making full use of that talent. Good to see that. https://followersgain.co.uk/buy-instagram-followers/

432. anonymous -- 2018-11-23 01:59

This article gives the light in which we can watch the truth. This is extremely pleasant one and gives in depth data. A debt of gratitude is in order for this pleasant article. https://techlipz.com/iphlpsvc-tuning/

433. anonymous -- 2018-11-23 02:00

I am reading for last couple of days about astronomy. I wrote lots of articles but didn't gain any knowledge about astronomy but It was some thing different I read in today's article about astronomy. It is always a interesting topic for me and it is really difficult to find authentic information about it. Thanks Very Much for sharing High level of Knowdelge about Astronomy. I am very Delighted. https://worthgram.com/survey-bypass-tool-2018/

434. anonymous -- 2018-11-25 11:34

This is a great inspiring article.I am pretty much pleased with your good work.You put really very helpful information... look at here http://www.aspenmedicalspa.com/

435. Sandra -- 2018-12-06 00:10

I am looking for help regarding C++ code for my website https://www.herbalcart.com/anti-aging/nmn/

436. anonymous -- 2018-12-06 08:53

Pretty nice post. I just stumbled upon your weblog and wanted to say that I have really enjoyed browsing your blog posts. After all I’ll be subscribing to your feed and I hope you write again soon! Acer Coe http://acer-coe.org/

437. anonymous -- 2018-12-08 07:34

Very interesting blog. Alot of blogs I see these days don't really provide anything that I'm interested in, but I'm most definately interested in this one. Just thought that I would post and let you know. AFC Institute http://afcinstitute.com/

438. Ruben Wilson -- 2018-12-08 11:41

Its great to see this post. I really appreciate your work <a href="https://www.usajacket.com/category/christmas-gifts">Christmas Gifts</a>

439. anonymous -- 2018-12-09 07:36

Great Article it its really informative and innovative keep us posted with new updates. its was really valuable. thanks a lot. Hell’s Kitchen http://www.hellskitchenmanitou.com/

440. anonymous -- 2018-12-10 07:41

I found that site very usefull and this survey is very cirious, I ' ve never seen a blog that demand a survey for this actions, very curious... Phoenix Homes https://phoenixhomesbyjan.com/

Add New Comment