<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--

 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.

--><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Apache log4cxx: Member List</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.6 -->
<div class="tabs">
  <ul>
    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="modules.html"><span>Modules</span></a></li>
    <li><a href="namespaces.html"><span>Namespaces</span></a></li>
    <li id="current"><a href="classes.html"><span>Classes</span></a></li>
    <li><a href="files.html"><span>Files</span></a></li>
  </ul></div>
<div class="tabs">
  <ul>
    <li><a href="classes.html"><span>Alphabetical&nbsp;List</span></a></li>
    <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
    <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
  </ul></div>
<h1>DateFormat Member List</h1>This is the complete list of members for <a class="el" href="classlog4cxx_1_1helpers_1_1_date_format.html">DateFormat</a>, including all inherited members.<p><table>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object_impl.html#0198815940c2715c84b0e04828cf8dfa">addRef</a>() const </td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object_impl.html">ObjectImpl</a></td><td><code> [virtual]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object.html#5a7744a4efdb699356cef215613903c3">cast</a>(const Class &amp;clazz) const =0</td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object.html">Object</a></td><td><code> [pure virtual]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_date_format.html#4ed3a759825dfb2e3acacc178dd13416">DateFormat</a>()</td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_date_format.html">DateFormat</a></td><td><code> [protected]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_date_format.html#96fc17cefabd50dec2d68967e45d36f1">format</a>(LogString &amp;s, log4cxx_time_t tm, log4cxx::helpers::Pool &amp;p) const =0</td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_date_format.html">DateFormat</a></td><td><code> [pure virtual]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object.html#e7b62e37794f297c0cede40ed0e84fcd">getClass</a>() const </td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object.html">Object</a></td><td><code> [virtual]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object.html#0bdbda4effe8938c1aca6d4397e5a39d">getStaticClass</a>()</td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object.html">Object</a></td><td><code> [static]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object.html#3604a5fb08f7048d41b51a3943740b96">instanceof</a>(const Class &amp;clazz) const =0</td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object.html">Object</a></td><td><code> [pure virtual]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_date_format.html#d5f69e832f2e604c0bf64b1fecb9ce82">numberFormat</a>(LogString &amp;s, int n, log4cxx::helpers::Pool &amp;p) const </td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_date_format.html">DateFormat</a></td><td><code> [virtual]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object_impl.html#5e6e9fc30dc1f098fee72d516ea0bad0">ObjectImpl</a>()</td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object_impl.html">ObjectImpl</a></td><td></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object_impl.html#88f2ae00c84f3f309965e6588ed158d4">ref</a></td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object_impl.html">ObjectImpl</a></td><td><code> [mutable, protected]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object.html#50ec9288d0b7e3140dee8e24ee74a212">registerClass</a>()</td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object.html">Object</a></td><td><code> [static]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object_impl.html#55c31efee1904916b999395fa4d46a24">releaseRef</a>() const </td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object_impl.html">ObjectImpl</a></td><td><code> [virtual]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_date_format.html#4eb964c1a542b0bcf877227ec3909414">setTimeZone</a>(const TimeZonePtr &amp;zone)</td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_date_format.html">DateFormat</a></td><td><code> [virtual]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_date_format.html#a62fd555fe5202905c53ad8630d8bfec">~DateFormat</a>()</td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_date_format.html">DateFormat</a></td><td><code> [virtual]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object.html#b5cc4f9ba1ea5c2f25bc4b1f0dac5dc5">~Object</a>()</td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object.html">Object</a></td><td><code> [inline, virtual]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object_impl.html#bb974728bb3cb991285140c1aa57eed7">~ObjectImpl</a>()</td><td><a class="el" href="classlog4cxx_1_1helpers_1_1_object_impl.html">ObjectImpl</a></td><td><code> [virtual]</code></td></tr>
</table><!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
    </BODY>
</HTML>
