235d190598a7b2d61a4e798e7547953cefbaab9d
[supertux.git] / src / squirrel / squirrel / sqstring.h
1 /*      see copyright notice in squirrel.h */\r
2 #ifndef _SQSTRING_H_\r
3 #define _SQSTRING_H_\r
4 \r
5 inline SQHash _hashstr (const SQChar *s, size_t l)\r
6 {\r
7                 SQHash h = (SQHash)l;  /* seed */\r
8                 size_t step = (l>>5)|1;  /* if string is too long, don't hash all its chars */\r
9                 for (; l>=step; l-=step)\r
10                         h = h ^ ((h<<5)+(h>>2)+(unsigned short)*(s++));\r
11                 return h;\r
12 }\r
13 \r
14 struct SQString : public SQRefCounted\r
15 {\r
16         SQString(){}\r
17         ~SQString(){}\r
18 public:\r
19         static SQString *Create(SQSharedState *ss, const SQChar *, SQInteger len = -1 );\r
20         SQInteger Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval);\r
21         void Release();\r
22         SQSharedState *_sharedstate;\r
23         SQString *_next; //chain for the string table\r
24         SQInteger _len;\r
25         SQHash _hash;\r
26         SQChar _val[1];\r
27 };\r
28 \r
29 \r
30 \r
31 #endif //_SQSTRING_H_\r