--- /dev/null
+// Roast+ License
+/*
+*/
+#ifndef __SFJP_ROAST__lexical2__variable_HPP__
+#define __SFJP_ROAST__lexical2__variable_HPP__
+
+#include "roast/memory/sized_ptr.hpp"
+
+namespace roast
+{
+ namespace lexical
+ {
+ ////////////////////////////////////////////////////////////////////
+
+ template <typename T>
+ class variable
+ {
+ public:
+ T data;
+
+ /////////////////
+
+ /*
+ template <typename InputIterator, typename _Param>
+ bool parse(InputIterator& it, const _Param& param) const
+ {
+ //memcmp
+
+ bool ret = (*it == data);
+ if ( ret )
+ it++;
+ return ret;
+ }*/
+
+ //----
+
+ template <typename OutputStream, typename _Document>
+ void generate(OutputStream& os, const _Document& doc) const
+ {
+ os << data;
+ }
+ };
+
+ ////////////////////////////////////////////////////////////////////
+
+ template <typename T>
+ class fixed_ptr
+ {
+ private:
+ const unsigned int length;
+ const T* data;
+ public:
+ fixed_ptr(const T* ptr, unsigned int size=0) : data(ptr), length(size){}
+
+ /////////////////
+
+ template <typename InputIterator, typename _Param>
+ bool parse(InputIterator& it, const _Param& param) const
+ {
+ const T* p = data;
+ for(unsigned int i=length; i!=0; i--, p++, it++)
+ {
+ if ( *it != data )
+ return false;
+ }
+ return true;
+ }
+
+ //----
+
+ template <typename OutputStream, typename _Document>
+ void generate(OutputStream& os, const _Document& doc) const
+ {
+ os.write(data, length);
+
+ /*
+ const T* p = data;
+ for(unsigned int i=length; i!=0; i--, p++)
+ {
+ os << *p;
+ }
+ */
+ }
+ };
+
+ ////////////////////////////////////////////////////////////////////
+ }
+}
+
+#endif//__SFJP_ROAST__lexical2__variable_HPP__