HSharedKey.h
1 // Copyright (c) Tech Soft 3D, Inc.
2 //
3 // The information contained herein is confidential and proprietary to Tech Soft 3D, Inc.,
4 // and considered a trade secret as defined under civil and criminal statutes.
5 // Tech Soft 3D, Inc. shall pursue its civil and criminal remedies in the event of
6 // unauthorized use or misappropriation of its trade secrets. Use of this information
7 // by anyone other than authorized employees of Tech Soft 3D, Inc. is granted only under
8 // a written non-disclosure agreement, expressly prescribing the scope and manner of such use.
9 
10 #ifndef _HSharedKey_H
11 #define _HSharedKey_H
12 
13 #ifdef H_PACK_8
14 #pragma pack(push)
15 #pragma pack(8)
16 #endif
17 
18 #include "HTools.h"
19 
20 #include "vhash.h"
21 #include "HStream.h"
22 #include "HOpcodeShell.h"
23 #include "HPolyPoly.h"
24 
25 
26 #define OVERLOAD_INTERPRET_INT(base_class__name__abc) \
27  TK_Status Interpret (BStreamFileToolkit & tk, HC_KEY key, int variant = 0) \
28  { \
29  TK_Status status = base_class__name__abc::Interpret(tk,key,variant); \
30  m_key = key; \
31  return status; \
32  }
33 #define OVERLOAD_INTERPRET_CHAR(base_class__name__abc) \
34  TK_Status Interpret (BStreamFileToolkit & tk, HC_KEY key, char const * name) \
35  { \
36  TK_Status status = base_class__name__abc::Interpret(tk,key,name); \
37  m_key = key; \
38  return status; \
39  }
40 
41 #define OVERLOAD_WRITE(base_class__name__abc) \
42  TK_Status Write(BStreamFileToolkit & tk) \
43  { \
44  TK_Status status = base_class__name__abc::Write(tk); \
45  m_pPersIdent->AssociateKey(m_key); \
46  return status; \
47  }
48 
49 #define OVERLOAD_EXECUTE(base_class___name__abc) \
50  TK_Status Execute (BStreamFileToolkit &tk) \
51  { \
52  TK_Status status = base_class___name__abc::Execute(tk); \
53  m_pPersIdent->AssociateKey(last_key (tk)); \
54  return status; \
55  }
56 
57 #define OVERLOAD_WRITE_POLY(base_class__name__abc) \
58  TK_Status Write(BStreamFileToolkit & tk) \
59  { \
60  TK_Status status = base_class__name__abc::Write(tk); \
61  for (int i = 0; i < m_primitive_count; i++) \
62  m_pPersIdent->AssociateKey(m_keys[i]); \
63  return status; \
64  }
65 
66 #define OVERLOAD_EXECUTE_POLY(base_class___name__abc) \
67  TK_Status Execute (BStreamFileToolkit & tk) \
68  { \
69  TK_Status status = base_class___name__abc::Execute(tk); \
70  for (int i = 0; i < m_primitive_count; i++) \
71  m_pPersIdent->AssociateKey(m_keys[i]); \
72  return status; \
73  }
74 
80 class MVO_API HSharedKey
81 {
82 public:
84  HSharedKey();
85  ~HSharedKey()
86  {
87  delete_vhash(m_pKeyIdentHashTable);
88  delete_vhash(m_pIdentKeyHashTable);
89  }
90 
95  long AssociateKey(HC_KEY key);
96 
101  bool DisAssociateKey(HC_KEY key);
102 
106  void AssociateKeysInSegment(const char *seg = 0);
107 
111  void DisAssociateKeysInSegment(const char *seg = 0);
112 
117  HC_KEY GetKeyFromIdent(long ident);
118 
123  long GetIdentFromKey(HC_KEY ident);
124 
128  void SetupStreamToolkit(HStreamFileToolkit *tk);
129 
132  void Reset();
133 
134 private:
135  unsigned int m_PersCounter;
136  vhash_t *m_pKeyIdentHashTable;
137  vhash_t *m_pIdentKeyHashTable;
138 };
139 
140 
142 class TK_PIShell : public HTK_Shell {
143 public:
147  TK_PIShell(HSharedKey *persIdent) : HTK_Shell()
148  {
149  m_pPersIdent = persIdent;
150  }
151  OVERLOAD_INTERPRET_INT(HTK_Shell)
152  OVERLOAD_WRITE(HTK_Shell)
153  OVERLOAD_EXECUTE(HTK_Shell)
154 
155 
160  virtual TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
161 
162 private:
163  HSharedKey *m_pPersIdent;
164  HC_KEY m_key;
165 };
166 
168 class TK_PIOpen_Segment : public HTK_Open_Segment {
169 public:
173  TK_PIOpen_Segment(HSharedKey *persIdent) : HTK_Open_Segment()
174  {
175  m_pPersIdent = persIdent;
176  }
177 
178  OVERLOAD_INTERPRET_CHAR(HTK_Open_Segment)
179  OVERLOAD_WRITE(HTK_Open_Segment)
180  OVERLOAD_EXECUTE(HTK_Open_Segment)
181 
182 
187  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
188 
189 private:
190  HSharedKey *m_pPersIdent;
191  HC_KEY m_key;
192 
193 };
194 
196 class TK_PICircle : public HTK_Circle {
197 public:
201  TK_PICircle(unsigned char opcode, HSharedKey *persIdent) : HTK_Circle(opcode)
202  {
203  m_pPersIdent = persIdent;
204  }
205  OVERLOAD_INTERPRET_INT(HTK_Circle)
206  OVERLOAD_WRITE(HTK_Circle)
207  OVERLOAD_EXECUTE(HTK_Circle)
208 
209 
214  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
215 
216 private:
217  HSharedKey *m_pPersIdent;
218  HC_KEY m_key;
219 
220 };
221 
223 class TK_PIEllipse : public HTK_Ellipse {
224 public:
228  TK_PIEllipse(unsigned char opcode, HSharedKey *persIdent) : HTK_Ellipse(opcode)
229  {
230  m_pPersIdent = persIdent;
231  }
232  OVERLOAD_INTERPRET_INT(HTK_Ellipse)
233  OVERLOAD_WRITE(HTK_Ellipse)
234  OVERLOAD_EXECUTE(HTK_Ellipse)
235 
236 
241  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
242 
243 private:
244 
245  HSharedKey *m_pPersIdent;
246  HC_KEY m_key;
247 
248 
249 };
250 
252 class TK_PIGrid : public HTK_Grid {
253 public:
257  TK_PIGrid(HSharedKey *persIdent) : HTK_Grid()
258  {
259  m_pPersIdent = persIdent;
260  }
261  OVERLOAD_INTERPRET_INT(HTK_Grid)
262  OVERLOAD_WRITE(HTK_Grid)
263  OVERLOAD_EXECUTE(HTK_Grid)
264 
265 
270  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
271 
272 private:
273  HSharedKey *m_pPersIdent;
274  HC_KEY m_key;
275 
276 };
277 
279 class TK_PIImage : public HTK_Image {
280 public:
284  TK_PIImage(HSharedKey *persIdent) : HTK_Image()
285  {
286  m_pPersIdent = persIdent;
287  }
288  OVERLOAD_INTERPRET_INT(HTK_Image)
289  OVERLOAD_WRITE(HTK_Image)
290  OVERLOAD_EXECUTE(HTK_Image)
291 
292 
297  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **) const;
298 
299 private:
300  HSharedKey *m_pPersIdent;
301  HC_KEY m_key;
302 
303 
304 };
305 
307 class TK_PILine : public HTK_Line {
308 public:
312  TK_PILine(HSharedKey *persIdent) : HTK_Line()
313  {
314  m_pPersIdent = persIdent;
315  }
316  OVERLOAD_INTERPRET_INT(HTK_Line)
317  OVERLOAD_WRITE(HTK_Line)
318  OVERLOAD_EXECUTE(HTK_Line)
319 
320 
325  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
326 
327 private:
328  HSharedKey *m_pPersIdent;
329  HC_KEY m_key;
330 
331 
332 };
333 
335 class TK_PIPolypoint : public HTK_Polypoint {
336 public:
340  TK_PIPolypoint(unsigned char opcode, HSharedKey *persIdent) : HTK_Polypoint(opcode)
341  {
342  m_pPersIdent = persIdent;
343  }
344  OVERLOAD_INTERPRET_INT(HTK_Polypoint)
345  OVERLOAD_WRITE(HTK_Polypoint)
346  OVERLOAD_EXECUTE(HTK_Polypoint)
347 
348 
353  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
354 
355 private:
356  HSharedKey *m_pPersIdent;
357  HC_KEY m_key;
358 
359 
360 };
361 
363 class TK_PIPolyPolypoint : public HTK_PolyPolypoint {
364 public:
368  TK_PIPolyPolypoint(unsigned char opcode, HSharedKey *persIdent) : HTK_PolyPolypoint(opcode)
369  {
370  m_pPersIdent = persIdent;
371  }
372  OVERLOAD_WRITE_POLY(HTK_PolyPolypoint)
373  OVERLOAD_EXECUTE_POLY(HTK_PolyPolypoint)
374 
375 
380  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
381 
382 private:
383  HSharedKey *m_pPersIdent;
384 
385 };
386 
388 class TK_PIPoint : public HTK_Point {
389 public:
393  TK_PIPoint(unsigned char opcode, HSharedKey *persIdent) : HTK_Point(opcode)
394  {
395  m_pPersIdent = persIdent;
396  }
397  OVERLOAD_INTERPRET_INT(HTK_Point)
398  OVERLOAD_WRITE(HTK_Point)
399  OVERLOAD_EXECUTE(HTK_Point)
400 
401 
406  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
407 
408 private:
409  HSharedKey *m_pPersIdent;
410  HC_KEY m_key;
411 
412 
413 };
414 
416 class TK_PISpot_Light : public HTK_Spot_Light {
417 public:
421  TK_PISpot_Light(HSharedKey *persIdent) : HTK_Spot_Light()
422  {
423  m_pPersIdent = persIdent;
424  }
425  OVERLOAD_INTERPRET_INT(HTK_Spot_Light)
426  OVERLOAD_WRITE(HTK_Spot_Light)
427  OVERLOAD_EXECUTE(HTK_Spot_Light)
428 
429 
434  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
435 
436 private:
437  HSharedKey *m_pPersIdent;
438  HC_KEY m_key;
439 
440 
441 };
442 
444 class TK_PIArea_Light : public HTK_Area_Light {
445 public:
449  TK_PIArea_Light(HSharedKey *persIdent) : HTK_Area_Light()
450  {
451  m_pPersIdent = persIdent;
452  }
453  OVERLOAD_INTERPRET_INT(HTK_Area_Light)
454  OVERLOAD_WRITE(HTK_Area_Light)
455  OVERLOAD_EXECUTE(HTK_Area_Light)
456 
457 
462  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
463 
464 private:
465  HSharedKey *m_pPersIdent;
466  HC_KEY m_key;
467 
468 
469 };
470 
472 class TK_PIMesh : public HTK_Mesh {
473 public:
477  TK_PIMesh(HSharedKey *persIdent) : HTK_Mesh()
478  {
479  m_pPersIdent = persIdent;
480  }
481  OVERLOAD_INTERPRET_INT(HTK_Mesh)
482  OVERLOAD_WRITE(HTK_Mesh)
483  OVERLOAD_EXECUTE(HTK_Mesh)
484 
485 
490  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
491 
492 private:
493  HSharedKey *m_pPersIdent;
494  HC_KEY m_key;
495 
496 
497 };
498 
500 class TK_PINURBS_Curve : public HTK_NURBS_Curve {
501 public:
505  TK_PINURBS_Curve(HSharedKey *persIdent) : HTK_NURBS_Curve()
506  {
507  m_pPersIdent = persIdent;
508  }
509  OVERLOAD_INTERPRET_INT(HTK_NURBS_Curve)
510  OVERLOAD_WRITE(HTK_NURBS_Curve)
511  OVERLOAD_EXECUTE(HTK_NURBS_Curve)
512 
513 
518  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
519 
520 private:
521  HSharedKey *m_pPersIdent;
522  HC_KEY m_key;
523 
524 
525 };
526 
528 class TK_PICutting_Plane : public HTK_Cutting_Plane {
529 public:
533  TK_PICutting_Plane( HSharedKey *persIdent) : HTK_Cutting_Plane()
534  {
535  m_pPersIdent = persIdent;
536  }
537  OVERLOAD_INTERPRET_INT(HTK_Cutting_Plane)
538  OVERLOAD_WRITE(HTK_Cutting_Plane)
539  OVERLOAD_EXECUTE(HTK_Cutting_Plane)
540 
541 
546  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
547 
548 private:
549  HSharedKey *m_pPersIdent;
550  HC_KEY m_key;
551 
552 
553 };
554 
556 class TK_PIText : public HTK_Text {
557 public:
561  TK_PIText(unsigned char opcode, HSharedKey *persIdent) : HTK_Text(opcode)
562  {
563  m_pPersIdent = persIdent;
564  }
565  OVERLOAD_INTERPRET_INT(HTK_Text)
566  OVERLOAD_WRITE(HTK_Text)
567  OVERLOAD_EXECUTE(HTK_Text)
568 
569 
574  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
575 
576 private:
577  HSharedKey *m_pPersIdent;
578  HC_KEY m_key;
579 
580 
581 };
582 
584 class TK_PIReferenced_Segment : public HTK_Referenced_Segment {
585 public:
589  TK_PIReferenced_Segment(unsigned char opcode, HSharedKey *persIdent) : HTK_Referenced_Segment(opcode)
590  {
591  m_pPersIdent = persIdent;
592  }
593  OVERLOAD_INTERPRET_INT(HTK_Referenced_Segment)
594  OVERLOAD_WRITE(HTK_Referenced_Segment)
595  OVERLOAD_EXECUTE(HTK_Referenced_Segment)
596 
597 
602  TK_Status Clone (BStreamFileToolkit & tk, BBaseOpcodeHandler **handler) const;
603 
604 private:
605  HSharedKey *m_pPersIdent;
606  HC_KEY m_key;
607 
608 
609 };
610 
611 
612 
613 #ifdef H_PACK_8
614 #pragma pack(pop)
615 #endif
616 
617 #endif
618 
619 
620 
621 
622 
623 
624 
625 
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
TK_PIReferenced_Segment(unsigned char opcode, HSharedKey *persIdent)
Definition: HSharedKey.h:589
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
Definition: HSharedKey.h:556
TK_PIImage(HSharedKey *persIdent)
Definition: HSharedKey.h:284
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
TK_PIText(unsigned char opcode, HSharedKey *persIdent)
Definition: HSharedKey.h:561
Definition: HSharedKey.h:363
Definition: HSharedKey.h:196
TK_PICutting_Plane(HSharedKey *persIdent)
Definition: HSharedKey.h:533
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
TK_PIMesh(HSharedKey *persIdent)
Definition: HSharedKey.h:477
Definition: HSharedKey.h:168
Definition: HSharedKey.h:500
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
virtual TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
Definition: HSharedKey.h:416
Definition: HSharedKey.h:388
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
Definition: HSharedKey.h:279
Definition: HSharedKey.h:528
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
TK_PIPoint(unsigned char opcode, HSharedKey *persIdent)
Definition: HSharedKey.h:393
TK_PIEllipse(unsigned char opcode, HSharedKey *persIdent)
Definition: HSharedKey.h:228
TK_PICircle(unsigned char opcode, HSharedKey *persIdent)
Definition: HSharedKey.h:201
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
Definition: HSharedKey.h:307
Definition: HSharedKey.h:252
Definition: HSharedKey.h:335
TK_PILine(HSharedKey *persIdent)
Definition: HSharedKey.h:312
TK_PIOpen_Segment(HSharedKey *persIdent)
Definition: HSharedKey.h:173
TK_PIShell(HSharedKey *persIdent)
Definition: HSharedKey.h:147
TK_PISpot_Light(HSharedKey *persIdent)
Definition: HSharedKey.h:421
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
Definition: HSharedKey.h:444
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
TK_PIGrid(HSharedKey *persIdent)
Definition: HSharedKey.h:257
TK_PIPolypoint(unsigned char opcode, HSharedKey *persIdent)
Definition: HSharedKey.h:340
Definition: HSharedKey.h:223
Definition: HSharedKey.h:142
Definition: HSharedKey.h:472
TK_PIArea_Light(HSharedKey *persIdent)
Definition: HSharedKey.h:449
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **) const
TK_PINURBS_Curve(HSharedKey *persIdent)
Definition: HSharedKey.h:505
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
TK_PIPolyPolypoint(unsigned char opcode, HSharedKey *persIdent)
Definition: HSharedKey.h:368
Definition: HSharedKey.h:584
Definition: HSharedKey.h:80
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const
TK_Status Clone(BStreamFileToolkit &tk, BBaseOpcodeHandler **handler) const