ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/object.h
(Generate patch)

Comparing deliantra/server/include/object.h (file contents):
Revision 1.258 by root, Sat Apr 23 04:56:49 2011 UTC vs.
Revision 1.259 by root, Sun May 1 13:18:23 2011 UTC

73 * accessing the list directly. 73 * accessing the list directly.
74 * Exception is if you want to walk this list for some reason. 74 * Exception is if you want to walk this list for some reason.
75 */ 75 */
76struct key_value : slice_allocated 76struct key_value : slice_allocated
77{ 77{
78 key_value *next; 78 key_value *next; // must be first element
79 shstr key, value; 79 shstr key, value;
80};
81
82// "crossfires version of a perl hash."
83struct key_values
84{
85 key_value *first; // must be first element
86
87 bool empty() const
88 {
89 return !first;
90 }
91
92 void clear ();
93 shstr_tmp get (shstr_tmp key) const;
94 void del (shstr_tmp key);
95 void set (shstr_tmp key, shstr_tmp value);
96
97 void add (shstr_tmp key, shstr_tmp value); // liek set, but doesn't check for duplicates
98 void reverse (); // reverses the ordering, to be used after loading an object
99 key_values &operator =(const key_values &kv);
100
101 // custom extra fields management
102 struct access_proxy
103 {
104 key_values &kv;
105 shstr_tmp key;
106
107 access_proxy (key_values &kv, shstr_tmp key)
108 : kv (kv), key (key)
109 {
110 }
111
112 const access_proxy &operator =(shstr_tmp value) const
113 {
114 kv.set (key, value);
115 return *this;
116 }
117
118 operator const shstr_tmp () const { return kv.get (key); }
119 operator const char *() const { return kv.get (key); }
120
121 private:
122 void operator =(int);
123 };
124
125 const access_proxy operator [](shstr_tmp key)
126 {
127 return access_proxy (*this, key);
128 }
80}; 129};
81 130
82//-GPL 131//-GPL
83 132
84struct UUID 133struct UUID
322 object *ACC (RW, env); /* Pointer to the object which is the environment. 371 object *ACC (RW, env); /* Pointer to the object which is the environment.
323 * This is typically the container that the object is in. 372 * This is typically the container that the object is in.
324 */ 373 */
325 object *ACC (RW, more); /* Pointer to the rest of a large body of objects */ 374 object *ACC (RW, more); /* Pointer to the rest of a large body of objects */
326 object *head; /* Points to the main object of a large body */ // NO ACC, perl semantics are different 375 object *head; /* Points to the main object of a large body */ // NO ACC, perl semantics are different
327 key_value *key_values; /* Fields not explictly known by the loader. */
328 376
329 MTH void set_flag (int flagnum) 377 MTH void set_flag (int flagnum)
330 { 378 {
331 flag [flagnum] = true; 379 flag [flagnum] = true;
332 } 380 }
334 MTH void clr_flag (int flagnum) 382 MTH void clr_flag (int flagnum)
335 { 383 {
336 flag [flagnum] = false; 384 flag [flagnum] = false;
337 } 385 }
338 386
339 // privates / perl 387 // extra key value pairs
340 shstr_tmp kv_get (shstr_tmp key) const; 388 key_values kv;
341 void kv_del (shstr_tmp key);
342 void kv_set (shstr_tmp key, shstr_tmp value);
343 389
344//-GPL 390//-GPL
345
346 // custom extra fields management
347 struct key_value_access_proxy
348 {
349 object &ob;
350 shstr_tmp key;
351
352 key_value_access_proxy (object &ob, shstr_tmp key)
353 : ob (ob), key (key)
354 {
355 }
356
357 const key_value_access_proxy &operator =(shstr_tmp value) const
358 {
359 ob.kv_set (key, value);
360 return *this;
361 }
362
363 operator const shstr_tmp () const { return ob.kv_get (key); }
364 operator const char *() const { return ob.kv_get (key); }
365
366 private:
367 void operator =(int);
368 };
369
370 // operator [] is too annoying to use
371 const key_value_access_proxy kv (shstr_tmp key)
372 {
373 return key_value_access_proxy (*this, key);
374 }
375 391
376 bool parse_kv (object_thawer &f); // parse kv pairs, (ab-)used by archetypes, which should not exist at all 392 bool parse_kv (object_thawer &f); // parse kv pairs, (ab-)used by archetypes, which should not exist at all
377 MTH void post_load_check (); // do some adjustments after parsing 393 MTH void post_load_check (); // do some adjustments after parsing
378 static object *read (object_thawer &f, maptile *map = 0); // map argument due to toal design bogosity, must go. 394 static object *read (object_thawer &f, maptile *map = 0); // map argument due to toal design bogosity, must go.
379 bool write (object_freezer &f); 395 bool write (object_freezer &f);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines