IWORKPropertyInfo.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
00002 /*
00003  * This file is part of the libetonyek project.
00004  *
00005  * This Source Code Form is subject to the terms of the Mozilla Public
00006  * License, v. 2.0. If a copy of the MPL was not distributed with this
00007  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
00008  */
00009 
00010 #ifndef IWORKPROPERTYINFO_H_INCLUDED
00011 #define IWORKPROPERTYINFO_H_INCLUDED
00012 
00013 #include <string>
00014 
00015 namespace libetonyek
00016 {
00017 
00018 typedef std::string IWORKPropertyID_t;
00019 
00020 template<typename Name>
00021 struct IWORKPropertyInfo
00022 {
00023   // typedef Foo ValueType;
00024   // static const IWORKPropertyID_t id;
00025 };
00026 
00027 #define IWORK_DECLARE_PROPERTY(name, type) \
00028 namespace property { \
00029   struct name {}; \
00030 } \
00031 \
00032 template<> \
00033 struct IWORKPropertyInfo<property::name> \
00034 { \
00035   typedef type ValueType; \
00036   static const IWORKPropertyID_t id; \
00037 }
00038 
00039 #define IWORK_IMPLEMENT_PROPERTY(name) \
00040 const IWORKPropertyID_t IWORKPropertyInfo<property::name>::id = #name
00041 
00042 }
00043 
00044 #endif // IWORKPROPERTYINFO_H_INCLUDED
00045 
00046 /* vim:set shiftwidth=2 softtabstop=2 expandtab: */