소스 검색

Merge pull request #1714 from dnkoutso/master

Get value from text format name in GPBEnumDescriptor
Thomas Van Lenten 9 년 전
부모
커밋
2bcd43afe4
3개의 변경된 파일26개의 추가작업 그리고 0개의 파일을 삭제
  1. 1 0
      objectivec/GPBDescriptor.h
  2. 17 0
      objectivec/GPBDescriptor.m
  3. 8 0
      objectivec/Tests/GPBDescriptorTests.m

+ 1 - 0
objectivec/GPBDescriptor.h

@@ -123,6 +123,7 @@ typedef NS_ENUM(uint8_t, GPBFieldType) {
 - (BOOL)getValue:(nullable int32_t *)outValue forEnumName:(NSString *)name;
 
 - (nullable NSString *)textFormatNameForValue:(int32_t)number;
+- (BOOL)getValue:(nullable int32_t *)outValue forEnumTextFormatName:(NSString *)textFormatName;
 
 @end
 

+ 17 - 0
objectivec/GPBDescriptor.m

@@ -756,6 +756,23 @@ uint32_t GPBFieldAlternateTag(GPBFieldDescriptor *self) {
   return NO;
 }
 
+- (BOOL)getValue:(int32_t *)outValue forEnumTextFormatName:(NSString *)textFormatName;
+{
+    if (nameOffsets_ == NULL) [self calcValueNameOffsets];
+
+    for (uint32_t i = 0; i < valueCount_; ++i) {
+        int32_t value = values_[i];
+        NSString *valueTextFormatName = [self textFormatNameForValue:value];
+        if ([valueTextFormatName isEqual:textFormatName]) {
+            if (outValue) {
+                *outValue = value;
+            }
+            return YES;
+        }
+    }
+    return NO;
+}
+
 - (NSString *)textFormatNameForValue:(int32_t)number {
   if (nameOffsets_ == NULL) [self calcValueNameOffsets];
 

+ 8 - 0
objectivec/Tests/GPBDescriptorTests.m

@@ -125,6 +125,12 @@
       [descriptor getValue:&value forEnumName:@"TestAllTypes_NestedEnum_Baz"]);
   XCTAssertEqual(value, TestAllTypes_NestedEnum_Baz);
 
+  // TextFormat
+  enumName = [descriptor textFormatNameForValue:1];
+  XCTAssertNotNil(enumName);
+  XCTAssertTrue([descriptor getValue:&value forEnumTextFormatName:@"FOO"]);
+  XCTAssertEqual(value, TestAllTypes_NestedEnum_Foo);
+
   // Bad values
   enumName = [descriptor enumNameForValue:0];
   XCTAssertNil(enumName);
@@ -134,6 +140,8 @@
                           forEnumName:@"TestAllTypes_NestedEnum_Unknown"]);
   XCTAssertFalse([descriptor getValue:NULL
                           forEnumName:@"TestAllTypes_NestedEnum_Unknown"]);
+  XCTAssertFalse([descriptor getValue:NULL forEnumTextFormatName:@"Unknown"]);
+  XCTAssertFalse([descriptor getValue:&value forEnumTextFormatName:@"Unknown"]);
 }
 
 - (void)testEnumValueValidator {