Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.3 KiB

  1. //
  2. // epval.h
  3. //
  4. // CEnumPropertyValBase
  5. //
  6. #ifndef EPVAL_H
  7. #define EPVAL_H
  8. //////////////////////////////////////////////////////////////////////////////
  9. //////////////////////////////////////////////////////////////////////////////
  10. //
  11. // SHARED_TFPROPERTYVAL_ARRAY
  12. //
  13. // I would love to make this a class,
  14. // but I can't get the compiler to accept a run-time template arg
  15. //
  16. //////////////////////////////////////////////////////////////////////////////
  17. //////////////////////////////////////////////////////////////////////////////
  18. typedef struct _SHARED_TFPROPERTYVAL_ARRAY
  19. {
  20. ULONG cRef;
  21. ULONG cAttrVals;
  22. TF_PROPERTYVAL rgAttrVals[1]; // 1 or more...
  23. } SHARED_TFPROPERTYVAL_ARRAY;
  24. SHARED_TFPROPERTYVAL_ARRAY *SAA_New(ULONG cAttrVals);
  25. inline void SAA_AddRef(SHARED_TFPROPERTYVAL_ARRAY *paa)
  26. {
  27. paa->cRef++;
  28. }
  29. void SAA_Release(SHARED_TFPROPERTYVAL_ARRAY *paa);
  30. //////////////////////////////////////////////////////////////////////////////
  31. //////////////////////////////////////////////////////////////////////////////
  32. //
  33. // CEnumPropertyValue
  34. //
  35. //////////////////////////////////////////////////////////////////////////////
  36. //////////////////////////////////////////////////////////////////////////////
  37. class CEnumPropertyValue : public IEnumTfPropertyValue,
  38. public CComObjectRootImmx
  39. {
  40. public:
  41. CEnumPropertyValue(SHARED_TFPROPERTYVAL_ARRAY *paa)
  42. {
  43. Dbg_MemSetThisNameID(TEXT("CEnumPropertyValue"));
  44. Assert(_ulCur == 0);
  45. _paa = paa;
  46. SAA_AddRef(paa);
  47. }
  48. ~CEnumPropertyValue()
  49. {
  50. if (_paa != NULL)
  51. {
  52. SAA_Release(_paa);
  53. }
  54. }
  55. BEGIN_COM_MAP_IMMX(CEnumPropertyValue)
  56. COM_INTERFACE_ENTRY(IEnumTfPropertyValue)
  57. END_COM_MAP_IMMX()
  58. IMMX_OBJECT_IUNKNOWN_FOR_ATL()
  59. // IEnumTfAppPropertyValue
  60. STDMETHODIMP Clone(IEnumTfPropertyValue **ppEnum);
  61. STDMETHODIMP Next(ULONG ulCount, TF_PROPERTYVAL *rgValues, ULONG *pcFetched);
  62. STDMETHODIMP Reset();
  63. STDMETHODIMP Skip(ULONG ulCount);
  64. private:
  65. CEnumPropertyValue() { Dbg_MemSetThisNameID(TEXT("CEnumPropertyValue")); }
  66. ULONG _ulCur;
  67. SHARED_TFPROPERTYVAL_ARRAY *_paa;
  68. DBG_ID_DECLARE;
  69. };
  70. #endif // EPVAL_H