<!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>LineLocationPatternConverter Member List</h1>This is the complete list of members for <a class="el" href="classlog4cxx_1_1pattern_1_1_line_location_pattern_converter.html">LineLocationPatternConverter</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_1pattern_1_1_pattern_converter.html#b7885f06f40816fff7278404cfb940b1">append</a>(LogString &amp;toAppendTo, const std::string &amp;src)</td><td><a class="el" href="classlog4cxx_1_1pattern_1_1_pattern_converter.html">PatternConverter</a></td><td><code> [protected, static]</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_1pattern_1_1_line_location_pattern_converter.html#e365eeefff6366cf929d51d7ef87255b">format</a>(const log4cxx::spi::LoggingEventPtr &amp;event, LogString &amp;toAppendTo, log4cxx::helpers::Pool &amp;p) const </td><td><a class="el" href="classlog4cxx_1_1pattern_1_1_line_location_pattern_converter.html">LineLocationPatternConverter</a></td><td><code> [virtual]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1pattern_1_1_logging_event_pattern_converter.html#39af815814e5c3011ed62175104853ed">log4cxx::pattern::LoggingEventPatternConverter::format</a>(const log4cxx::helpers::ObjectPtr &amp;obj, LogString &amp;toAppendTo, log4cxx::helpers::Pool &amp;p) const </td><td><a class="el" href="classlog4cxx_1_1pattern_1_1_logging_event_pattern_converter.html">LoggingEventPatternConverter</a></td><td></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_1pattern_1_1_pattern_converter.html#3ad0252a0a90d42e1651f41de2237ef2">getStyleClass</a>(const log4cxx::helpers::ObjectPtr &amp;e) const </td><td><a class="el" href="classlog4cxx_1_1pattern_1_1_pattern_converter.html">PatternConverter</a></td><td><code> [virtual]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1pattern_1_1_logging_event_pattern_converter.html#54accf71f24c8879b3dda4f62bb4dc0d">handlesThrowable</a>() const </td><td><a class="el" href="classlog4cxx_1_1pattern_1_1_logging_event_pattern_converter.html">LoggingEventPatternConverter</a></td><td><code> [virtual]</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_1pattern_1_1_logging_event_pattern_converter.html#f503d35027e5840903773e0d3d56d1c9">LoggingEventPatternConverter</a>(const LogString &amp;name, const LogString &amp;style)</td><td><a class="el" href="classlog4cxx_1_1pattern_1_1_logging_event_pattern_converter.html">LoggingEventPatternConverter</a></td><td><code> [protected]</code></td></tr>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1pattern_1_1_line_location_pattern_converter.html#8ab21ae90307902122f92aca54fed1f4">newInstance</a>(const std::vector&lt; LogString &gt; &amp;options)</td><td><a class="el" href="classlog4cxx_1_1pattern_1_1_line_location_pattern_converter.html">LineLocationPatternConverter</a></td><td><code> [static]</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_1pattern_1_1_pattern_converter.html#25fcc227ebdb57c4c341466ea76b1239">PatternConverter</a>(const LogString &amp;name, const LogString &amp;style)</td><td><a class="el" href="classlog4cxx_1_1pattern_1_1_pattern_converter.html">PatternConverter</a></td><td><code> [protected]</code></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_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>
  <tr class="memlist"><td><a class="el" href="classlog4cxx_1_1pattern_1_1_pattern_converter.html#70a4b8169b80539ab3f61dd0d6c9b7e3">~PatternConverter</a>()</td><td><a class="el" href="classlog4cxx_1_1pattern_1_1_pattern_converter.html">PatternConverter</a></td><td><code> [protected, 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>
