Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Homework

Name: Anonymous 2009-07-13 13:47

Write a routine which makes string uppercase or lowercase in language of your choice in least possible execution time.

Name: Anonymous 2009-07-14 4:16

/*
 * WRITTEN BY A.O.
 * DO NOT STEAL MY ART.
 */

#define CASE_SINGLE(value,offset) if(code==value) return code+offset;

#define CASE_RANGE(left,right,offset) if(code>=left && code<=right) return code+offset;

#define CASE_RANGE_EVEN(left,right,offset) if(code%2==0 && code>=left && code<=right) return code+offset;

#define CASE_RANGE_ODD(left,right,offset) if(code%2==1 && code>=left && code<=right) return code+offset;


unsigned int ucs_toupper(unsigned int code){

    switch(code>>8){

    case 0x00:

        CASE_RANGE     (0x0061,0x007a,-32)

        CASE_SINGLE    (0x00b5,743)

        CASE_RANGE     (0x00e0,0x00f6,-32)

        CASE_RANGE     (0x00f8,0x00fe,-32)

        CASE_SINGLE    (0x00ff,121)

        break;

    case 0x01:

        CASE_RANGE_ODD (0x0101,0x012f,-1)

        CASE_SINGLE    (0x0131,-232)

        CASE_RANGE_ODD (0x0133,0x0137,-1)

        CASE_RANGE_EVEN(0x013a,0x0148,-1)

        CASE_RANGE_ODD (0x014b,0x0177,-1)

        CASE_RANGE_EVEN(0x017a,0x017e,-1)

        CASE_SINGLE    (0x017f,-300)

        CASE_SINGLE    (0x0180,195)

        CASE_RANGE_ODD (0x0183,0x0185,-1)

        CASE_SINGLE    (0x0188,-1)

        CASE_SINGLE    (0x018c,-1)

        CASE_SINGLE    (0x0192,-1)

        CASE_SINGLE    (0x0195,97)

        CASE_SINGLE    (0x0199,-1)

        CASE_SINGLE    (0x019a,163)

        CASE_SINGLE    (0x019e,130)

        CASE_RANGE_ODD (0x01a1,0x01a5,-1)

        CASE_SINGLE    (0x01a8,-1)

        CASE_SINGLE    (0x01ad,-1)

        CASE_SINGLE    (0x01b0,-1)

        CASE_RANGE_EVEN(0x01b4,0x01b6,-1)

        CASE_SINGLE    (0x01b9,-1)

        CASE_SINGLE    (0x01bd,-1)

        CASE_SINGLE    (0x01bf,56)

        CASE_SINGLE    (0x01c5,-1)

        CASE_SINGLE    (0x01c6,-2)

        CASE_SINGLE    (0x01c8,-1)

        CASE_SINGLE    (0x01c9,-2)

        CASE_SINGLE    (0x01cb,-1)

        CASE_SINGLE    (0x01cc,-2)

        CASE_RANGE_EVEN(0x01ce,0x01dc,-1)

        CASE_SINGLE    (0x01dd,-79)

        CASE_RANGE_ODD (0x01df,0x01ef,-1)

        CASE_SINGLE    (0x01f2,-1)

        CASE_SINGLE    (0x01f3,-2)

        CASE_SINGLE    (0x01f5,-1)

        CASE_RANGE_ODD (0x01f9,0x021f,-1)

        break;

    case 0x02:

        CASE_RANGE_ODD (0x01f9,0x021f,-1)

        CASE_RANGE_ODD (0x0223,0x0233,-1)

        CASE_SINGLE    (0x023c,-1)

        CASE_SINGLE    (0x0242,-1)

        CASE_RANGE_ODD (0x0247,0x024f,-1)

        CASE_SINGLE    (0x0250,10783)

        CASE_SINGLE    (0x0251,10780)

        CASE_SINGLE    (0x0253,-210)

        CASE_SINGLE    (0x0254,-206)

        CASE_RANGE     (0x0256,0x0257,-205)

        CASE_SINGLE    (0x0259,-202)

        CASE_SINGLE    (0x025b,-203)

        CASE_SINGLE    (0x0260,-205)

        CASE_SINGLE    (0x0263,-207)

        CASE_SINGLE    (0x0268,-209)

        CASE_SINGLE    (0x0269,-211)

        CASE_SINGLE    (0x026b,10743)

        CASE_SINGLE    (0x026f,-211)

        CASE_SINGLE    (0x0271,10749)

        CASE_SINGLE    (0x0272,-213)

        CASE_SINGLE    (0x0275,-214)

        CASE_SINGLE    (0x027d,10727)

        CASE_SINGLE    (0x0280,-218)

        CASE_SINGLE    (0x0283,-218)

        CASE_SINGLE    (0x0288,-218)

        CASE_SINGLE    (0x0289,-69)

        CASE_RANGE     (0x028a,0x028b,-217)

        CASE_SINGLE    (0x028c,-71)

        CASE_SINGLE    (0x0292,-219)

        break;

    case 0x03:

        CASE_SINGLE    (0x0345,84)

        CASE_RANGE_ODD (0x0371,0x0373,-1)

        CASE_SINGLE    (0x0377,-1)

        CASE_RANGE     (0x037b,0x037d,130)

        CASE_SINGLE    (0x03ac,-38)

        CASE_RANGE     (0x03ad,0x03af,-37)

        CASE_RANGE     (0x03b1,0x03c1,-32)

        CASE_SINGLE    (0x03c2,-31)

        CASE_RANGE     (0x03c3,0x03cb,-32)

        CASE_SINGLE    (0x03cc,-64)

        CASE_RANGE     (0x03cd,0x03ce,-63)

        CASE_SINGLE    (0x03d0,-62)

        CASE_SINGLE    (0x03d1,-57)

        CASE_SINGLE    (0x03d5,-47)

        CASE_SINGLE    (0x03d6,-54)

        CASE_SINGLE    (0x03d7,-8)

        CASE_RANGE_ODD (0x03d9,0x03ef,-1)

        CASE_SINGLE    (0x03f0,-86)

        CASE_SINGLE    (0x03f1,-80)

        CASE_SINGLE    (0x03f2,7)

        CASE_SINGLE    (0x03f5,-96)

        CASE_SINGLE    (0x03f8,-1)

        CASE_SINGLE    (0x03fb,-1)

        break;

    case 0x04:

        CASE_RANGE     (0x0430,0x044f,-32)

        CASE_RANGE     (0x0450,0x045f,-80)

        CASE_RANGE_ODD (0x0461,0x0481,-1)

        CASE_RANGE_ODD (0x048b,0x04bf,-1)

        CASE_RANGE_EVEN(0x04c2,0x04ce,-1)

        CASE_SINGLE    (0x04cf,-15)

        CASE_RANGE_ODD (0x04d1,0x0523,-1)

        break;

    case 0x05:

        CASE_RANGE_ODD (0x04d1,0x0523,-1)

        CASE_RANGE     (0x0561,0x0586,-48)

        break;

    case 0x1d:

        CASE_SINGLE    (0x1d79,35332)

        CASE_SINGLE    (0x1d7d,3814)

        break;

    case 0x1e:

        CASE_RANGE_ODD (0x1e01,0x1e95,-1)

        CASE_SINGLE    (0x1e9b,-59)

        CASE_RANGE_ODD (0x1ea1,0x1eff,-1)

        break;

    case 0x1f:

        CASE_RANGE     (0x1f00,0x1f07,8)

        CASE_RANGE     (0x1f10,0x1f15,8)

        CASE_RANGE     (0x1f20,0x1f27,8)

        CASE_RANGE     (0x1f30,0x1f37,8)

        CASE_RANGE     (0x1f40,0x1f45,8)

        CASE_RANGE_ODD (0x1f51,0x1f57,8)

        CASE_RANGE     (0x1f60,0x1f67,8)

        CASE_RANGE     (0x1f70,0x1f71,74)

        CASE_RANGE     (0x1f72,0x1f75,86)

        CASE_RANGE     (0x1f76,0x1f77,100)

        CASE_RANGE     (0x1f78,0x1f79,128)

        CASE_RANGE     (0x1f7a,0x1f7b,112)

        CASE_RANGE     (0x1f7c,0x1f7d,126)

        CASE_RANGE     (0x1f80,0x1f87,8)

        CASE_RANGE     (0x1f90,0x1f97,8)

        CASE_RANGE     (0x1fa0,0x1fa7,8)

        CASE_RANGE     (0x1fb0,0x1fb1,8)

        CASE_SINGLE    (0x1fb3,9)

        CASE_SINGLE    (0x1fbe,-7205)

        CASE_SINGLE    (0x1fc3,9)

        CASE_RANGE     (0x1fd0,0x1fd1,8)

        CASE_RANGE     (0x1fe0,0x1fe1,8)

        CASE_SINGLE    (0x1fe5,7)

        CASE_SINGLE    (0x1ff3,9)

        break;

    case 0x21:

        CASE_SINGLE    (0x214e,-28)

        CASE_RANGE     (0x2170,0x217f,-16)

        CASE_SINGLE    (0x2184,-1)

        break;

    case 0x24:

        CASE_RANGE     (0x24d0,0x24e9,-26)

        break;

    case 0x2c:

        CASE_RANGE     (0x2c30,0x2c5e,-48)

        CASE_SINGLE    (0x2c61,-1)

        CASE_SINGLE    (0x2c65,-10795)

        CASE_SINGLE    (0x2c66,-10792)

        CASE_RANGE_EVEN(0x2c68,0x2c6c,-1)

        CASE_SINGLE    (0x2c73,-1)

        CASE_SINGLE    (0x2c76,-1)

        CASE_RANGE_ODD (0x2c81,0x2ce3,-1)

        break;

    case 0x2d:

        CASE_RANGE     (0x2d00,0x2d25,-7264)

        break;

    case 0xa6:

        CASE_RANGE_ODD (0xa641,0xa65f,-1)

        CASE_RANGE_ODD (0xa663,0xa66d,-1)

        CASE_RANGE_ODD (0xa681,0xa697,-1)

        break;

    case 0xa7:

        CASE_RANGE_ODD (0xa723,0xa72f,-1)

        CASE_RANGE_ODD (0xa733,0xa76f,-1)

        CASE_RANGE_EVEN(0xa77a,0xa77c,-1)

        CASE_RANGE_ODD (0xa77f,0xa787,-1)

        CASE_SINGLE    (0xa78c,-1)

        break;

    case 0xff:

        CASE_RANGE     (0xff41,0xff5a,-32)

        break;

    case 0x104:

        CASE_RANGE     (0x10428,0x1044f,-40)

        break;

    }

   

    return code;

}

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List