17d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber/*
27d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber * Copyright (C) 2010 The Android Open Source Project
37d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber *
47d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
57d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber * you may not use this file except in compliance with the License.
67d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber * You may obtain a copy of the License at
77d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber *
87d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
97d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber *
107d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber * Unless required by applicable law or agreed to in writing, software
117d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
127d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber * See the License for the specific language governing permissions and
147d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber * limitations under the License.
157d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber */
167d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
177d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber#ifndef A_ATOMIZER_H_
187d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
197d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber#define A_ATOMIZER_H_
207d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
217d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber#include <stdint.h>
227d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
237d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber#include <media/stagefright/foundation/ABase.h>
247d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber#include <media/stagefright/foundation/AString.h>
257d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber#include <utils/List.h>
267d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber#include <utils/Vector.h>
277d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber#include <utils/threads.h>
287d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
297d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Hubernamespace android {
307d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
317d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huberstruct AAtomizer {
327d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber    static const char *Atomize(const char *name);
337d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
347d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huberprivate:
357d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber    static AAtomizer gAtomizer;
367d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
377d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber    Mutex mLock;
387d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber    Vector<List<AString> > mAtoms;
397d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
407d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber    AAtomizer();
417d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
427d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber    const char *atomize(const char *name);
437d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
447d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber    static uint32_t Hash(const char *s);
457d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
467d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(AAtomizer);
477d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber};
487d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
497d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber}  // namespace android
507d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber
517d2f703649e270b635018f8b7219bb0e1d62a2e5Andreas Huber#endif  // A_ATOMIZER_H_
52